多くの人が知っているように、一方向暗号化はデータベースのユーザーパスワードを暗号化する便利な方法です。そうすれば、データベースの管理者でさえユーザーのパスワードを知ることはできませんが、パスワードを推測し、同じアルゴリズムで暗号化してから、結果をデータベース内の暗号化されたパスワードと比較する必要があります。これは、パスワードを把握するプロセスに膨大な推測と多くの処理能力が必要であることを意味します。
コンピューターの速度が向上し続け、数学者がまだこれらのアルゴリズムを開発しているのを見て、現代の計算能力と暗号化技術を考慮すると、どれが最も安全かを疑問に思います。
私は何年もの間ほぼ独占的にMD5を使用してきましたが、私はもっとやるべきことがあるのではないかと思っています。別のアルゴリズムを検討する必要がありますか?
別の関連する質問:このような暗号化されたパスワードのフィールドは通常どのくらいの長さですか?暗号化については事実上何も知らないことを認めなければなりませんが、MD5ハッシュは(例として)より長くなり、おそらくより多くの処理能力が必要になると想定しています。または、暗号化されたパスワードがそもそも適合する場合、フィールドの長さはまったく問題になりませんか?
警告:この投稿は2010年に書かれて以来、GPUはブルートフォースパスワードハッシュに広く展開されています。手頃な価格のGPUは、毎秒100億MD5を実行できます。これは、完全にランダムな8文字の英数字パスワード(62文字)でも6時間でブルートフォースできることを意味します。 SHA-1はわずかに遅いだけで、1日かかります。ユーザーのパスワードははるかに弱く、(ソルティングを使用しても)1秒あたり数千のパスワードの割合で低下します。ハッシュ関数は高速になるように設計されています。パスワードにはこれは望ましくありません。 scrypt、bcrypt、またはPBKDF-2を使用します。
MD5は1996年に脆弱であることが判明し、暗号化のために 今後は使用しないでください になりました。 SHA-1は一般的に使用される置換ですが、 同様の問題があります 。ハッシュ関数の SHA-2ファミリー は、SHA-1の現在の 置換 です。 SHA-2のメンバーは、個別にSHA-224、SHA-256、SHA-384、およびSHA-512と呼ばれます。
現時点では、いくつかのハッシュ関数 SHA-3 に競合しています。これは、次の標準化された暗号化ハッシュアルゴリズムです。勝者は2012年に選ばれます。これらはまだ使用されるべきではありません!
パスワードハッシュの場合、 bcrypt 。大規模なブルートフォース攻撃を実行不可能にするのに十分なほど遅くなるように設計されています。スローダウンは自分で調整できるため、コンピューターが高速になったときに遅くすることができます。
警告:bcryptは古い双方向暗号化アルゴリズムであるBlowfishに基づいており、今日ではより良い代替手段が存在します。 bcryptの暗号ハッシュ特性が完全に理解されているとは思いません。私が間違っている場合、誰かが私を修正します。暗号化の観点からbcryptの特性(その遅さ以外)を説明する信頼できるソースを見つけたことがありません。
衝突のリスクは、公開キー暗号化やデジタル署名の場合よりも、パスワードハッシュの場合の方が重要ではないことをある程度安心させるかもしれません。今日、MD5を使用することは、SSLでは ひどい考え ですが、パスワードハッシュでも同様に悲惨なことではありません。ただし、選択できる場合は、より強力なものを選択してください。
適切なハッシュ関数を使用することは、パスワードを保護するための 十分ではない です。パスワードは salts と一緒にハッシュする必要があります。これらは長く、 cryptographically random です。また、可能であれば、ユーザーがより強力なパスワードまたはパスフレーズを選択できるようにする必要があります。常に長いほど良い。
いい質問です! このページ は良い読み物です。特に、著者はパスワードのハッシュにはMD5は適切でないと主張しています。
問題は、MD5が高速であることです。 SHA1やSHA256などの最新の競合製品も同様です。ハッシュはほとんどすべての暗号システムの構成要素であり、通常はパケットごとまたはメッセージごとにデマンド実行されるため、速度は最新の安全なハッシュの設計目標です。
速度は、パスワードハッシュ関数で望まないものです。
次に、記事ではいくつかの代替案について説明し、「 Bcrypt 」を「正しい選択」(私の言葉ではなく、彼の言葉)として推奨しています。
免責事項:私はBcryptをまったく試していません。これは友好的な推奨事項であると考えてください。ただし、自分の技術的な経験でバックアップできるものではありません。
パスワードの強度を高めるには、より多様な記号を使用する必要があります。パスワードに8〜10文字が含まれていると、解読するのがかなり難しくなります。数字/アルファベット/その他の文字を使用する場合にのみ、長くすることでより安全になります。
SHA1は別のハッシュ(一方向暗号化)アルゴリズムであり、低速ですが、ダイジェストが長くなります。 (エンコードされたメッセージ)(160ビット)MD5は128ビットのみです。
その後、SHA2はさらに安全になりますが、使用量は少なくなります。
コンピューターの速度が向上し続け、数学者がまだこれらのアルゴリズムを開発しているのを見る
RSA暗号化は、非常に大きな数を考慮してハードに依存しているため、安全です。最終的に、コンピューターは妥当な時間内に数値を考慮するのに十分な速度になります。カーブの先を行くには、より大きな数を使用します。
ただし、ほとんどのWebサイトでは、パスワードをハッシュする目的は、セキュリティを提供するためではなく、データベースにアクセスするユーザーがパスワードを読み取るために不便にすることです。そのためには、MD5で十分です。1。
ここでの意味は、悪意のあるユーザーがデータベース全体にアクセスする場合、パスワードは必要ないということです。 (正面玄関の鍵は、私が窓に入るのを止めません。)
1 MD5が「壊れている」からといって、必要なときにいつでも元に戻すことができるわけではありません。
パスワードのソルティングは常に防御の追加レベルです
$salt = 'asfasdfasdf0a8sdflkjasdfapsdufp';
$hashed = md5( $userPassword . $salt );
暗号的に安全な一方向関数であることに加えて、パスワード保護のための優れたハッシュ関数は、総当たり攻撃が困難である必要があります。つまり、設計上遅いです。 scrypt はその分野で最高の1つです。ホームページから:
最新(2009年)のハードウェアでは、派生キーの計算に5秒かかると、scryptに対するハードウェアの総当たり攻撃のコストは、bcryptに対する同様の攻撃のコストの約4000倍になると推定されます(同じものを見つけるためにパスワード)、およびPBKDF2に対する同様の攻撃の20000倍。
とはいえ、一般的に利用可能なハッシュ関数から、SHAファミリーのあらゆるものを数千回繰り返すことは、重要ではないパスワードを保護するのにかなり妥当です。
また、一度に多くのハッシュをブルートフォースするための努力を共有できないように、常にソルトを追加します。
NISTは現在、AES暗号化アルゴリズムを選択するのと同じように、新しいハッシュアルゴリズムを選択するコンテストを実施しています。したがって、この質問に対する答えは、おそらく数年で異なるでしょう。
提出物を調べて、自分で調べて、使用したいものがあるかどうかを確認できます。