そのため、現在私のコードはsha1
、データベース実装用のパスワードをハッシュするための標準を使用しています。
パスワードを保存するためのより安全な方法は何ですか、またはありますか? 多分MD5(はい私は冗談を言っています)
たとえば、フレームワークとしてCodeigniterを使用していますが、パスワードを暗号化するための最良の方法は何でしょうか。
そのため、現在私のコードはsha1
、データベース実装用のパスワードをハッシュするための標準を使用しています。
パスワードを保存するためのより安全な方法は何ですか、またはありますか? 多分MD5(はい私は冗談を言っています)
たとえば、フレームワークとしてCodeigniterを使用していますが、パスワードを暗号化するための最良の方法は何でしょうか。
私はこのようにします。
salt = For each user generate a random seed with a random length.
iterations = Select a random number
while(iterations != 0) {
hashed_password = hash_function(password.salt) . salt; iterations-- }
パスワードフィールドに次のように保存します。
hashed_password:salt:hash_function:iterations.
また、ログイン時に、新しいパスワードをsalt、hash_function、および反復と組み合わせて使用してハッシュし、結果をhashed_passwordと比較します。
もちろん、複数のハッシュ関数を使用して、sha_x(md5(salt.password).salt).saltなどを好きなようにすることができますが、ログイン時に比較できるように、何らかの方法で保存してください。
このライブラリは非常に優れています: http://www.openwall.com/phpass/ さまざまなアルゴリズムで crypt メソッドを使用し、md5 に基づいた独自のものもありますが、反復とソルトが非常に多いため、「安全」です。
パスワードをハッシュするには、実際にbcryptを使用する必要があります。これは、特にパスワードのハッシュ用に設計されています。
パスワードのハッシュ関数は遅くする必要があります (計算時間が必要です)。SHA-1 や MD5、さらには SHA-256 などのほとんどのハッシュ アルゴリズムは高速になるように設計されていますが、これはブルート フォース攻撃の標的になりやすいものです。
bcrypt を使用することを恐れないでください。高セキュリティ サイト専用ではなく、md5 ハッシュを使用するのと同じくらい簡単に使用できます。phpassのような十分に確立されたライブラリを使用することをお勧めします。その仕組みを理解したい場合は、最も重要な点を説明しようとしたこの記事を読むことができます。
2005 年 2 月 15 日
SHA-1 が壊れています
SHA-1 が壊れています。ラウンド数を減らしたバージョンではありません。簡易版ではありません。本物。
Xiaoyun Wang 、 Yiqun Lisa Yin、Hongbo Yu (主に中国の山東大学出身) の研究チームは、彼らの結果を説明する論文を静かに回覧しています。ハッシュ長に基づく2 *80 操作のブルート フォース攻撃。
2**39 操作での SHA-0 の衝突。
2**33回の操作で58ラウンドのSHA-1で衝突。
この比較リストを見てください。