bcrypt(4)(= 4反復)対SHA512またはパスワードごとに独特の塩とは異なるものは?

StackOverflow https://stackoverflow.com//questions/11704200

質問

背景:

私の小サイトにログインを追加したいです。これは、オンラインPHPアプリケーションです。将来的には多くのユーザーの活動をすることができるように構築したいです。

普通のログインを追加したいLightOpenidの実装をさらに見てください。私が学んでいた本は頭の最初のPhp&MySQL(2008)と呼ばれ、章の最後のコードはMySQLクエリの一部としてSHA('$user_password')を使用しています。

Jeff atwoodの執筆に興味があるので、スクリプトの時点でBcryptをよく知っています。しかし、ScryptのPHPの実装とそれを実行するための専用サーバーがないので、少なくともBcryptを実装することを確認しました。

しかし私は完全に素朴ではありません、私は私の非常に謙虚なホスティングリソースを超えないように注意すべきことを知っています。 PHPアプリ自体は常にリソースに関する他のものの前に最初に来るべきです。

Andrew Mooreのメソッド (私のホストが使用するPHP 5.2.17で実装する方法を確認する必要がありますが、ハードウェア速度のためのヒントが付属しています:

200~250ミリ秒になる数のラウンドを選択する必要があります。 作業。 Bcryptが安全な理由の一部は、それが遅いということです。君は その特徴を保ついくつかのラウンドを持っていることを確認する必要があります。 - Andrew Moore

他のユーザは、microtime()を実行していると述べていると述べています。これは、Bcrypt(9)で0.314を与えます。

質問:

私の処分では非常に謙虚なリソースを持っていると見た、そして私は彼らの中で最高のものを作りたいと思います。そうでなければ?

bcrypt(4)はほとんど即座に真実を返しますが、それはまだその特徴的なムーアが話をし続けますか?(それはGPUのブリュートフォーキングにとってそれを難くするRAMに関する部分であるでしょうか?)またはSHA512 または他のもの/ Strong>実際には速いですが、この時点ではより安全になりますか?

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

役に立ちましたか?

解決

セキュリティは常にあなたが安全にしようとしていることについてです。

あなたのセキュリティについてのあなたのリソースについてもっと心配しているならば、bcrypt(2)はすでにoverkillです。 Hackerは、LinkedInや他の多くのもののようなターゲットサイトを持つ通常のアプリケーションのためにそれを破ることを試みることはありません。彼らは「低吊り果実」のために行きます。または、パスワード暗号化部分にはないだけでなく、アプリケーションをハッキングしようとし続けることができます。

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

あなたのbcryptにラウンドを追加または削除するだけです。この場合、私は1または2を使うでしょう。また、1ラウンド!= 1反復を覚えておいてください。それらは指数関数的に増加します。 Bcryptがどのように機能するのかを読んでいる場合は、単なる反復よりもはるかに多くあることがわかります。たとえば、「パスワードごとに独自の塩」を記載しました。 Bcryptはすでにそれを持っています。

[1]それは明らかにより安全なものです

他のヒント

Bcryptだけでなく、システムのセキュリティを調節する必要があります。

確かに、パスワードを保存したい場合は、bcryptまたはpbkdf2は進む方法です。ユーザーまたはパスワードごとに十分に大きくてランダムな塩を使用することを確認してください。次に、反復回数を最大化してみてください。それが小さいならば、それは小さいですが、それ以上の反復は何もないよりも優れています。

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

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

またはSHA512または他のものは実際にはこの点で実際には安全であると思いますか?

SLOWNESSはパスワードハッシュアルゴリズムの主な機能です(そのうちBcryptは1つですが、SHA-512は1つですが) - あなたのアルゴリズムが遅いほど(他のアルゴリズムとの相対的)、攻撃者が困難です。ハッシュに基づく乗組員のパスワード。この観点から、シングルラウンドSHA-512は、パスワードをかなり速く保存する目的でBCRYPTよりも適していません。

私の意見では、服用の最良のアプローチは、パスワードハッシュアルゴリズム(BCRYPT、PBKDF2、Scrypt)を選んでから、あなたに利用可能なコンピューティングリソースを考えると、速度とセキュリティの間の最良のトレードオフを与えるために作業係数を調整することです。そしてあなたのシステムの特徴。より高い仕事係数=より安全ではなく、より多くのリソース集約的です。

良いニュースは、ユーザーは通常他の関数と比較してログイン関数を頻繁に使用するので、より遅い/リソースの集中的なログイン関数の影響は大きな問題ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top