Как генерировать ключ из пароля?

Пишу программу для шифрования. Возник вопрос - как генерировать ключ из текстового пароля, введенного пользователем. Наиболее распространенным является PBKDF2. Хеши паролей хранить не планируется, программа будет просто брать введенный пароль, генерировать на его основе ключ и им шифровать/дешифровать. Собственно, вопрос: нужно ли использовать вообще PBKDF2 или подобное решение с солью (при том, что хеш не хранится, то и соль будет отсутствовать). Как вообще это делают нормальные криптографы?

Если я буду хранить вместе с файлом длинный случайный пароль в зашифрованном виде, то шифрование этого пароля должно производиться ключом который ввел пользователь или функцией типа PBKDF2 от ключа который ввел пользователь.
E(K)(PlainText) + E(k)(K) или E(K)(PlainText) + E(PBKDF2(k))(K)
K - случайный 256 битный ключ;
k - ключ пользователя;
  • Вопрос задан
  • 932 просмотра
Пригласить эксперта
Ответы на вопрос 3
alsopub
@alsopub
Криптографы, кажется, делают так.

Шифрование.
Генерируется длинный ключ шифрования под текущий алгоритм.
Длинным ключом шифруются данные.
Этот ключ шифруется паролем и сохраняется вместе с данными.

Расшифровка.
Сохраненный зашифрованный ключ расшифровывается введенным паролем.
Тем что получилось расшифровываются данные.
Сверяется контрольная сумма для проверки правильно распаковалось или нет (подошел пароль или нет).
Ответ написан
Комментировать
@Tikot Автор вопроса
А ключ пользователя (которым шифруется сгенерированный случайный ключ для шифрования файла), не должен ли он проходить через что-то подобное PBKDF2 для затруднения возможности вычисления ключа шифрования путем перебора ключа пользователя?
Ответ написан
@cijiw
На основе КОРОТКОГО пароля, если ты ничего не хранишь дополнительного в профиле пользователя, НЕВОЗМОЖНО сгенерировать стойкий серьезный ключ длинной больше чем на 1 сессию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы