Перфектна еднопосочна хеш функция: има ли такава?

Трябва да извърша интензивно изчисление на базата на входна стойност, която е ASCII низ с максимум 100 знака. Тъй като изчислението е интензивно и доста дълго, бих искал да кеширам резултатите си за определена входна стойност.

Резултатът от моите интензивни изчисления щеше да може да се кешира перфектно (един и същ вход винаги дава един и същ изход), ако не беше една подробност: Не мога да използвам входната стойност като ключ за моя кеш, защото това е чувствителен низ и не ми е позволено да го съхранявам никъде за по-дълго, отколкото е строго необходимо.

Мислех да използвам криптографска хеш функция и да използвам хешираната стойност, но не мога да допусна сблъсъци; Мога да разширя кодомейна на хеш функцията, за да бъде по-голям, дори много по-голям (хеш от 10 000 символа би бил добър) от дължината на входната стойност, но имам нужда хеш функцията да бъде както перфектна, така и еднопосочен.

Намерих примери за двата вида хеш функция, а не за функция, която е и двете.

Някаква идея?


person Alan Franzoni    schedule 07.11.2013    source източник
comment
Освен ако не създавате система за насочване на ракети (и вероятно дори тогава), просто използвайте SHA1 и продължете с живота си. Да, може да има сблъсъци. Не, няма да произведеш такъв. Днес трябва да прекарате повече време в безпокойство дали ще бъдете ударен от метеорит, след което случайно ще предизвикате сблъсък в SHA1.   -  person meagar    schedule 07.11.2013
comment
Не изграждам система за насочване на ракети, но не бих избрал потенциално несъвършено решение, когато съществува по-добро; защо трябва да?   -  person Alan Franzoni    schedule 08.11.2013


Отговори (1)


Можете да използвате всеки асиметричен шифър (например RSA) без ключ за дешифриране. По този начин можете да шифровате съобщение и то ще бъде без сблъсък, тъй като теоретично може да бъде декриптирано обратно с ключ за декриптиране. Но на практика не може да бъде декриптиран, тъй като липсва ключ за декриптиране. Така че вашата трансформация ще бъде еднопосочна и без сблъсъци.

Но важно: Не използвайте модерни схеми на 2 нива, където криптиран случаен сесиен ключ. Този механизъм не гарантира липса на сблъсък. Вместо това разделете съобщението си на блокове с подходящ размер и шифровайте всеки блок в режим ECB.

person olegarch    schedule 07.11.2013
comment
Идеята ти е интересна, ще я преценя! - person Alan Franzoni; 08.11.2013
comment
Ще добавя една подсказка: когато използвате RSA, трябва да се прилага неслучайно подпълване. - person Alan Franzoni; 12.11.2013