Использование RSA для хеширования - PullRequest
6 голосов
/ 27 сентября 2011

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

  1. Генерирование открытых / закрытых ключей RSA.
  2. Сбросить закрытый ключ, никогда не хранить его вообще.
  3. Начните с хэша с длиной размера блока для шифрования RSA.
  4. Зашифруйте сообщение, используя открытый ключ, по одному блоку за раз.
  5. Для каждого зашифрованного блокасообщение, накапливайте его в хеш, используя указанный алгоритм (возможно, комбинация +, xor и т. д.)

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

Это возможно, безопасно и практично?

Спасибо за любые комментарии.

Ответы [ 4 ]

5 голосов
/ 27 сентября 2011

RSA-шифрование не является детерминированным: если вы будете следовать RSA-стандарту , вы увидите, что вводятся некоторые случайные байты. Следовательно, если вы дважды зашифруете с помощью RSA одно и то же сообщение, скорее всего, вы не получите дважды одинаковый вывод.

Кроме того, ваш «неопределенный шаг 5», вероятно, будет слабым. Например, если вы определяете способ хеширования блока, а затем просто XOR блоков вместе, тогда A || B и B || A (для значений размера блока A и B ) будут хэшироваться до одинакового значения; Это столкновение Бонанза.

С академической точки зрения было опробовано построение хеш-функций из теоретико-числовых структур (то есть не необработанного RSA, а с использованием такого же математического элемента); см. эту презентацию от Ларса Кнудсена для некоторых деталей. Точно так же хэш-функция ECOH была представлена ​​для соревнования SHA-3 с использованием эллиптических кривых в ее ядре (но она была «сломана»). Основная надежда состоит в том, что безопасность хеш-функции может каким-то образом быть связана с базовой сложной теоретикой чисел, обеспечивая тем самым доказуемую безопасность . Однако на практике такие хэш-функции являются либо медленными, либо слабыми, либо обеими.

3 голосов
/ 27 сентября 2011

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

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

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

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

Еще одна вещь: если вы на самом деле хотите, чтобы было медленным, то вы определенно НЕ ХОТИТЕ хэш-функцию и делаете это совершенно неправильно. Если, как я предполагаю, вам нужна очень и очень надежная хеш-функция, то, как я уже сказал, существует множество вариантов, которые лучше подходят для вашего примера, но при этом являются такими же или даже более криптографически безопасными.

Кстати, я не совсем уверен, что в вашем алгоритме микширования нет недостатков. Несмотря на то, что выход каждого блока RSA должен быть равномерным с высоким уровнем лавинности и т. Д., Т. Д. И т. П., Я по-прежнему обеспокоен тем, что это может создать проблему для выбранного открытого текста или сравнительного анализа похожих сообщений.

0 голосов
/ 27 сентября 2011

Как правило, лучше всего использовать алгоритм, который является общедоступным и прошел процесс проверки.Даже при том, что могут быть известные слабости с такими алгоритмами, это, вероятно, лучше, чем неизвестные слабости в доморощенном алгоритме.Обратите внимание, что я не говорю, что предложенный алгоритм имеет недостатки;просто, даже если здесь дано большое количество ответов о том, что это кажется хорошим, это не гарантирует, что это не так.Конечно, то же самое можно сказать и об алгоритмах, таких как MD5, SHA и т. Д. Но, по крайней мере, с их помощью большое количество людей подвергло их тщательному анализу.

Помимо предыдущих «шаблонных» предупреждений против разработки собственных криптографических функций, кажется, что предложенное решение может быть несколько дорогим с точки зрения времени обработки.Шифрование RSA в большом документе может быть недопустимым.

0 голосов
/ 27 сентября 2011

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

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

Итак, вкратце: да, это кажется возможным и безопасным ... Но если действительно веская причина, я бы использовал стандартный HMAC, если вы хотите хеш-код с ключом.

...