есть ли решение у такой вот задачи?

Temach

Задача:
------------------------------------------------------------
Допустим верно утверждение:
Для любого Y найдется X такой что Y=md5(X) и length(X)<Z
где length - длина строки.
Найдите Z.
-------------------------------------------------------------
имеет ли решение?

apl13

Решение, очевидно, есть. Конечное число хешей, для каждого есть наикратчайшая исходная последовательность, очевидно, у них есть конечная верхняя грань.
Или тебе алгоритм, как искать?

Temach

хотя бы чему равно Z но можно и в добавок алгоритм

Papazyan

Хочешь сэкономить на месте для пароля?

Temach

хочу прикинуть сколько места займет таблица всех паролей для всех значений md5

zya369

безотносительно задачи. верно ли утверждение?
Для любого Y найдется X такой что Y=md5(X) и length(X)<Z
что-то навскидку неочевидно. или я туплю?

Temach

думаю верно, например если z=10000000000000

BatoSan

хочу прикинуть сколько места займет таблица всех паролей для всех значений md5
А заполнять её как планируешь при этом?
Вообще, можешь почитать про радужные таблицы. Возможно, это то, что тебе нужно.

Dasar

Достаточно 17байт=16байт(длина md5)+1 доп. байт с вероятностью близкой к ~99%. Это следует из того, что md5 дает равномерное распределение результата.
При 17 байтах на каждое значение хэша приходится в среднем 256 значений данных. 18 байт - 65536 данных.
Для получения точной функции F1(кол-во доп.байты)=вероятность или F2(вероятность)=кол-во доп. байт стоит развить указанный подход в сторону построения более точной вероятностной модели.

Temach

А заполнять её как планируешь при этом?Вообще, можешь почитать про радужные таблицы. Возможно, это то, что тебе нужно.
в них нужный хэш не нашёлся, они только для некоторого подмножества пока что сгенерены

Temach

z=17 ?
остаточно 17байт=16байт(длина md5)+1 доп. байт с вероятностью близкой к ~99%. Это следует из того, что md5 дает равномерное распределение результата.При 17 байтах на каждое значение хэша приходится в среднем 256 значений данных. 18 байт - 65536 данных.Для получения точной функции F1(кол-во доп.байты)=вероятность или F2(вероятность)=кол-во доп. байт стоит развить указанный подход в сторону построения более точной вероятностной модели.
    
    

Dasar

z=17 ?
Z = 17байт

Temach

а точно не z=5 ответ случайно?

Dasar

а точно не z=5 ответ случайно?
5 чего? Предположим, что речь идет о 5 байт(40бит). Это не может быть ответом, потому что длина самого MD5 - 8байт(128бит). Однозначная функция (которой является md5-hash) не может множество с меньшей мощностью преобразовать в множество с большей мощностью.

Temach

ну разве для любого значения Y не найдется такой X, что strlen(X) <5 ?
если нет, то приведи пример Y для которого не найдется strlen(X) <5 ?

Dasar

Не найдется.
В данном случае:
Различных Y-ков - 2^128 = 3*10^38
Различных X-ов только - 2^40 = 1*10^12
один X покрывает один Y (не больше одного, при переходе к множественному варианту)
Соответственно, останется не покрытыми 3*10^38/(1*10^12) =3*10^26 X-ов

Dasar

если нет, то приведи пример Y для которого не найдется strlen(X) <5 ?
Y = 0
ps
Это так, с вероятностью 1 - 1/(2^88)

zya369

