0

データベースに暗号化された形式で GPG キーを保存する必要がある Web アプリケーションを設計中です。

ユーザーのパスワードをデータベースの bCrypt ハッシュに保存することを計画しています。私ができるようにしたいのは、そのbCryptを使用してユーザーを認証し、保存されたbCryptハッシュとパスワードの別のハッシュの組み合わせを使用してGPGキーを暗号化および復号化することです.

私の質問は、パスワードのセキュリティを低下させることなくこれを行うことができるかどうかです? パスワードとソルトを秘密鍵として使用する静的文字列の HMAC-SHA256 のようなものを使用できるかもしれないと考えていました。

私が考えていなかったこれを行うためのより良い方法はありますか?

ありがとう

4

2 に答える 2

2

PBKDF2 ( PKCS #5から) の使用を検討してください。パスフレーズ、ソルト、および反復回数を入力として受け取ります。反復回数は、パスフレーズを繰り返しハッシュする回数を指定します。これに大きな数 (1000 から 10000 が一般的) を使用すると、パスワード推測攻撃が難しくなります。ソルトにより、同じパスフレーズが異なる用途で使用され、異なる鍵が作成されます。

PBKDF2 の設計上、別のソルトに対して同じパスフレーズによって生成されたハッシュを知っていたとしても、1 つのソルトで生成されたハッシュを推測することは非常に困難です。

PBKDF2 はすでに実装されており、ほとんどの重要な暗号化ライブラリですぐに使用できます。たとえばPKCS5_PBKDF2_HMAC_SHA1、OpenSSL (ヘッダーevp.h) のように使用できます。

于 2010-05-13T23:07:40.377 に答える
0

常にGPGキーを復号化する場合は、キーで暗号化された既知の値を保持し、それを使用してユーザーパスワードを確認できます(つまり、正しいユーザーパスワードが入力されている場合、復号化されたGPGキーは保存されたデータを復号化します既知の値に)。

標準の鍵導出アルゴリズムを使用して、パスワードから鍵を生成します。暗号化ライブラリにはそれが含まれている必要があります。

于 2010-04-21T20:16:08.567 に答える