LINUX.ORG.RU

Устойчивость хэшей к коллизиям

 ,


0

1

Задача: минимизировать вероятность генерации (в неопределённом будущем) поддельного контента, подходящего под некий хэш.

Как все наверно знают, сейчас существует довольно много разных хэш-функций, к которым всё ещё не найдено ни одной коллизии. И как все наверно знают, строгого доказательства сложности нхождения этих коллизий ни для одной из хэш-функций нет и не будет.

В связи с этим возник вопрос, я даже не уверен что он действительно относится к security а не к толксам (если нао перенесите). Допустим, на хэш нам выделено 512 бит, и мы решили выбрать sha512. Можно предположить, что когда-нить к нему подберут алгоритм подбора подходящих исходных данных, придумав способ непротиворечиво разврачивать данные из хеша назад по цепочке (разумеется, подходящих разных данных очень много, но допустим даже нашли способ развернуть один единственный вариант - этого достаточно). И другой вариант: допустим, 256 бит мы займём sha256, а оставшиеся - ещё каким-нить 256-битным хэшом, построенным на немного других математических принципах. Кажется (именно кажется, а как на самом деле я не претендую знать), что этот вариант выглядит немного надёжнее: даже найдя алгоритм разворота sha256, придётся потом ещё искать такой же алгоритм для второго хэша (а учитывая что он математически другой - искать придётся с нуля заново), а так же как-то обеспечить чтобы оба агоритма сгенерили одинаковые данные.

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

-------- Уточнения:

1) Я понимаю, что конструкцию из второго варианта тоже можно назвать одним хэшом, и вероятно даже такие хэши свществуют и используются, но речь именно про один математически единый хэш против двух разных алгоритмов меньшей битности.

2) Советы исключительно утилитарного характера «используй то, оно хорошее» не нужны, интересует именно сравнение.

3) Очевидно, что если кто-то научится делать тупой брутфорс 256 и выше битных хэшей, то все рассуждения выше будут полностью бесполезны и хэш взломают независимо от его алгоритма, так что давайте именно про алгоритмический взлом а не про брутфорс.

★★★★★

Последнее исправление: firkax (всего исправлений: 1)

возникновение колизий варирует от соотношения всех возможных вариантов хэша к множеству всех возможно данных. Проблема в том что данные подходящие под колизию не могут быть произвольными. если множество твоих данных меньше множества хэшей то колизий не будет.

antech
()

Первый вариант великолепен. Это стандарт. Проверен, имеет известные свойства: 256-битную устойчивость к коллизиям. – Недостижимый уровень.

SHA3-512 в том числе имеет гигантский запас прочности, дохрена раундов в стандарте.

А втрой вариант - велосипед какой-то. Не используйте это. Don’t roll your own crypto.

hakavlad ★★★
()
Ответ на: комментарий от antech

Это, конечно, невероятно полезная информация, но вопрос был не о ней. Варианты «научились брутфорсить длинные хэши» не рассматриваем т.к. итог там очевиден и печален при любом раскладе.

firkax ★★★★★
() автор топика
Ответ на: комментарий от hakavlad

256-битную устойчивость к коллизиям.

Так, походу надо примечание про брутфорс всё-таки дописать в тему.

дохрена раундов в стандарте.

Это всё очень хорошо, но см. второе уточнение.

велосипед какой-то

А это бесполезный лозунг вместо аргумента.

firkax ★★★★★
() автор топика

Я что-то туплю, а все как будто понимают. Объясните пожалуйста. Как будто имея два хэша, развернув данные обратно, можно быть гораздо более уверенным что полученные данные – именно те что были исходными. Разворачиваешь хэш, берешь от данных хэш по второму алгоритму, смотришь что получилось. Не сошлось – ищешь следующую коллизию.

sovety_ot_sonika
()
Ответ на: комментарий от firkax

Варианты «научились брутфорсить длинные хэши» не рассматриваем т.к. итог там очевиден и печален при любом раскладе.

как научились? когда научились? кто научился?

топик стартер научился брутфорсить? ну давайте подарим ему аттестат об окончании 5 класса! чтобы брутфосить много ума то ненадо, надо много времени и электричества. Алгоритмы устроены так, чтобы подобрать доконца своей жизни ты неуспел.

но вопрос был не о ней

а о чем вопрос?

Задача: минимизировать вероятность генерации (в неопределённом будущем) поддельного контента, подходящего под некий хэш.

