3 votes

Existe-t-il un algorithme de hachage SHA256 à clé conforme à la norme FIPS pour .NET ?

Je crée un hachage SHA256 avec clé en utilisant HMACSHA256 avec le code suivant :

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
}

Cette méthode fonctionne parfaitement, mais elle échoue dans un environnement compatible avec la norme FIPS, car HMACSHA256 utilise une implémentation sous-jacente de SHA256Managed qui n'est elle-même pas conforme à la norme FIPS.

En cherchant dans la documentation MSDN, je trouve que la seule implémentation SHA256 de KeyedHashAlgorithm est HMACSHA256.

Je suis tenu de signer les demandes de services Web avec un hachage SHA256 codé (je ne peux donc pas modifier le type de hachage) et je dois pouvoir fonctionner dans un environnement compatible FIPS.

Une recherche sur Google montre que SHA256CryptoServiceProvider et SHA256Cng sont des moyens conformes aux normes FIPS pour créer des hachages SHA256, mais qu'aucun ne semble prendre en charge la création de hachages avec clé.

4voto

DGDev Points 715

Je sais que c'est vieux mais il semble que Microsoft ait réglé ce problème. J'utilise .NET 4.5.1 sous Windows 8. Je ne peux pas dire quelle version de la BCL a été corrigée ou quel système d'exploitation.

this.m_hash1 = HMAC.GetHashAlgorithmWithFipsFallback((Func<HashAlgorithm>) (() => (HashAlgorithm) new SHA256Managed()), (Func<HashAlgorithm>) (() => HashAlgorithm.Create("System.Security.Cryptography.SHA256CryptoServiceProvider")));

3voto

SwDevMan81 Points 22634

Non, il n'y en a pas. Ici Voici une liste de ceux qui le sont (faites défiler jusqu'à FIPS.sys Algorithms section).

Une solution que j'ai utilisée dans le passé est la suivante aquí mais je ne suis pas sûr que cela fonctionne pour les services web. Ce site La solution pourrait fonctionner.

0voto

owlstead Points 22329

Officiellement, vous n'avez peut-être pas de chance, mais il devrait être relativement facile de construire un HMAC_SHA256 à partir de SHA-256. Jetez simplement un coup d'œil à la page Wikipedia pour voir à quel point c'est facile.

Notez qu'il se peut que le HMAC n'ait pas été approuvé en mode FIPS parce qu'il est vulnérable aux attaques par canal latéral. Dans ce cas, vous devez vous assurer qu'il existe une protection contre les attaques par canal latéral.

Il est un peu dangereux de construire ses propres algorithmes cryptographiques à partir de primitives cryptographiques. Si vous essayez vous-même de revendiquer une sécurité de niveau FIPS, cela peut devenir un problème. Mais pour la plupart des utilisateurs, il suffit de dire que vous n'utilisez que des algorithmes conformes au NIST. C'est à vous de décider jusqu'où vous êtes prêt à aller. en bas cette ligne...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X