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