это бредовая задача. так как невозможно сгенерировать произвольный контент под понравившийся тебе хэш. найти коллизию можно но «контент» соотвествующий ей будет фиксированый. у другого контента будет другой хэш. Это все равно что пытатся всех убедить что 2+2 = миллион. Перефразируя задачу, автор желает «минимизировать вероятность того что кому то удастся убедить всех что 2+2 = столько сколько ему захочется».

Можно предположить, что когда-нить к нему подберут алгоритм подбора подходящих исходных данных, придумав способ непротиворечиво разврачивать данные из хеша назад по цепочке

ты таблетки забыл принять? есть необратимые математические операции. например: 700*876. в результате ты получаешь 613200. 613200 это твой хэш. А теперь попробуй зная хэш и то что он молучен мумножением чисел вычислить исходные числа(которые были перемножены)? чуйствуешь? взад тебе это непосчитать. и никакого «чуда способа» посчитать взад такое нет небыло и небудет, по очевидным причинам. все что можно это перебирать до смерти.

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

antech
()
Последнее исправление: antech (всего исправлений: 1)
Ответ на: комментарий от antech

как научились? когда научились? кто научился?

Тему прочитай-то может?

это бредовая задача. так как невозможно сгенерировать произвольный контент под понравившийся тебе хэш.

Такого и не предлагалось. Посмотри зачем ищут коллизии.

у другого контента будет другой хэш

Может быть другой а может быть и нет.

есть необратимые математические операции. например: 700*876. в результате ты получаешь 613200. 613200 это твой хэш. А теперь попробуй зная хэш и то что он молучен мумножением чисел вычислить исходные числа(которые были перемножены)?

Элементарно: 6132*100. Поэтому умножение - плохой хэш, вместо настоящего контента 700,876 можно подсунуть поддельный 6132,100 почти не напрягаясь. Для современных криптографических хешей на данный момент таких алгоритмов неизвестно, но и доказательств того, что этих алгоритмов не существует - тоже нет (т.е. может оказаться что всего лишь плохо искали).

Тема как раз о том, как минимизировать ущерб в случае если какой-то (мы заранее разумеется не знаем какой) алгоритм всё-таки найдётся.

firkax ★★★★★
() автор топика

И другой вариант: допустим, 256 бит мы займём sha256, а оставшиеся - ещё каким-нить 256-битным хэшом, построенным на немного других математических принципах. Кажется (именно кажется, а как на самом деле я не претендую знать), что этот вариант выглядит немного надёжнее: даже найдя алгоритм разворота sha256, придётся потом ещё искать такой же алгоритм для второго хэша (а учитывая что он математически другой - искать придётся с нуля заново), а так же как-то обеспечить чтобы оба агоритма сгенерили одинаковые данные.

аааааа. да ты нас тролишь! для «сокрытия данных» используется ШИФРОВАНИЕ, а не хэширование. используй какой нить aes 128 и будет тебе счастье.

antech
()
Ответ на: комментарий от sovety_ot_sonika

Предположение состоит в том, что для условного sha256 возможно и можно развернуть данные (не исходные, а подходящие под хэш), но вот сделать так, чтобы они при этом ещё и подошли под второй хэш сложнее (его, может быть, тоже можно развернуть, но в другие данные).

А вот это

Не сошлось – ищешь следующую коллизию.

уже брутфорс, он невообразимо долгий и можно считать невозможный. Но если взломают именно брутфорс то всё станет бесполезно и можно дальше не обсуждать.

firkax ★★★★★
() автор топика
Ответ на: комментарий от antech

Никто не писал про сокрытие данных. Повторю, почитай где-нить как можно эксплуатировать коллизии, а пока ты не в курсе, дальнейшее твоё участие точно бесполезно.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Ну ок, допустим брутфорс вычёркиваем. Всё равно есть некоторый, возможно даже неплохой шанс, что найденные данные будут исходными. И ты будешь в этом уверен на 100% (ну может почти). А в случае когда хэш один - уверенности не будет.

sovety_ot_sonika
()
Ответ на: комментарий от firkax

а ты уже отэксплуатировал колизию хэша? ) или ты только фантазируешь. давай реальный пример с реальным профитом.

antech
()
Ответ на: комментарий от sovety_ot_sonika

угу. и че дальше?

хэш этого сообщения 3795d7cff7cb64d9ddc9595615c5421c md5

ну давай, сделай что нибудь зная и хэш и данные из которых он получен. удиви нас.

antech
()
Ответ на: комментарий от sovety_ot_sonika

