2

生成されたハッシュのサイズとアルゴリズムの速度は重要ではありません。私は本当にそれが最も安全なオプションであることだけに興味があります. サードパーティのライブラリも使用したくありません。

私が使用している .NET フレームワークのバージョンが 3.5 の場合、それが違いを生む場合。

4

3 に答える 3

13

SHA512が組み込みのハッシュ アルゴリズムからの最善の策だと思います。これは、非常に安全なアルゴリズムの最大のハッシュ形式です。

また、ソルトを使用してハッシュを辞書攻撃から保護することを忘れないでください。

于 2008-10-28T09:33:03.740 に答える
11

アルゴリズムの速度は重要ではないと述べていますが、実際には不可欠です。

「セキュア」の定義に大きく依存し、SHA512元に戻すことは (ほぼ) 不可能ですが、実際にはブルート フォース攻撃を行うのはかなり簡単です。

これは、高速であるためです。非常に高速になるように設計されているという点で、SHA「ファミリー」の基本的な設計上の欠陥と考えることができます。

これは問題です -SHA512非常に高速であるという設計目標を達成します (より遅くはありませんSHA1)。10 年前、または 5 年前でさえ、重大なブルート フォース攻撃は問題外でした。今では、2 枚のファンシーなグラフィックス カードまたはクラウド タイムです。

ここで、キー ストレッチング アルゴリズムの出番です。パスワード ハッシュを作成するプロセスを故意に遅くします。個々のハッシュをチェックするユーザーが気付かないほど遅いですが、ブルート フォース攻撃には時間がかかりすぎます。

キー ストレッチング アルゴリズムの良い例は RFC2898 またはPBKDF2です。長いソルトを使用し、SHA アルゴリズムを何千回も実行して、再現が遅いハッシュを作成します。

.Net には、次のネイティブ実装があります。Rfc2898DeriveBytes

彼らはそれを に使用していますが、他の場所で使用するためにソースSystem.Web.Crypto.HashPasswordを簡単に確認できます。

私のマシン(かなりゴミの古いラップトップ)では、1000回の反復(デフォルト)の単一の.NetRfc2898DeriveBytesハッシュに約50ミリ秒かかりますが、1秒間に約250,000のSHA512ハッシュをブルートフォースできます。

したがって、現在 .Net で最も安全なオプションは .NET を使用することRfc2898DeriveBytesです。

ただし、RFC2898/PBKDF2 には弱点があります。遅い並列コンピューティングはますます安価になり、各ハッシュを構築するのに多くのメモリを必要としません。現時点ではかなり力ずくではありませんが、5 年または 10 年後ですか?

そのため、次世代はbcrypt / scryptのようなアルゴリズムであり、ハッシュごとに大量のメモリを使用するように設計されており、並列実行が高価になります。.Net の実装はありますが、(まだ) ネイティブのものはありません。実装されるまでは使用することに慎重です。これらを使用すると、同時ログオン (パスワードに使用する場合) などの負荷に影響するため、導入する必要があります。アーリーアダプターにとっては大きなリスクです。

于 2012-08-06T13:09:03.733 に答える
0

ユーザーは、.NET で最も安全なハッシュ アルゴリズムは何かと尋ねました。PBKDF2 はハッシュ アルゴリズムではなく、暗号化キーを導出する方法であり、基本的な疑似乱数関数はハッシュ アルゴリズムである可能性がありますが、Rfc2898DeriveBytes では、実際には x パスを介した HMACSHA1 です。各パスからの各ハッシュ値の各バイトを、次のものと XOR します (キー ストレッチと呼ばれます)。

質問に答えると、現在 HMACSHA512 が .NET で最も安全なハッシュ アルゴリズムです。

パスワードを「ハッシュ」したい場合 (直接のハッシュ関数出力ではないため、ハッシュと言います)、PBKDF2 を受け取り、HMACSHA1 を使用して実装された Rfc2898DeriveBytes MS ではなく、HMACSHA512 を使用してバイトを導出する API を次に示します。 sourceforge.net/projects/pwdtknet

于 2012-10-19T05:51:40.400 に答える