背景情報: マスターパスワード はステートレスパスワードマネージャーです。マスターパスワードとサイト名に応じて(決定論的に)ハッシュ関数を使用してパスワードを生成します(他のフィールドもありますが、この質問ではこれらは重要ではありません)。
したがって、マスターパスワードとサイト名(およびいくつかの小さな詳細)を覚えている場合は、コンピューター(バックアップが必要)またはクラウドのどこかに(暗号化されているかどうかにかかわらず)パスワードを保存せずに、サイトのアカウントのパスワードを生成できます。 (つまり、追加のサードパーティを信頼する必要があります)。
2つの部分でパスワードを生成します。
scrypt_key = scrypt(password + some salts + other details)
。sha256(scrypt_key + site name + other details)
。この最後の部分は、サイトのパスワードに使用されます(かなり印刷されたもので、バイナリではありません)。
詳細なバージョンについては、アルゴリズムのページ http://masterpasswordapp.com/algorithm.html を参照してください。
私の実際の質問は、次のとおりです。2番目の部分でscryptではなくshaを使用すると、どのような結果が生じますか?彼らは明らかにscryptの存在を知っているので、なぜ第2部にもそれを使用しなかったのですか?
2番目の部分でshaを使用する理由を私が考えることができる唯一の理由は、攻撃者が衝突を見つけた場合、見つかった衝突はおそらく彼が必要とするものではないということです(例:sha256("abcdef")
が誤ってsha256(scrypt_key + ...)
)。
SCrypt、BCrypt、またはPBKDF2のような遅いキー派生関数は、比較的短くて弱いパスワードを保護するため、またはそのようなパスワードからキーを生成するために必要です([〜#〜] p [〜#〜] assword -[〜#〜] b [〜#〜] ased -[〜#〜] k [〜#〜] ey -[〜#〜] d [〜#〜] erivation -[〜#〜] f [〜#〜] unction)。ユーザーはパスワードを覚えておく必要があるため、通常は強力ではありません。そのため、ユーザーパスワードをハッシュするためにSCryptが選択されました。
一方、高速なSHA-256でのハッシュは、非常に強力な「パスワード」に対しては絶対に安全です。 SCryptで生成されたキーは非常に強力なパスワード/キーであるため、SCryptを再度使用する理由はありません。
最終的には、ハッシュの計算にどれだけの時間を費やすことができるかを決定する必要があります。CPUパワーを1秒費やすことをいとわないとします。最初のSCryptハッシュにはできるだけ多くの時間を費やし、2番目のハッシュにはほんの数時間を費やすことをお勧めします。そうしないと、2番目のハッシュの時間が無駄になるため、SCryptハッシュを弱めることになります。
scryptは、計算能力とメモリを必要とするため、SHA2よりもはるかに多くの電力を必要とします。マスターキーははるかに遅いため、scryptを使用して保護されます。ただし、Webサイトのパスワードは強力な暗号鍵を使用してハッシュされますが、今回はSHA256が使用されています。暗号化キーはハッシュに使用され、ハッシュの強力な基盤を構築します。
Scryptキーを使用して再度scryptでWebサイトのパスワードをハッシュすると、時間がかかりすぎる可能性がありますが、ここでは不要です。
2番目の部分は、ハードウェアブルートフォース攻撃を困難にするためのものですが、同時に優れたパフォーマンスとセキュリティを得ることができます。