Идеальная односторонняя хэш-функция: есть ли она?

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

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

Я думал об использовании криптографической хэш-функции и использовании хешированного значения, но я не могу допустить коллизий; Я могу расширить кодовый домен хеш-функции, чтобы он был больше, даже намного больше (хэш из 10000 символов был бы в порядке), чем длина входного значения, но мне нужно, чтобы хэш-функция была идеальной и >в одну сторону.

Я нашел примеры хеш-функций любого типа, а не функции, которая является и тем, и другим.

Любая идея?


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) без ключа дешифрования. Таким образом, вы можете зашифровать сообщение, и это будет без коллизий, так как теоретически его можно расшифровать обратно с помощью ключа дешифрования. Но практически не поддается расшифровке, так как ключ расшифровки отсутствует. Таким образом, ваше преобразование будет односторонним и без столкновений.

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

person olegarch    schedule 07.11.2013
comment
Ваша идея интересна, я оценю! - person Alan Franzoni; 08.11.2013
comment
Я добавлю одну подсказку: при использовании RSA необходимо принудительно применять неслучайное заполнение. - person Alan Franzoni; 12.11.2013