Использование MD5 для генерации ключа шифрования из пароля? - PullRequest
5 голосов
/ 01 октября 2009

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

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

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

Ответы [ 3 ]

4 голосов
/ 01 октября 2009

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

1 голос
/ 01 октября 2009

Ну, так как ваш пост общий, позвольте мне сказать несколько общих вещей:

  1. MD5, SHA-0, SHA-1 - все битые хэши, и вы не должны использовать их для каких-либо криптографических целей, используйте SHA-2.

  2. Как правило, вы должны использовать хорошо известные и документированные подходы к извлечению ключей из паролей (вы не упоминаете, какой язык, скажите, пожалуйста, какой вы используете).

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

0 голосов
/ 20 марта 2010

Ответ на ваш новый вопрос: вы определенно должны использовать что-то вроде PBKDF2 для генерации ключа.

Я предполагаю, что у вас будет пароль (по крайней мере, 10 символов верхнего нижнего числа и пунктуация справа?), Который затем сгенерирует ключ AES-256. Ключ будет использоваться для шифрования / дешифрования файла (ов). Вы хотите использовать что-то вроде PBKDF2, чтобы уменьшить вероятность того, что кто-то, кто получит ваш файл, сможет определить ваш ключ / пароль с помощью атак методом перебора. Использование чего-то вроде PBKDF2 (и случайной соли!) Увеличивает стоимость взлома шифрования файла.

Что я действительно рекомендую, так это использовать это как игрушку, а , а не , чтобы защитить то, что вас действительно волнует. Если вы не эксперт по безопасности, вы будете делать ошибки, даже эксперты (и многие из них вместе) делают ошибки: http://www.sslshopper.com/article-ssl-and-tls-renegotiation-vulnerability-discovered.html

...