Использование пароля для генерации двух разных хешей без снижения безопасности пароля - PullRequest
0 голосов
/ 21 апреля 2010

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

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

Мой вопрос заключается в том, могу ли я сделать это без снижения безопасности пароля? Я думал, что смогу использовать что-то вроде статической строки HMAC-SHA256, используя в качестве секретного ключа пароль и соль.

Есть ли лучший способ сделать это, о котором я не подумал?

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 мая 2010

Рассмотрите возможность использования PBKDF2 (из PKCS # 5 ). Он принимает в качестве входных данных парольную фразу, соль и счетчик итераций. Счетчик итераций указывает, сколько раз необходимо повторно хэшировать фразу-пароль; использование большого числа для этого (обычно от 1000 до 10000) помогает усложнить атаки по подбору пароля. Соль вызывает разные варианты использования одной и той же парольной фразы для создания разных ключей.

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

PBKDF2 уже реализован и доступен "из коробки" в большинстве любых криптографических библиотек. Например, он доступен как PKCS5_PBKDF2_HMAC_SHA1 в OpenSSL (заголовок evp.h).

0 голосов
/ 22 апреля 2010

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

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

...