1. ホーム

[解決済み】SHA512とBlowfish、Bcryptの比較【クローズド

2022-04-07 13:55:22

質問

ハッシュアルゴリズムについて調べているのですが、答えが見つかりませんでした。

  • BcryptはBlowfishを使用します。
  • BlowfishはMD5より優れている
  • Q: しかし、SHA512よりBlowfishの方が優れているのですか?

ありがとうございます。

更新しました。

ハッシュ化と暗号化の違いについて理解していることを明確にしたい。このように質問するきっかけとなったのは この記事 , 著者はbcryptをアダプティブ・ハッシングと呼んでいます。

bcryptはBlowfishをベースにしているので、Blowfishはハッシュアルゴリズムだと思わされました。回答が指摘するように暗号化であるならば、この記事には登場しない方が良いように思います。さらに悪いのは、bcryptがベストであると結論付けていることです。 また、私が今混乱しているのは、phpassクラス(パスワードのハッシュ化に使用されていると思います)がbcrypt(すなわちblowfish、すなわち暗号化)を使用していることです。あなた方が教えてくれるこの新しい情報(blowfishは暗号化です)に基づくと、このクラスは間違っているように聞こえます。私は何かを見逃しているのでしょうか?

どのように解決するのですか?

bcryptとSHA-512のどちらが(PBKDF2のような適切なアルゴリズムの中で)良いかと言えば、十分でしょう。 十分である . どちらのアルゴリズムも、暗号解読ではなく、実装の欠陥によって侵入される可能性があるため、十分に安全です。

もし、どちらが優れているかということにこだわるのであれば、SHA-512はNISTやその他の機関によって綿密なレビューを受けています。SHA-512は良いものですが、現在では悪用できないものの、新しいハッシュアルゴリズムとしてSHA-3と競合するような欠陥が認識されています。また、ハッシュアルゴリズムの研究は暗号の研究よりも新しく、暗号技術者はまだ学んでいる最中であることも覚えておいてください。

bcryptはBlowfishほど注目されていませんが、暗号をベースにしているため、ハッシュベースの認証にはない安全性があると思います。また、SHA-2ベースのハッシュを攻撃するツールとしては、一般的なGPUを使う方が簡単です。bcryptはメモリを必要とするため、最適化にはFPGAなどの特殊なハードウェアといくつかのオンボードRAMが必要です。


注:bcryptは内部でBlowfishを使用するアルゴリズムです。暗号化アルゴリズムそのものではありません。ハッシュ関数が一方向ハッシュを行うために使用されるのと同様に、パスワードを不可逆的に隠蔽するために使用されます。

暗号ハッシュアルゴリズムは、逆引きが不可能なように設計されています。言い換えれば、ハッシュ関数の出力だけが与えられると、同じハッシュ出力を生成するメッセージを見つけるのにquot;forever"かかるはずです。実際、同じハッシュ値を生成する2つのメッセージを見つけることは、計算上不可能なはずである。暗号と違って、ハッシュ関数は鍵でパラメータ化されていないので、同じ入力は常に同じ出力を生成します。

パスワードテーブルに格納された値とハッシュするパスワードを誰かが提供すれば、その人は認証される。特に、ハッシュ関数は不可逆であるため、ハッシュを入手し、それを逆引きして有効なパスワードを見つける攻撃者でないことが前提となっている。

次にbcryptを考えてみましょう。これは、パスワードから派生したキー("derived")を使って、魔法文字列を暗号化するためにBlowfishを使用します。その後、ユーザーがパスワードを入力すると、再び鍵が導き出され、その鍵で暗号化して生成された暗号文が、保存されている暗号文と一致すれば、ユーザーは認証されます。暗号文はquot;password"テーブルに格納されるが、導出された鍵が格納されることはない。

ここで暗号を解読するためには、攻撃者は暗号文から鍵を復元しなければならない。これは、暗号化された魔法文字列は知っているが、使用された鍵は知らないので、「既知の平文」攻撃と呼ばれています。Blowfishは広範囲に研究されていますが、攻撃者が1つの既知の平文で鍵を見つけることができるような攻撃はまだ知られていません。

つまり、不可逆アルゴリズムに基づく暗号ダイジェストと同様に、bcryptはパスワード、ソルト、コスト要因から、不可逆な出力を生成するのです。その強みは、Blowfishの既知の平文攻撃に対する耐性にあり、これはダイジェストアルゴリズムに対する"first preimage attack"に類似しています。このため ハッシュアルゴリズムの代わりに パスワードの保護に使用されるため、bcryptは紛らわしいことに、quot;hash"アルゴリズムそのものと呼ばれることがあります。

レインボーテーブルがソルトの適切な使用によって阻止されたと仮定すると、真に不可逆な関数は攻撃者を試行錯誤に陥らせる。そして、攻撃者が試行錯誤できる速度は、不可逆的なquot;hash;アルゴリズムの速度によって決定されるのです。もし、ハッシュ関数を1回だけ繰り返せば、攻撃者は1000ドル程度の装置で1秒間に数百万回の試行を行い、数ヶ月で8文字までのすべてのパスワードをテストすることができるのです。

しかし、ダイジェスト出力を何千回もフィードバックすると、そのハードウェアで同じパスワードのセットをテストするのに何百年もかかることになります。Bcryptは、鍵生成ルーチンの内部で反復することにより、同じquot;鍵強化効果を達成し、PBKDF2のような適切なハッシュベースの方法は、同じことを行います。

つまり、私がbcryptを推奨する理由は、1)BlowfishはSHA-2系列のハッシュ関数と同程度の精査を受けている、2)暗号の暗号解読法はハッシュ関数のそれよりも発達している、という仮定からきているのです。