ладно, смотри, пароли. они передаются действительно ввиде хэша но сообщение зашифровано aes. т.е в этом случае искать колизию то как бы и не надо, если знаешь хэш.

antech
()
Ответ на: комментарий от antech

Мне кажется ты про другое говоришь. Если я правильно понял, у ТСа что-то такое: допустим некто утянул базу с ЛОРа. Допустим хэши паролей в ней не посолены или соль известна. И вот в каком случае ему проще «развернуть» хэш для получения подходящего пароля для входа на сайт:

  • когда хэш один
  • когда хэшей два, но меньше длиной?

Кажется второй случай действительно усложняет ситуацию, если не стоит задачи выяснить какой именно был пароль. Если такая задача стоит, то во втором случае на это больше шансов без брутфорса – типа получится добыть больше паролей, которые потом могут подойти для входа на опеннет, где используется другой алгоритм хэширования.

sovety_ot_sonika
()
Ответ на: комментарий от sovety_ot_sonika

Про практику речи не идёт, разговор о «сферической корове в вакууме», если я всё правильно понимаю.

sovety_ot_sonika
()

Советы исключительно утилитарного характера «используй то, оно хорошее» не нужны, интересует именно сравнение.

Можно посчитать расстояние Левенштейна между названиями хеш функций. Это мощный нажористый кудяблик, показывающий какие хеш функции не стоит совмещать.

ratvier ★★
()
Ответ на: комментарий от sovety_ot_sonika

ага… как взломать лор имея рут от лора.

antech
()
Ответ на: комментарий от sovety_ot_sonika

если тебе нужны были пароли от лора нафига ты тащил базу? надо было в форму логина добавить функцию которая будет тебе слать эти пароли плаинтекстом.

antech
()
Ответ на: комментарий от sovety_ot_sonika

Исходные данный искать не надо, они и так известны. Надо чтобы неправильные не получилось найти.

firkax ★★★★★
() автор топика
Ответ на: комментарий от sovety_ot_sonika

Ладно, перечитал ОП и вроде понял. Ну тогда ответ на вопрос наверное «хз», как повезёт

sovety_ot_sonika
()

Использование 512 бит в едином алгоритме считается более устойчивым чем два по 256 бит. Потому что подбирать коллизию для 256 проще чем для 512. Если хочется использовать свою секретную хеш-функцию, то хешируй дополнительно уже полученный хеш-512.

Psilocybe ★★★★★
()

Я за вариант SHA-512. Никогда не слышал, чтобы хеш на 256 составляли из двух разных хешей по 128 или четырёх по 64, например. Не думаю, что тут есть криптографы, которые тебе обоснованно распишут, но чисто из аргумета выше я бы взял один хеш. Раз для меньших размеров так не делают, значит и для больших размеров смысла нет.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от Psilocybe

Потому что подбирать коллизию для 256 проще чем для 512

Тебе надо подобрать коллизию для двух хешей, причём из одних входных данных одновременно. Это не проще, чем для 512, в плане перебора это ровно то же самое.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

Нет. 512 это взаимозависимые биты. Деля на два независимых по 256 мы упрощаем все в 2^555 раз.

Иначе говоря пространство переборы в 2^512 мы делим на 2 пространства по 2^256 , что даёт 2^256+2^256=2^257 . Что, как мы видим значительно меньше, чем 2^512.

Psilocybe ★★★★★
()
Последнее исправление: Psilocybe (всего исправлений: 3)
Ответ на: комментарий от Psilocybe

Глупости. Пока хеши разные, ничего ты не упрощаешь. Ты тратишь 2^256 попыток подобрать первый хеш, и на каждый подобранный первый хеш ты получаешь какой-то второй хеш, который с вероятностью 2^-256 совпадёт с нужным.

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

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 3)
Ответ на: комментарий от vbr

Ты тратишь 2^256 попыток подобрать первый хеш, и на каждый подобранный первый хеш ты получаешь какой-то второй хеш, который с вероятностью 2^-256 совпадёт с нужным.

Это если речь про брутфорс, с ним неинтересно. Речь про гипотетический способ найти коллизию либо за умеренное количество попыток (пусть 2^40 вместо 2^256) либо вообще алгоритмически за один проход, воспользовавшись какой-то новооткрытой математикой. Каков шанс, что взлом хеша/хешей поможет оптимизировать не только эту первую часть (найти хоть что-то для одного хеша), но и вторую - ту, где найденное что-то подходит только в 2^-bits случаев?

firkax ★★★★★
() автор топика

Кажется (именно кажется, а как на самом деле я не претендую знать), что этот вариант выглядит немного надёжнее

Все правильно, так и есть. В криптографии это называют гибридными алгоритмами и прямо сейчас активно внедряют в TLS для ЭЦП и алгоритмов обмена ключей.

Бездарей с «Don’t roll your own crypto» не слушай. Как я вижу, тут уже нарисовался один такой.

Другое дело, что разработка любого криптоалгоритма должна начинаться с ответа на вопрос «от чего защищаемся». Современные хэши считаются очень надёжными алгоритмами, которые никому не приходит в голову как-то дополнительно защищать.

Lrrr ★★★★★
()
Ответ на: комментарий от firkax

воспользовавшись какой-то новооткрытой математикой

2+2 = столько сколько хочу.

яжеговорил…..

antech
()
Ответ на: комментарий от Psilocybe

Нет. 512 это взаимозависимые биты. Деля на два независимых по 256 мы упрощаем все в 2^555 раз.

ща я вам предложу отпадный вариант )

берешь исходные данные, делишь их на блоки равные размеру хэша, и хэшируешь эти блоки всеми возможными хэшфункциями по порядку. И так в цикле пока данные не кончатся.

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

продолжаешь до тех пор пока размер полученых данных не уменьшится до 512 бит.

P.S через полгода, ожидайте что на госуслугах объявился новый чуда алгоритм. я то думал откуда это все берется. а оказывается… )))) мы же прикалываемся просто. ну…

antech
()
Последнее исправление: antech (всего исправлений: 1)
Ответ на: комментарий от ratvier

Это мощный нажористый кудяблик

Учитывая тот момент, что у этого термина есть и другое значение, совсем не про выпечку, он прям в тему :)

t3n3t
()
Ответ на: комментарий от antech

для «сокрытия данных» используется ШИФРОВАНИЕ, а не хэширование

У меня где-то с год назад сторонняя команда запросила пароли пользователей из БД. На ответ что мол, мы не храним подобное в плейнтексте и у нас используется bcrypt, ответили что без проблем расшифруют. По сей день от них ничего не слышно. Странно. Походу, пацаны на нобелевку идут, РАСШИФРОВЫВАЮТ результаты хеш-функций.

t3n3t
()
Последнее исправление: t3n3t (всего исправлений: 1)
Ответ на: комментарий от t3n3t

просто с другой стороны был firkax который представился тебе командой разработки внешней.

antech
()

Вероятность что отпечатки совпадут у случайных файлов зависит только от размера отпечатка, но не алгоритма.
Но от алгоритма зависит быстро ли подобрать такой файл с таким же отпечатком.
SHA алгоритм - знаменит что имея файл с одним отпечатком, можно получить коллизию-совпадение дополнив этот файл свои данные.

s-warus ★★★★
()
Ответ на: комментарий от dmitry237

Бери 2048

Да, хорошо убивает свободное время.

Может быть, но время на подборку коллизий всё равно возрастает гораздо существенней.

unDEFER ★★★★★
()
Ответ на: комментарий от unDEFER

Я про казуальную смартфонную игрушку.

Если честно, я не понимаю про какие хэши идет речь.

$str = "Hello ЛОР!"
$str | ConvertTo-SecureString -Force -Asplaintext | ConvertFrom-SecureString

# 480065006c006c006f0020001b041e0420042100
$hash = "480065006c006c006f0020001b041e0420042100"
ConvertTo-SecureString $hash | ConvertFrom-SecureString -Asplaintext

# Hello ЛОР!
dmitry237 ★★★★★
()
Ответ на: комментарий от dmitry237

А, про игрушку! Я и забыл что такая есть :-))

Хеши - это те, которые обратно уже не конвертнёшь, используются для проверки целостности данных.

Ваш пример - это шифрование.

unDEFER ★★★★★
()
Ответ на: комментарий от unDEFER

Хеши - это те, которые обратно уже не конвертнёшь, используются для проверки целостности данных.

Понял, это различные *sum. Правда бывает, что даже файл содержащий хэши пакетов не соответствует собственному хэшу

dmitry237 ★★★★★
()
Ответ на: комментарий от dmitry237

Ну это уже ошибка в конкретной реализации.

unDEFER ★★★★★
()
Ответ на: комментарий от antech

Почему ты так настойчиво транслируешь в мир свои галлюцинации?

Тебе уже продемонстрировали на пальцах использование коллизий. Сходи книжку почитай.

frob ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.