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

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

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

E(K)(PlainText) + E(k)(K) или E(K)(PlainText) + E(PBKDF2(k))(K)  

K - случайный 256 битный ключ;  

k - ключ пользователя; 

 Криптографы, кажется, делают так.  
  

Шифрование.  

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

Длинным ключом шифруются данные.   

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

Расшифровка.  

Сохраненный зашифрованный ключ расшифровывается введенным паролем.  

Тем что получилось расшифровываются данные.  

Сверяется контрольная сумма для проверки правильно распаковалось или нет (подошел пароль или нет). 

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

 На основе КОРОТКОГО пароля, если ты ничего не хранишь дополнительного в профиле пользователя, НЕВОЗМОЖНО сгенерировать стойкий серьезный ключ длинной больше чем на 1 сессию.