Чи існують "рефлексивні" алгоритми хешування?


11

Чи існує клас хеш-алгоритмів, теоретичний чи практичний, такий, що алгоритм у класі може вважатися "рефлексивним" відповідно до визначення, наведеного нижче:

  • hash1 = algo1 ("вхідний текст 1")
  • hash1 = algo1 ("вхідний текст 1" + хеш1)

Оператор + може бути конкатенацією або будь-якою іншою заданою операцією для об'єднання виводу (хеш1) назад у вхід ("вхідний текст 1"), щоб алгоритм (algo1) дав точно такий же результат. тобто зіткнення на вході та вході + виході. Оператор + повинен поєднувати весь вхід і обидва входи, і algo може не відкидати частину вводу.

Алгоритм повинен створювати високу ентропію на виході. Криптографічно може бути важко повернути висновок на один або обидва можливі входи.

Я не математик, але хороша відповідь може містити докази того, чому такий клас алгоритмів не може існувати. Однак це не абстрактне питання. Мені щиро цікаво використовувати такий алгоритм у своїй системі, якщо такий існує.

Це дублікат запитання, яке вперше було розміщено на веб- сайті /programming/4823680/reflexive-hash



2
Чи зацікавлена ​​у вас власність для всього вхідного тексту або для одного вхідного тексту? Якщо ви хочете, щоб він утримувався для всього вхідного тексту, то побудова зіткнень є тривіальною за дизайном, тому я не думаю, що це можна вважати хорошою хеш-функцією.
Пітер Тейлор

Хтось хоче хеш-файлів, які містять власні хеші! ;)
Рафаель

@ Peter Taylor - я шукаю функцію, яка працює як описано для довільного введення тексту. Кожен різний вхід створює хеш, який, як правило, має високу взаємну ентропію щодо всіх інших можливих даних. Так само, як хороша незворотна хеш-функція працює. Однак хеш-функція, яку я шукаю, не повинна мати властивість незворотності. Висока ентропія достатня.

@Raphael - Так, це стислий спосіб його викласти.

Відповіді:


9

Я даю тривіальну конструкцію, яка задовольняє вимогу. Я пропоную це лише відповісти на існування "рефлексивної" хеш-функції.

Нехай - будь-яка хеш-функція, що створює високу ентропію у висновку. Припустимо, що хеширує двійкові рядки довільної довжини до бітних двійкових рядків, де - будь-яке додатне ціле число. Нехай позначає оператор конкатенації , і нехайпозначають довжину двійкового рядка .G k k + | х | хGGkk+|x|x

Визначте хеш-функцію на вході наступним чином:xHx

  1. Якщо , тоді .H ( x ) def = G ( x )|x|kH(x)=defG(x)
  2. Якщо , нехай і є -бітним префіксом і -бітним суфіксом відповідно. Тобто і . Якщо (де обчислюється рекурсивно ), то ; в іншому випадку .L R ( | x | - k ) k x x = L + R | R | = k R = H ( L ) H ( L ) H ( x ) def = R H ( x ) def = G ( x )|x|>kLR(|x|k)kxx=L+R|R|=kR=H(L)H(L)H(x)=defRH(x)=defG(x)

Як я вже казав, це тривіальна конструкція. Його можна застосувати до будь-якої хеш-функції, практичної (наприклад, MD5, SHA-1, ...) або теоретичної.


H|R|=k

@Raphael: Дякую за вказівку на друк (виправлено). H має ту саму ентропію, що і G, за винятком випадків, коли R = G (L). За вимогою, в цій умові H (x) повинен дорівнювати R. Ми тут не можемо нічого зробити, щоб збільшити ентропію; оскільки вимога "світловідбиття" заважає нам змінювати вихід.
М. С. Дусті

@Sadeq: Чи потрібно обчислювати хеш-функцію рекурсивно? Я алгоритм будь-яким чином виграє від цього факту?
Яссер Собхдел

H(M+H(M)+H(M)++H(M))H(M)

Садек, дякую. Я вважаю, що це може відповісти на моє запитання, як було задано. Ви написали відповідь у відповідному застереженні. З прагматичної точки зору, мені подобається те, що це накладка для будь-якого відомого алгоритму, такого як SHA-1. Якщо я правильно зрозумів, ваш алгоритм буде продовжувати обчислювати хеши рекурсивно, поки він не потрапить на потрібне зіткнення, а потім він зупиниться. У такому випадку, можливо, ми можемо дублювати це наївне рішення. Моє занепокоєння полягає в тому, що, мабуть, є неявне припущення, що вбудований алгоритм (скажіть SHA-1) врешті-решт потрапить на потрібний хеш зіткнення, враховуючи
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.