3

次のコードで HMACSHA256 を使用して、キー付き SHA256 ハッシュを作成しています。

HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secretKey);
byte[] hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(data));

string hashResult = string.Empty;
for (int i = 0; i < hash.Length; i++)
{
    hashResult += hash[i].ToString("x2"); // hex format
}

これは問題なく動作しますが、FIPS が有効な環境では失敗します。これは、HMACSHA256 が、それ自体が FIPS に準拠していない基礎となる SHA256Managed 実装を使用しているためです。

MSDN ドキュメントを検索すると、KeyedHashAlgorithm の SHA256 実装は HMACSHA256 だけであることがわかりました。

キー付き SHA256 ハッシュを使用して Web サービス要求に署名する必要があり (そのため、ハッシュ タイプを変更できません)、FIPS 対応環境で実行できる必要があります。

グーグルは、SHA256CryptoServiceProvider と SHA256Cng の両方が SHA256 ハッシュを作成するための FIPS 準拠の方法であることを示していますが、どちらもキー付きハッシュの作成をサポートしていないようです。

4

3 に答える 3

4

これが古いことは知っていますが、Microsoft がこの問題に対処したようです。Windows 8 で .NET 4.5.1 を実行しています。これが修正された BCL のバージョンや OS について話すことができません。

this.m_hash1 = HMAC.GetHashAlgorithmWithFipsFallback((Func<HashAlgorithm>) (() => (HashAlgorithm) new SHA256Managed()), (Func<HashAlgorithm>) (() => HashAlgorithm.Create("System.Security.Cryptography.SHA256CryptoServiceProvider")));
于 2014-07-03T03:56:51.910 に答える
3

いいえ、ありません。 これがそのリストです(セクションまでスクロールしFIPS.sys Algorithmsます)。

過去に使用した回避策はこちらにありますが、それが Web サービスで機能するかどうかはわかりません。 このソリューションは機能する可能性があります。

于 2013-07-25T15:42:28.223 に答える