web-dev-qa-db-ja.com

キー導出のためのキーパスの方法は安全ですか?

キー導出関数を使用して、最終的なキーを計算するために大量の計算リソースまたはメモリリソース、あるいはその両方を必要とすることにより、パスワードに対するブルートフォース攻撃を遅らせる方法に精通しています。

私が知っている一般的なKDFはbcrypt、PBKDF2、およびscryptですが、KeePassは私が慣れていないまったく異なるアルゴリズムを使用しているようです。 KeePassのヘルプセンターによると

ブロック暗号に使用される最終的な256ビットの鍵を生成するために、KeePassは最初にSHA-256を使用してユーザーのパスワードをハッシュし、結果をAdvanced Encryption Standard(AES)アルゴリズムを使用してN回暗号化します(以降、鍵変換ラウンドと呼ばれます)。 、SHA-256を使用して再度ハッシュします。 AESの場合、ランダムな256ビットキーが使用され、データベースファイルに格納されます。

[...]

デフォルトでは、KeePassはNを6000暗号化ラウンドに設定します(完全な暗号化を意味します。NはAESの内部暗号化ラウンドとは関係ありません)。この数値は、ポータブルデバイスのバージョンとの互換性を提供するために選択されています(PocketPCプロセッサは低速であるため、キーの計算に時間がかかります)。

このAESのKDFとしての使用は安全ですか?このアプローチには深刻な欠陥がありますか? 6000回の反復は、決定的な攻撃者を大幅に減速させるのに十分ですか?

「PocketPCプロセッサ」についてのその行は少し心配です。それは、使用するKDFに関するこの決定が、かなり前に、より強力なプロセッサを備えた電話が存在する前に(そして、拡張すると、デスクトップのときに)行われたことを意味します。プロセッサーはそれほど強力ではありませんでした)。

13
Ajedi32

KeeCrackerという名前のKeePassマスターキークラッキングソフトウェアを作成した Malik Mesellem からの2014年のツイートに基づいて、彼はIntel i7 CPUで彼のツールを使用して1秒あたり1,000パスワードを推測していました。

Tom-Leekは、2011年のKeePassキーストレージについて この同様の質問 への回答として、クアッドコアCPUで1秒あたり32,000のパスワード推測の可能性について説明しています。これは、KeeCrackerの図でわかるように、これらのAES操作を管理するクラッキングソフトウェアの非効率性のためにさらに低下する最良のケースの推定であった可能性があります。

パスワードクラッキングに関する限り、どちらの見積もりもかなり遅く、MD5などのアルゴリズムの選択が不適切な単一のGPUで毎秒数億または数十億のハッシュが定期的に見られます。 KeePassの実装は、bcryptまたはscryptの「一般的な」現代の実装よりも少し高速ですが、まったく異なるクラスにあると考えるほどではありません。

アルゴリズムや実装の選択に対する批判は知りませんし、自分で評価する資格もありませんが、悪い選択ではないと思われます。 「将来的に保証された」パスワードアーカイブが必要な場合は、6000ラウンドで十分かどうか疑問に思うのは当然だと思いますが、これが必ずしも今日では無責任な数であるとは思えません。

したがって、KeePassユーザーの最大の懸念は、より単純なクラッキングの試みに耐えることができるマスターパスフレーズ(たとえば、パスワードではない)を選択することです。既知のフレーズを使用したり、短くしすぎたり、あなたの個人的な知識に基づいて予測可能にしたりしないでください。これらのことを適切に回避すると、パスフレーズが辞書、ハイブリッドによって発見される可能性が低くなります。 、またはブルートフォースクラッキング攻撃。

11
PwdRsch

あなたの最後の質問に関して: 6000ラウンドは安全でない設定です なので、PocketPCプロセッサとの互換性について心配するのは正しいことです。この値は5000000程度に設定する必要があります。欠点は、パスワードアーカイブの暗号化/復号化に時間がかかるため、適切な遅延を引き起こす最大値を見つけることです。

5
dr_