61

多くの人が知っているように、一方向暗号化はデータベース内のユーザーパスワードを暗号化するための便利な方法です。そうすれば、データベースの管理者でさえユーザーのパスワードを知ることはできませんが、パスワードを推測し、同じアルゴリズムでそれを暗号化してから、結果をデータベース内の暗号化されたパスワードと比較する必要があります。これは、パスワードを把握するプロセスには、大量の推測と多くの処理能力が必要であることを意味します。

コンピューターがどんどん速くなり、数学者がまだこれらのアルゴリズムを開発しているのを見て、現代の計算能力と暗号化技術を考えると、どれが最も安全か疑問に思います。

私はMD5をほぼ独占的に何年も使用していますが、もっとやるべきことがあるかどうか疑問に思っています。別のアルゴリズムを検討する必要がありますか?

別の関連する質問:このような暗号化されたパスワードのフィールドは通常どのくらいの長さである必要がありますか?私は暗号化について事実上何も知らないことを認めなければなりませんが、MD5ハッシュ(例として)はもっと長くなる可能性があり、おそらくクラックするためにより多くの処理能力を必要とするだろうと思います。または、暗号化されたパスワードが最初にフィールドに収まる場合、フィールドの長さはまったく問題になりませんか?

4

7 に答える 7

61

警告:この投稿は2010年に作成されて以来、GPUはブルートフォースパスワードハッシュに広く導入されています。手頃な価格のGPUは、1秒あたり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にとってはひどい考えですが、パスワードハッシュにとっては同様に悲惨なことではありません。ただし、選択肢がある場合は、より強力なものを選択してください。

優れたハッシュ関数を使用するだけでは、パスワードを保護するのに十分ではありません。長くて暗号的にランダムなソルトと一緒にパスワードをハッシュする必要があります。また、可能であれば、ユーザーがより強力なパスワードを選択したり、フレーズを渡したりできるようにする必要があります。常に長いほど良いです。

于 2010-02-24T21:34:31.877 に答える
10

素晴らしい質問です! このページはよく読んでいます。特に、著者は、MD5はパスワードのハッシュには適切ではないと主張しています。

問題は、MD5が高速であることです。SHA1やSHA256などの最新の競合製品も同様です。ハッシュはほとんどすべての暗号システムの構成要素であり、通常はパケットごとまたはメッセージごとにデマンド実行されるため、速度は最新のセキュアハッシュの設計目標です。

速度は、パスワードハッシュ関数に必要とされないものです。

次に、この記事ではいくつかの代替案について説明し、Bcryptを「正しい選択」として推奨しています(私の言葉ではなく、彼の言葉です)。

免責事項:私はBcryptをまったく試していません。これは友好的な推奨事項と考えてください。ただし、私自身の技術的経験でバックアップできるものではありません。

于 2010-02-24T21:29:52.117 に答える
6

パスワード強度を高めるには、さまざまな記号を使用する必要があります。パスワードに8〜10文字が含まれていると、解読がかなり難しくなります。長くすると安全性が増しますが、数字/アルファベット/その他の文字を使用する場合に限ります。

SHA1は別のハッシュ(一方向暗号化)アルゴリズムであり、低速ですが、ダイジェストが長くなります。(エンコードされたメッセージ)(160ビット)MD5には128ビットしかありません。

その場合、SHA2はさらに安全になりますが、使用量は少なくなります。

于 2010-02-24T21:21:59.233 に答える
4

パスワードの塩漬けは常に防御の追加レベルです

$salt = 'asfasdfasdf0a8sdflkjasdfapsdufp';
$hashed = md5( $userPassword . $salt );
于 2010-02-24T21:26:47.000 に答える
3

コンピューターがどんどん速くなり、数学者がまだこれらのアルゴリズムを開発しているのを見る

RSA暗号化は、非常に大きな数を因数分解するのが難しいことに依存しているという点で安全です。最終的に、コンピューターは、妥当な時間内に数を因数分解するのに十分な速度になります。時代の先を行くには、より大きな数値を使用します。

ただし、ほとんどのWebサイトでは、パスワードをハッシュする目的は、データベースにアクセスできる人がパスワードを読み取るのを不便にすることであり、セキュリティを提供することではありません。そのためには、MD5で問題ありません1

ここでの意味は、悪意のあるユーザーがデータベース全体にアクセスした場合、パスワードは必要ないということです。(正面玄関の鍵は私が窓に入るのを止めません。)


1 MD5が「壊れている」からといって、いつでも元に戻すことができるわけではありません。

于 2010-02-24T21:53:08.173 に答える
2

暗号的に安全な一方向性関数であることに加えて、パスワード保護のための優れたハッシュ関数は、ブルートフォース攻撃が難しいはずです。つまり、設計上低速です。scryptはその分野で最高の1つです。ホームページから:

最新の(2009)ハードウェアでは、派生キーの計算に5秒を費やした場合、scryptに対するハードウェアブルートフォース攻撃のコストは、bcryptに対する同様の攻撃のコストの約4000倍になると推定されます(同じものを見つけるため)パスワード)、およびPBKDF2に対する同様の攻撃の20000倍。

とは言うものの、一般的に利用可能なハッシュ関数から、SHAファミリーの何でも数千回の反復を行うことは、重要でないパスワードに対するかなり合理的な保護です。

また、一度に多くのハッシュをブルートフォースするための努力を共有できないように、常に塩を追加してください。

于 2010-02-24T21:55:31.663 に答える
0

NISTは現在、AES暗号化アルゴリズムを選択するのと同じように、新しいハッシュアルゴリズムを選択するためのコンテストを実行しています。したがって、この質問に対する答えは、2、3年後には異なる可能性があります。

提出物を調べて自分で調べて、使用したいものがあるかどうかを確認できます。

于 2010-02-24T21:31:46.887 に答える