2012-07-28 1 views
5

背景:Bcrypt(4)(= 4反復)とSHA512の違いか、パスワードごとに固有の塩と異なるものはありますか?

私は将来的に多くのユーザーのアクティビティを負担できるように構築したいのですが、オンラインでのPHPアプリケーションであり、私の小さなサイトにログインを追加したいです。

LightOpenIDを実装する前に、通常のログインを追加します。私が学んでいる本はHead First PHP & MySQL(2008)と呼ばれ、この章の最終コードはをmysqlクエリーの一部として使用しています。

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

しかし私は完全に素朴ではありません、私は私の非常に謙虚なホストリソースを過度に拡張しないように注意しなければならないことを知っています。リソースに関する他の何よりも先にPHPアプリケーション自体が常に先に来るはずです。

Andrew Moore's methodがいいようです(私は私のホストが使用するPHP 5.2.17でそれを実装する方法を参照してくださいする必要がありますが)、それは、ハードウェアの速度のためのヒントが付属しています:

あなたは数を選択してくださいラウンドのうち、結果として200~250msの結果が となります。 bcryptが安全である理由の一部は、それが遅いということです。 には、その特性を保持するラウンド数を確保する必要があります。 - アンドリュー・ムーア

別のユーザーは、彼がmicrotime()を実行するために(9)、これに近い最適であろうbcryptのための0.314を与えると述べています。

質問:私は私の処分で非常に謙虚なリソースを持っていると私はPHPのアプリ自体のほとんどを残して、それらを最大限に活用したいのですが、はオフ、私はまだ良いだと見られて

何かの代わりにBcrypt(4)を使用していますか?

bcryptの(4)ほぼ瞬時にtrueを返しますが、それはまだ特性ムーアは語ることを続けるのでしょうか?(つまり、GPUのbruteforcingことが難しくなりますRAMに関する部分でしょうか?)それともSHA512 または何か他のものを希望この時点では実際には高速ですがより安全ですか?

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

+0

5.2は古代です。あなたのホストを怒鳴り、または置き換える。 –

+0

これはそうでなければ、まともなホストですが、驚くほど安いのですが、これは仮想専用サーバーへのアップグレードのほうが、変更ホスト全体よりも問題だと思います。この機能のための何かです。 – Suzy

答えて

5

セキュリティは常にセキュリティを確保しようとしています。

あなたのセキュリティについてよりもあなたのリソースが気になる場合は、bcrypt(2)はすでに過剰です。ハッカーは通常のアプリケーションのためにそれを打破しようとは考えていません.Superファミリーの関数を使用するLinkedInや他の多くのサイトなど、より簡単なターゲットサイトを持つことはできません。彼らは「ぶら下がった果実」のために行くでしょう。または、パスワード暗号化部分ではなく、アプリケーションをハックしようとする可能性があります。

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

bcryptにラウンドを追加または削除するだけです。この場合、私は1または2を使用します。また、1ラウンド!= 1反復を覚えておいてください。それらは指数関数的に増加する。 bcryptがどのように機能するかを読んだら、反復だけでなく、それ以上のことが分かります。たとえば、「一意のsalt per password」と言いました。 Bcryptはすでにそれを持っています。

[1]他のもののために、それはあなただけではなく、bcryptので、システムのセキュリティをご覧ください

+0

ログ部分の詳細にはあまり焦点を当てませんでした.4は「$ log_2_rounds」を表しています。これは「丸数のログ」です(Matthew Flaschenのコメントに書いてあります)。そして、はい、私は塩がすでにbcryptで生成されたハッシュの不可欠な部分であることを知っています。 – Suzy

+0

@Suzyさて、あなたは私の答えが気に入らなかったことを申し訳なく思っていますが、あなたはbcryptよりも優れたものは見つけられません。あなたはすでにscryptを知っていますが、それを利用することはできません。あなたができたとしても、これについて心配する必要はありません。 – ChocoDeveloper

+0

私はあなたの答えが好きではないと言っていませんでした:それは有益です、私はすぐに私が最初の答えを受け入れることはありません。 – Suzy

2

明らかに、より安全です。

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

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

また、無差別攻撃(最も一般的なパスワードを試している攻撃者)から保護する場合は、適切なパスワード管理スキームを作成(またはコピー)する必要があります。誤ったログインの数を制限し、ユーザーに強力なパスワードを作成させてください。また、不正なログインに関してユーザーに返す情報の量を制限します。そのユーザーは攻撃者かもしれません。

+0

ええ、私はすでにユーザーに安全なパスワードを作成させるような設定をしています。そして、それが重要な理由を説明し、セミ・パスフレーズを示唆する小さなパラグラフを作ることさえも。 =) – Suzy

+0

後でクライアントサイドのハッシュを調べますが、おそらく非常に遅いマシンで低速のjavascriptで実行する以外にも、それに欠点があるかどうかはわかりません。しかし、それはユーザーに自分の反復回数を選択させるオプションを与えることができます! (サーバから何らかのストレスを受けると同時に) – Suzy

+0

"情報量を制限する"というのはどういう意味ですか?選択した時間間隔の間に残った試行回数を伝えるのは間違っていますか? 「あなたは4回の試行が残っており、その後は試しに1時間待たなければなりません」 – Suzy

1

SHA512など、実際には高速で安全なものがありますか?

遅さ(bcryptの一つである、そのうち、しかし、SHA-512、それ自体ではありません)パスワードハッシュアルゴリズムの大きな特徴である - 遅く、あなたのアルゴリズムである(他のアルゴリズムと比較して)、難しく、それがためのものですハッシュに基づいてパスワードを強制的に攻撃する攻撃者。このような観点から、SHA-512の単一のラウンドは、パスワードを安全に保存する目的で、bcryptよりもはるかに適しているため、かなり高速です。

私の意見では、パスワードハッシングアルゴリズム(bcrypt、PBKDF2、scrypt)を選択してから、スピードとセキュリティの間の最適なトレードオフを与えるために作業係数を調整することです。あなたとあなたのシステムの特性。より高い仕事率=より安全ですが、より多くのリソースを消費します。

よく知られているように、ユーザーは通常、他の機能に比べてログイン機能を使用することはあまりありません。したがって、低速/リソース集中型ログイン機能の影響は一般的に大きな問題ではありません。

関連する問題