web-dev-qa-db-ja.com

Scrypt + Bcrypt =カスケードハッシュ

私は読んだ here 異なるアルゴリズムでのハッシュは良い考えだろう.

確認できますか?

あなたの経験では、それは有用で安全ですか?セキュリティホールはありますか?

5

一般的に言えば、カスケードアルゴリズムが推奨されることはめったにありません。カスケードは、ソフトウェアをより複雑で応答性の低いものにするのに非常によく機能します。カスケーディングの通常の「正当化」は、アルゴリズムの1つが完全に壊れることに抵抗する必要があることを(おそらく魔法のように)抵抗する必要があることです。実際には、いくつかの理由でこれはそうではありません。

  • 「カスケード」する方法はいくつかあり、それらは同じことを行いません。たとえば、ハッシュ関数fおよびgがあり、プリイメージから保護する場合は、f(g(x))としてカスケードします。 =機能する可能性があります。しかし、衝突から保護したいのであれば、それはf(x)|| g(x)です(つまり、構成ではなく連結です)。カスケードを要求する人は、自分が実際にが何を望んでいるかについて、その点について十分に深く考えることはほとんどありません。

  • 正直なところ、これは1938年ではなくなりました。アルゴリズム自体が弱点になることはありません。弱点は、それが(誤用)される方法です。カスケードは、木製の小屋の鋼鉄製のドアを見るようなもので、追加の重い南京錠が必要であると主張しています。これは、実際のセキュリティ問題に対処することを避けるための、古くからのすばらしい方法です。

  • パスワードハッシュの特定のケースでは、1つの目立った弱点があります。それはパスワード自体です。パスワードは推測可能です。したがって、必要なのはslowハッシュ関数であり、より多くのCPUを自分で投入して攻撃者を打ち負かします(つまり、反復回数を増やして、ハッシュをできるだけ高くします;攻撃者の利点は、正直なサーバーと比較すると、彼がより多くのCPUを集めることができます)。サーバーのCPU is彼の防御線。カスケードとは、伝説の暗号解読に対する耐性が高まるというあいまいな感覚のために、まさにその生命力を浪費することを意味します。

だから、カスケードしないでください。せいぜい、それはあなたの人生をより困難にするだけです。多くの場合、セキュリティが直接低下します。

10
Thomas Pornin

私がそのブログ投稿を書いたのを見て、私は口を揃えるだろうと思った。最初に、それは5分の速記であり、十分に分析された理論ではなく、カフ外のコメントであったことを説明させてください。私が書いたのは、どのアルゴリズムが最適であるかを議論するときにいくつかの議論を見たからです。

元のポイントは、どちらが優れているかを議論するのではなく、両方を使用してそれで済ますことでした。

それを書いてから、私はこの分野でかなり多くの研究を行い、明らかに利点を誇張していました。 sha256(blowfish(data))のようなことをするだけでは、思ったほど攻撃に対する耐性がありません。それを取り除く方法はいくつかありますが、正しく行うには暗号化についてある程度のしっかりした理解が必要です。トレードオフがいくつかあり、失敗するのは簡単すぎます。安全性を低下させる可能性はほとんどありませんが、最も可能性の高い攻撃の場合、利益は最小限です。

この私の投稿は、暗号化を正しく行うのがいかに難しいか、そしてどのようにそれを実装するかについて細心の注意を払う必要があるかを完全に示しています。アルゴリズムを組み合わせるという概念は完全に論理的に聞こえますが、座ってそれを適切に分析すると、期待した結果が得られない場合や、場合によってはさらに悪化することもあります。

3
Mark Burnett