0

誰かアドバイスをいただけないでしょうか?Codeigniter を使用してパスワードを暗号化するための次のコードがどれほど安全/安全でないか、またはゴミであるか疑問に思っていましたか?

$safe_password = sha1($password, $config['encryption_key'])

安全でない場合は、Codeigniter を使用してより安全にするためのヒントを教えてください。

どうもありがとう :)

4

5 に答える 5

2

sha1 は衝突攻撃に対して脆弱であることが知られています。最高の 1 つである bcrypt を使用してみてください。bcrypt が機能しない場合は、sha512 を使用してソルトも追加します。
bcrypt を使用するのは難しいように思えるかもしれませんが、なぜそれを使用すべきかについての記事を次に示します: http://phpmaster.com/why-you-should-use-bcrypt-to-hash-stored-passwords/

sha1 が安全でない理由は、衝突攻撃のためです。sha1 のセキュリティ リスクを公開している論文の 1 つを次に示します

sha512 を使用する場合は、次の手順を実行する必要があります。

hash('sha512', $password.$salt);

また、常にソルトを使用するようにしてください。そうしないと、誰かがレインボー テーブル (データベース) を使用して、ハッシュがデータベース内の一般的なパスワードと一致するかどうかを確認できます。

于 2013-02-04T17:25:11.293 に答える
0

より良い解決策は bcrypt を使用することです。このチュートリアルをご覧ください。

これは、Codeigniter https://github.com/waldirbertazzijr/codeigniter-bcryptで使用できる小さなライブラリです。

別の関連する質問

于 2013-02-04T17:25:40.210 に答える
0

sha1 や md5 などのハッシュ アルゴリズムは、パスワードの保存には適していません。それらは非常に効率的になるように設計されています。これは、総当たり攻撃が非常に高速であることを意味します。ハッカーがハッシュ化されたパスワードのコピーを入手したとしても、ブルート フォース攻撃を実行するのは非常に簡単です。ソルトを使用すると、レインボー テーブルの効果が低下しますが、ブルート フォースに対しては何もしません。遅いアルゴリズムを使用すると、ブルート フォースが無効になります。たとえば、bcrypt アルゴリズムは好きなだけ遅くすることができ、内部でソルトを使用してレインボー テーブルから保護します。私があなただったら、そのようなアプローチまたは同様のものを使用します。

于 2013-02-04T17:26:00.333 に答える
0

PHPドキュメントから

string sha1 ( string $str [, bool $raw_output = false ] ) オプションのraw_output が TRUEに設定されている場合、代わりに sha1 ダイジェストが長さ 20 の生のバイナリ形式で返されます。それ以外の場合、返される値は 40 文字です。 16 進数。

私のアドバイスはBCRYPT、より安全に簡単に実装できるように使用します。password_compat を試すことができます。

$hash = password_hash($password, PASSWORD_BCRYPT);
于 2013-02-04T17:27:05.137 に答える
0

いいえ、sha1()たとえば、ここで読むことができるように安全とは見なされません: http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

現在、salt を使用した SHA512 が適切な選択かもしれません。hash('sha512', 'text+salt')

于 2013-02-04T17:27:55.000 に答える