9

重複の可能性:
PHP パスワードの安全なハッシュとソルト

Web サイトを作成していますが、パスワードを保存するための安全なアルゴリズムが必要です。最初は bcrypt を考えていましたが、ホストがサポートしていないことがわかり、ホストを変更できません。

私のホストはこの暗号化を許可します:

  • 標準DES

そして、これらのハッシュ:

  • MD5
  • md2、md4、md5
  • sha1、sha256、sha384、sha512
  • ripemd128、ripemd160、ripemd256、ripemd360
  • ワールプール
  • tiger128,3、tiger160,3、tiger192,3、tiger128,4、tiger160,4 & tiger192,4
  • スネフル
  • ゴスト
  • アドラー32
  • crc32 & crc32b
  • haval128,3, haval160,3, haval192,3, haval224,3, haval256,3, haval128,4, haval160,4, haval192,4, haval224,3, haval256,4, haval128,5, haval160,5, haval192, 5、haval224,5 & haval256,5

それで、あなたの誰かがそれとソルトで良いアルゴリズムを修正できますか?

4

5 に答える 5

9

暗号化された (または暗号化されていない) パスワードを保存するべきではありません。代わりに、saltedハッシュ(たとえば PBKDF2 で拡張)、できれば SHA2-512 を使用してください。

参考までに、リストされているハッシュの分類を次に示します (詳細については、ウィキペディアを参照してください)。

暗号化(ハッシュ関数ではない): DES
非暗号化チェックサム (笑える) : adler32、crc32、crc32b
壊れている: MD2、MD4、MD5、SHA1
おそらく壊れている: Tiger、snefru、GOST、HAVAL*
おそらく安全: SHA2-256/384 /512、RIPEMD-128/256、RIPEMD-160/320、ワールプール

強度とは、既知のハッシュに一致するパスワードを見つける攻撃 (プリイメージ攻撃) を指すことに注意してください。また、上記のソートは偏執的であり、既知の脆弱性を持つハッシュを即座に破棄します

于 2011-08-15T17:07:30.723 に答える
1

パスワードは、暗号化するのではなく、上記のようにハッシュとして保存する必要があります。

ハッシュ関数は基本的に一方向の変換であり、同じ入力引数に対して常に同じハッシュを生成します。ハッシュを元の形式に戻すことはできません。そうしないと、ハッシュ関数が壊れていると見なされます。

暗号化は、キーがあれば暗号化されたデータを元の形式に戻すことができる双方向の変換です。

パスワードをハッシュとして保存することにより、また一方向に変換されるため、誰かがデータベースを入手したとしても、パスワードを抽出することはできません。

パスワードをチェックするときは、保存されているパスワードで使用したのと同じハッシュ関数でパスワードを変換し、データベースと照合するだけです。

于 2011-08-15T17:34:00.550 に答える
1

crc32、adler32 などは、暗号的に安全になるようには設計されていません。これらは単に高速なチェックサム アルゴリズムです。ソルトされた SHA-256 は、セキュリティと互換性の優れた組み合わせを提供するはずだと思います。

あまり深刻ではありませんが、中程度の負荷がかかると予想される低速のサーバーでソルト付き MD5 を使用したことを思い出しました。そこで、32 ビットのランダムなソルトをパディングして、全体を 16 進数で保存することにしました。全体が無塩の SHA-1 であるという印象を与えました。誰かが盗まれたダンプでレインボー テーブルを実行して貴重な時間を無駄にしたことを心から願っています。

セキュリティは、実際にはより高価なハッシュに関するすべてではありません:)

于 2011-08-15T17:09:36.837 に答える
1

あなたがすべき

  • ハッシュの一部としてソルトを使用します。
  • 10,000 回以上の反復範囲で反復ルーチンを使用します。たとえば、PBKDF#2 です。
  • 既知の強力なハッシュ (SHA-256、SHA-512) を使用する
于 2011-08-15T17:09:56.243 に答える
0

gnur が言ったように、パスワードをハッシュ化するか暗号化するかを決定する必要があります。これらが自分のユーザーのパスワードであり、パスワードがシステムでのみ使用されている場合は、ソルトとストレッチを使用してハッシュします。使用可能なハッシュ アルゴリズムのうち、SHA-256 または SHA-512 を使用します。ソルトには、128 ランダム ビット (16 バイト) を使用します。暗号化された RNG を使用するのが理想的ですが、ピンチの場合は非暗号化の RNG で十分です。いずれにせよ、攻撃者はソルトを知っていると想定されます。1 つのパスワードを処理するのに約 0.1 秒かかるように十分にストレッチします。これにより、攻撃者はパスワードの解読を毎秒 10 回までに制限されます。

外部システムにログオンするためのパスワードを保存している場合は、パスワードを暗号化し、必要に応じて復号化する必要があります。3DES (別名トリプル DES または DESede) も利用できない場合を除いて、ここでは DES が唯一の現実的なオプションです。AES/Rijndael が利用できないことに驚いています。そうである場合は、DES より優先されます。

于 2011-08-15T17:15:39.250 に答える