ハッシュ アルゴリズム コンテストの勝者SHA-3
が選ばれました。勝者のアルゴリズムはKeccakです。
私はフグを使っていてとても気に入っていますが、ケッカの方がいいと言われています。Web サイトにユーザーのパスワードを保存するために使用する価値はありますか?
はいの場合、Web プログラミングで使用される PHP、Python、Ruby、またはその他の言語用の Keccak の実装はありますか?
この質問が他の人にも役立つことを願っています。ありがとう!
簡潔な答え:
いいえ、おそらく決してありません。パスワードハッシュには、単純な SHA- 1/2/3アルゴリズムよりもBCrypt と PBKDF2-HMAC- xxxが適しています。また、実際に SHA-1/2 が実行可能なプリイメージ攻撃を公開するまでは、SHA-3 は実際には最悪の選択です。特に、その速度とキャッシュ フットプリントが小さいためです。
より長い答え:
さまざまなパスワード ハッシュ アルゴリズムの相対的なセキュリティの主な要因は、専用の攻撃者がパスワードをどれだけ速くハッシュできるかということです。つまり、ソフトウェアとハードウェアの組み合わせ (パスワードハッシュの明確な目的のために購入) と、サーバー上のソフトウェア (ソフトウェアの市販の C 実装、アプリケーションのニーズに合わせて購入したハードウェア) との比較でどれだけ高速かということです。
SHA-3 の主な基準の 1 つは、少量のオンダイ キャッシュやレジスタなどに代表される組み込みアーキテクチャで効率的に実行する必要があるというものでした。しかし、これは最新の GPU についても説明しています。レジスタ/アキュムレータが少なく、オンダイが小さいキャッシュ; しかし逆に言えば、彼らのシリコンは、大量のデータに対して同じタスクを並行して実行するように最適化されています。これは、攻撃者のブルート フォースの試みに最適です。シリコンに 1 ドルが費やされるたびに、攻撃者は、より優れた CPU を購入するよりも、別の GPU を購入することで、より多くの SHA3 ハッシュ/秒を取得します。
この特定の理由から、BCrypt は、現在ほとんどの GPU のキャッシュよりも大きいメモリ内テーブルに対して、より多くの読み取り/書き込みを行うように設計されています。つまり、現在の GPU ベースの BCrypt 実装は、対応する CPU の速度に追いついていません。したがって、BCrypt を選択するだけで、攻撃者があなたと同じ CPU を購入することを強制することで、攻撃者が 1 ドルを費やすたびにアドバンテージを失うことになります。
これが、生の速度がパスワード ハッシュの敵である理由です。最速のソフトウェア/ハードウェアの組み合わせが、使用するコモディティ ソフトウェア/ハードウェアよりも攻撃者にとって 1 ドルあたりの利益が最も少ないアルゴリズムを選択する必要があります。現在、それは BCrypt、または PBKDF2-HMAC- xxxのわずかに少ない選択肢です。GPU はおそらく SHA3 の処理能力が向上するだけなので、それが正しい選択になるとは思えません。私は SHA3 の数値を持っていませんが、「どちらがより安全か」というのは漠然とした相対的な用語ではありません。上記のルールを使用して正確に数値化することができます。
これは古い質問ですが、誰もが暗号用語に再び混乱しているようです。いくつかのことを明らかにしましょう。
私は衒学的なだけではありません。Keccak は bcrypt と競合しておらず、SHA-256 と競合しているため、これらの違いは重要です。
PHP にパスワードを安全に保存する簡単な方法を次に示します。
password_hash()
_password_verify()
password_needs_rehash()
それでおしまい。これらの関数が何をするかを気にする必要さえありません。それらを使用する必要があるだけです (代わりに libsodium のようなものを使用している場合を除きます)。
現在、このインターフェースは bcrypt を提供しています。注意すべきいくつかの弾丸を除いて、Bcryptはほとんど問題ありません。
NUL
。これらの問題が心配な場合は、 password_lock に一時的な応急処置が存在します。
PHP 7.2 では、このインターフェイスを介して Argon2i を使用できる可能性があります (RFC がパスすると仮定します)。
数年後 (PHP 7.5 頃、メジャー バージョンの更新がないことを前提として)PASSWORD_ARGON2I
が の新しい値になるのを目にするPASSWORD_DEFAULT
かもしれませんが、そうではないかもしれません。暗号研究者が信頼を得るには数年かかります。
I use Blowfish and really like it, but Keccak is said to be better.
「より良い」はそのような相対的な用語です。何がいいの?セキュリティ、パフォーマンス、スケーラビリティ、移植性、...?
ユーザーパスワードをハッシュするためだけに、より優れた「セキュリティ」が必要な場合は、Keccakはおそらく適切なオプションではありません。Blowfishは、ハッシュが発見された場合にハッシュをブルートフォースするのに時間がかかるため、より優れた「セキュリティ」を提供します。
そうは言っても、組み込みアーキテクチャで実行するものを探している場合、またはより優れた移植性が必要な場合は、Keccakが適切なオプションです。これがgithubでのPHP実装であり、これがもう1つです。Keccakソースをダウンロードして 、独自の言語拡張を作成することもできます。
しかし、正直なところ、あなたが知っていることに固執するのがおそらく最善です。ハッカーが現在使用しているblowfishハッシュを簡単に取得できる場合、問題はハッシュアルゴリズムではなく、データベースへのアクセスです。また、PHP拡張機能は、これを使用するすべてのサーバーにインストールする必要があることに注意してください。共有ホストを使用している場合は、インストールできる場合とできない場合があります。
実際には、あなたはおそらくあなたが持っているものに固執する必要があります。おそらくそれは十分に安全であり、Keccak実装が標準のPHPコアに移植されたら、次に移動できます(必要な場合)。ちょうど私の2セント。