5

バックグラウンド:

私の小さなサイトにログインを追加したいと思います。これはオンラインのphpアプリケーションであり、将来多くのユーザーアクティビティに耐えられるように構築したいと考えています。

LightOpenIDの実装をさらに検討する前に、通常のログインを追加したいと思います。私が学んでいた本はHeadFirstPHP&MySQL(2008)と呼ばれ、この章の最後のコードはSHA('$user_password')mysqlクエリの一部として使用されます。

Jeff Atwoodの執筆に興味を持っているので、scryptの時点でbcryptをよく知っています。しかし、scryptのphp実装がなく、それを実行するための専用サーバーがないため、少なくとも今のところbcryptの実装を検討することにしました。

しかし、私は完全にナイーブではありません。非常に謙虚なホスティングリソースを過度に拡張しないように注意する必要があることを知っています。phpアプリ自体は、リソースに関して他の何よりも常に最初に来る必要があります。

Andrew Mooreの方法は素晴らしいようです(ただし、ホストが使用するphp 5.2.17に実装する方法を確認する必要があります)。ハードウェア速度のヒントが付属しています。

200〜250ミリ秒の作業が発生するラウンド数を選択する必要があります。bcryptが安全である理由の一部はそれが遅いということです。その特性を維持するラウンドの数を確保する必要があります。–アンドリュー・ムーア

別のユーザーは、実行するmicrotime()とBcrypt(9)に0.314が与えられると述べています。これは、ほぼ最適です。

質問:

私は自由に使える非常に謙虚なリソースしか持っておらず、それらを最大限に活用したいので、ほとんどをphpアプリ自体に任せたいので、他のものの代わりにBcrypt(4)を使用する方が良いでしょうか?

Bcrypt(4)はほぼ瞬時にtrueを返しますが、それでもムーアが話している特徴を維持していますか?(GPUのブルートフォーシングを困難にするRAMに関する部分でしょうか?この時点で?

この状況でBcrypt(4)が勝つことを期待しますが、私は地獄を知っていますか?:p

4

3 に答える 3

5

セキュリティとは、常にセキュリティで保護しようとしていることです。

セキュリティよりもリソースに関心がある場合、bcrypt(2)はすでにやり過ぎです。LinkedInや他の多くのサイトのように、shaファミリーの関数を使用するだけで、1回の反復で無塩の、より簡単なターゲットサイトを使用して、通常のアプリケーションでこれを破ろうとするハッカーはいないでしょう。彼らは「ぶら下がっている果物」のために行きます。または、パスワード暗号化の部分だけでなく、アプリケーションをハッキングしようとし続ける可能性があります。

SHA-512は、パスワードハッシュアルゴリズム[1]としてSHA-1よりもはるかに安全ではなく、その目的のために設計されていません。これらは、安全な暗号化アルゴリズムを作成するためのプリミティブとして引き続き使用できますが、それは1人の人間が行うべきではないことです。安全であると見なされるには、暗号化アルゴリズムはピアレビューを受けるために公開されている必要があり、時間のテストに合格する必要があります。そして明らかに、あなたがそれらを使用しようとしているもののために設計されなければなりません。MD5、SHA-Xなどは暗号化アルゴリズムですが、パスワードを保存するために設計されたものではありません。

bcryptにラウンドを追加または削除するだけです。この場合、1または2を使用します。また、1ラウンド!=1回の反復であることにも注意してください。それらは指数関数的に増加します。bcryptがどのように機能するかを読むと、単なる反復以上のものがあることがわかります。たとえば、「パスワードごとの一意のソルト」について言及しました。Bcryptにはすでにそれがあります。

[1]他のことについては、明らかにより安全です

于 2012-07-28T20:07:32.377 に答える
2

bcryptだけでなく、システムのセキュリティにも目を向ける必要があります。

確かに、パスワードを保存したい場合は、bcryptまたはPBKDF2が先に進む方法です。ユーザーまたはパスワードごとに十分な大きさのランダムなソルトを使用するようにしてください。次に、反復回数を最大化してみてください。それが小さければ、それは小さいですが、どんな反復でも何もないよりはましです。

これは、盗聴や中間者攻撃(MitM)に対してはほとんど効果がないことに注意してください。そのためにSSLを使用する必要があります。パスワードまたはハッシュ(ハッシュクライアント側を実行する場合)は、別の方法で再生できます。

さらに、ブルートフォース攻撃(最も一般的なパスワードを試みる攻撃者)から保護したい場合は、優れたパスワード管理スキームを作成(またはコピー)する必要があります。誤ったログインの量を制限し、ユーザーが強力なパスワードを作成できるようにしてください。また、誤ったログインに関してユーザーに返す情報の量を制限します。そのユーザーが攻撃者である可能性があります。

于 2012-07-28T22:15:38.780 に答える
1

それとも、SHA512または他の何かが実際には同じくらい高速ですが、この時点でより安全ですか?

遅さはパスワードハッシュアルゴリズムの主要な機能です(bcryptは1つですが、SHA-512自体はそうではありません)-アルゴリズムが遅いほど(他のアルゴリズムと比較して)、攻撃者がパスワードをブルートフォースするのは難しくなりますハッシュに基づいています。この観点から、SHA-512の1回のラウンドは、パスワードを安全に保存するためにbcryptよりもかなり高速であるため適切ではありません。

私の意見では、パスワードハッシュアルゴリズム(bcrypt、PBKDF2、scrypt)を選択し、使用可能なコンピューティングリソースと特性を考慮して、速度とセキュリティの間で最良のトレードオフを提供するように作業係数を調整するのが最善のアプローチです。あなたのシステムの。より高い作業係数=より安全ですが、より多くのリソースを消費します。

幸いなことに、ユーザーは通常、他の機能と比較してログイン機能を使用することが少ないため、低速でリソースを大量に消費するログイン機能の影響は一般に大きな問題ではありません。

于 2012-07-28T23:16:41.853 に答える