web-dev-qa-db-ja.com

C#でSHA1またはMD5を使用する方法(認証のパフォーマンスとセキュリティのどちらが優れているか)

C#では、SHA1を自動的に使用する方法は?
SHA1はMD5より優れていますか?(ユーザー名とパスワードにハッシュを使用し、認証に速度が必要です)

25
Sajad Bahmani

自動的に何を意味するのかわかりませんが、実際にはSHA256以上。また、alwaysソルトを使用code )ハッシュを使用します。サイドノートは、時間が経過した後、強化されたハッシュを使用する方が、単純な速度ベースのハッシュ関数を使用するよりもはるかに優れています。つまり:数百回の繰り返しでのハッシュ、またはbcryptなどのすでに実証済みのハッシュ関数を使用します(これについては後で説明します)。 .NETでSHA256ハッシュ関数を使用するためのコードサンプルは次のとおりです。

byte[] data = new byte[DATA_SIZE];
byte[] result;

using(SHA256 shaM = new SHA256Managed()) {
    result = shaM.ComputeHash(data);
}

SHA256を使用してトリックを実行します [〜#〜] msdn [〜#〜] にあります。


SHA1の「クラッキング」に関する補足: SHA-1のクラッキングをパースペクティブに置く

35
Kyle Rozendo

SHA1はMD5よりも強力なので、選択できる場合は使用することをお勧めします。次に例を示します。

public static string CalculateSHA1(string text, Encoding enc)
{
    byte[] buffer = enc.GetBytes(text);
    SHA1CryptoServiceProvider cryptoTransformSHA1 = new SHA1CryptoServiceProvider();
    return BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", "");
}
29
Darin Dimitrov

両方とも、少なくとも直接使用するには速すぎます。キーの強化を使用して、パスワードハッシュ手順を「遅く」します。残念ながら、パスワードセキュリティの敵はスピードです。

どれくらい遅いですか?パスワードハッシュを〜マイクロ秒から〜数百ミリ秒に遅くしても、アプリケーションのパフォーマンスに悪影響はありません...しかし、パスワードのクラッキングは文字通り10万倍遅くなります。

詳細については、この記事をご覧ください: http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-Rainbow-tables-what-you-need-to-know-about- s.html

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

速度は、パスワードハッシュ関数では望ましくないものです。

... をちょきちょきと切る ...

パスワード攻撃ゲームは、パスワードXをクラックするのにかかった時間で記録されます。Rainbowテーブルでは、その時間はテーブルの大きさと検索できる速さに依存します。インクリメンタルクラッカーでは、パスワードハッシュ関数をどれだけ速く実行できるかにかかっています。

とはいえ、BCryptを使用してください。 SCryptは最近開発されましたが、安定した(または本番用の)ライブラリがまだ存在しているとは思えません。理論的には、SCryptはBCryptを改善すると主張しています。 「自分でビルドする」ことは推奨されませんが、MD5/SHA1/SHA256を何千回も繰り返すことでトリックを実行する必要があります(つまり、キーの強化)。

そして、あなたがそれらについて知らない場合には、Rainbow Tablesを必ず読んでください。基本的なセキュリティ関連。

11
Dragontamer5788

[〜#〜] msdn [〜#〜] から

byte[] data = new byte[DATA_SIZE];
byte[] result; 

SHA1 sha = new SHA1CryptoServiceProvider(); 
// This is one implementation of the abstract class SHA1.
result = sha.ComputeHash(data);
10
Ahmed Said

これらを使いたいです。

MD5、SHA1/256/384/512、オプションのエンコードパラメータ付き。

その他 HashAlgorithms 。Darin Dimitrovに感謝します。

public static string MD5Of(string text)
{
    return MD5Of(text, Encoding.Default);
}
public static string MD5Of(string text, Encoding enc)
{
    return HashOf<MD5CryptoServiceProvider>(text, enc);
}
public static string SHA1Of(string text)
{
    return SHA1Of(text, Encoding.Default);
}
public static string SHA1Of(string text, Encoding enc)
{
    return HashOf<SHA1CryptoServiceProvider>(text, enc);
}

public static string SHA384Of(string text)
{
    return SHA384Of(text, Encoding.Default);
}
public static string SHA384Of(string text, Encoding enc)
{
    return HashOf<SHA384CryptoServiceProvider>(text, enc);
}

public static string SHA512Of(string text)
{
    return SHA512Of(text, Encoding.Default);
}
public static string SHA512Of(string text, Encoding enc)
{
    return HashOf<SHA512CryptoServiceProvider>(text, enc);
}

public static string SHA256Of(string text)
{
    return SHA256Of(text, Encoding.Default);
}
public static string SHA256Of(string text, Encoding enc)
{
    return HashOf<SHA256CryptoServiceProvider>(text, enc);
}

public static string HashOf<TP>(string text, Encoding enc)
    where TP: HashAlgorithm, new()
{
    var buffer = enc.GetBytes(text);
    var provider = new TP();
    return BitConverter.ToString(provider.ComputeHash(buffer)).Replace("-", "");
}
1
wener

sHA1またはSHA2を使用するMD5アルゴリズムには問題があります。

http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html http://msdn.Microsoft.com/en-us/library/system.security.cryptography.md5 %28v = vs.85%29.aspx

1

MD5はパフォーマンスが向上し、SHA1はセキュリティが向上します。この比較からアイデアを得ることができます

enter image description here

0