ну вот скажем
mdX(s) = md5(s) if md5(s) != 42 else 43
тоже весьма равномерно распределена (не сильно хуже md5 но нет такого s, что mdX(s) == 42

Dasar

тоже весьма равномерно распределена (не сильно хуже md5 но нет такого s, что mdX(s) == 42
mdX равномерно распределена при анализе ее как черного ящика.
При анализе как белого ящика mdX неравномерно распределена из-за того, что mdX раскладывается на md5*f, где f - неравномерная сужающая функция.
Про md5 известно, что для неё неизвестен такой вариант раскладывания

salamander

хочу прикинуть сколько места займет таблица всех паролей для всех значений md5
Если даже на каждое возможное значение md5 тебе придется хранить один байт, то тебе потребуется 2^128 т.е. порядка 3.4 * 10^29 гигабайт.
То есть твой вопрос имеет смысл только в том случае, если md5 может принимать существенно меньшее множество значений, чем весь отрезок [0..2^128-1], что маловероятно для такой распространенной и хорошо исследованной хэш-функции.

Dasar

то тебе потребуется 2^256
Почему 256, а не 128?

salamander

Потому что я туплю. Ща исправлю все вычисления, я там много где туплю...

zya369

Про md5 известно, что для неё неизвестен такой вариант раскладывания
пруф?
ЗЫ беглый гуглинг на предмет сюръективности md5 ничего не дал, т.ч, похоже, утверждение может быть и неверно

Dasar

ЗЫ беглый гуглинг на предмет сюръективности md5 ничего не дал, т.ч, похоже, утверждение может быть и неверно
Да, может быть неверно. Мы лишь полагаемся-на-её-сюръективность.
сюръективность=есть математическое доказательство сюръективности
полагаемся-на-сюръективность= отсутствует несюръективность (отсутствует доказательство несеръюктивности, после того как передовая математика потратила на это множество человеко и машино- часов)
ps
Утверждение о сюрьективности Md5 сделано в расширенной конструктивной логике.
Классическая логика - да, нет
Конструктивная логика - да, нет, не знаю
Расширенная конструктивная логика - на входе и внутри (да, нет, не знаю на выходе (да, нет). 'не знаю' сводится к 'да' или 'нет', в зависимости от доп. условий.

zya369

 
При анализе как белого ящика mdX неравномерно распределена из-за того, что mdX раскладывается на md5*f, где f - не равномерная функция, а md5 - равномерная.

mdX неравномерна не потому, что она явно выразима через md5, а потому, что явно не попадает в 42
а утверждение

для любого T
если mdXT = md5 if md5 != T else T + 1 (mod 2**128 то mdXT распределено "хуже", чем md5

 вообще говоря может быть не верно (и, кажется, равносильно изначальному утверждению т.к. вполне может быть, что для любого s mdXT(s) == md5(s) (т.к. неизвестно, существует ли s: md5(s) == T)

zya369

отсутствует доказательство несеръюктивности, после того как передовая математика потратила на это множество человеко и машино- часов
хз, кстати, заморачивался ли кто-то именно сюръективностью

Dasar

mdX неравномерна не потому, что она явно выразима через md5, а потому, что явно не попадает в 42
Поправлюсь: mdX - плохая hash-функция, потому что она теряет информацию и раскладывается на md5*f, где f - сужающая функция
Сужающая функция - на выходе кол-во значений меньше, чем на входе
Всякий hash (и md5, в частности) исследуется на то, чтобы в нем не было потерь информации (не было сужающих преобразований кроме исходного. Md5 = расчет*исходное_сужение. расчет - делает расчеты над 128-битными числами и в нем нет сужающих функций. Исходное сужение - разбивает исходный поток на последовательность 128-битных чисел.

zya369

Поправлюсь: mdX - возможно плохая hash-функция, потому что она возможно теряет информацию и раскладывается на md5*f, где f - сужающая функция

так правильнее, нет?
Всякий hash (и md5, в частности) исследуется на то, чтобы в нем не было потерь информации (не было сужающих преобразований кроме исходного.
извини, но я не могу понять смысл этого высказывания. вот, например,
mdZ(s) = md5(md5(s) + md5(s+1 - плохая? неравномерная?

salamander

хочу прикинуть сколько места займет таблица всех паролей для всех значений md5
Забьем еще один гвоздь в крышку гроба мертворожденной идеи:
http://en.wikipedia.org/wiki/Salt_%28cryptography%29

zya369

да что там забивать-то, давно уже md5 в здравом уме и по своей воле никто не использует для паролей - хоть с солью, хоть без
UPD точнее, не должен использовать :grin:

Dasar

mdZ(s) = md5(md5(s) + md5(s+1 - плохая? неравномерная?
Нет сужающих преобразований, и на основе этого критерия mdZ не получится зафейлить.
Придется копать глубже.
Afaik про md5 известно, что:
md5(md5(s - хорошая
md5(s0)+md5(s1) - хорошая, когда s0 и s1 - независимы. и где +:сложение по модулю 2^128
У MdZ есть сложение двух зависимых друг от друга md5. Это может приводить к "взаимопогашению". Для проверки этого необходимо раскрыть скобки в выражении md5(s)+md5(s+1) и его исследовать.

zya369

md5(s) + md5(s+1) лежит за пределами 128 бит, а результат в пределах, это разве не сужение?
UPD если нет, то дай строгое определение "сужения"
UPD2 (на удаленное сообщение) - сложение обычное, без взятия остатка или чего-то такого

Dasar

md5(s) + md5(s+1) лежит за пределами 128 бит, а результат в пределах, это разве не сужение?
В данном случае, критичны не всякие сужения, а сужения меньше 2^128. Сужения до 2^128 вполне устраивают, потому что суть md5 - это сузить большое число до 2^128

zya369

ты не сможешь доказать, что для произвольного T область значений mdXT меньше, чем у просто md5, так что она ни чем не хуже

Dasar

ты не сможешь доказать, что для произвольного T область значений mdXT меньше, чем у просто md5, так что она ни чем не хуже

Да, Для произвольных не получится. Для конкретных получится.
Например, для функции mdX0(s) = md5(s)*0, доказательство тривиальное.

zya369

вообще-то mdX0(s) = md5(s) if (md5(s) == 0) else 1
не вижу тут тривиальности, разве что у тебя есть готовый прообраз от нуля
ЗЫ ты, возможно, как-то не так понял, что такое mdXT (что там есть какое-то умножение а я не так понял * в твоем посте (я понял как композицию, а не как умножение)

Dasar

Прошу прощения за предыдущее сообщение. Запутался в обозначениях.
ты не сможешь доказать, что для произвольного T область значений mdXT меньше, чем у просто md5, так что она ни чем не хуже
Про mdXT доказывается, что она не лучше md5 в любом случае(при произвольном качестве md5 и хуже, чем md5 для случая, когда md5 имеет все 2^128 значений в результате
Итого, mdXT хуже, чем md5.

SergeRRRRRR

Однозначная функция (которой является md5-hash) не может множество с меньшей мощностью
почему?

Dasar

почему?
Возьмем исходное множество A, однозначную функцию f и пустое множество B.
Начнем перебирать элементы A, помещая во множество B результат f(Ai).
На каждой итерации множество B прирастает не больше, чем 1. На 1, если такого элемента еще не было и на 0, если был.
Итераций всего по кол-ву элементов в A.
Итого: мощность B <= мощности A

zya369

Про mdXT доказывается, что она не лучше md5 в любом случае(при произвольном качестве md5 и хуже, чем md5 для случая, когда md5 имеет все 2^128 значений в результате
Итого, mdXT хуже, чем md5.

Итого, mdXT хуже, чем md5 если md5 имеет все 2^128 значений в результате, что не доказано. Так что пока что доказано, что mdXT не лучше (а я этого и не утверждал).

SergeRRRRRR

ну это понятно, но я чот не понял про md5.
у md5 хэш же 128 битный при любой длине входного сообщения.

zya369

если ты будешь хешировать 3-хсимвольные числа, то у тебя получится 1000 значений, хоть они и будут 128-битными

SergeRRRRRR

понял, что имелось в виду.
Оставить комментарий
Имя или ник:
Комментарий: