Приложение, утвержденное FIPS с функцией HMAC на основе SHA512? - PullRequest
4 голосов
/ 31 января 2012

Я создаю проверенное приложение FIPS, и на моем компьютере включен режим FIPS. Мне нужна функция HMAC, надеюсь, основанная на SHA512. Я понимаю, что функция HMAC SHA1 проверена FIPS, но у меня есть хеш-функция SHA512CryptoServiceProvider, которая проверена FIPS, и я знаю, что FIPS фактически разрешает SHA512. Существует ли аналогичная функция HMAC в C #, которая проверяет FMS HMAC SHA512?

Ответы [ 2 ]

7 голосов
/ 31 января 2012

Существует HMACSHA512 Class , но он использует SHA512Managed Class для внутреннего использования, который не сертифицирован FIPS .

Вы можете попытаться создать свой собственный класс HMACSHA512 на основе SHA512CryptoServiceProvider Class :

public class MyHMACSHA512 : HMAC
{
    public MyHMACSHA512(byte[] key)
    {
        HashName = "System.Security.Cryptography.SHA512CryptoServiceProvider";
        HashSizeValue = 512;
        BlockSizeValue = 128;
        Key = key;
    }
}
2 голосов
/ 07 мая 2012

Для меня сработало следующее - я смог создать как HESAC, так и AES и SHA256 FIPS:

    /// <summary>Computes a Hash-based Message Authentication Code (HMAC) using the AES hash function.</summary>
    public class AesHmac : HMAC
    {
        /// <summary>Initializes a new instance of the AesHmac class with the specified key data.</summary>
        /// <param name="key">The secret key for AesHmac encryption.</param>
        public AesHmac(byte[] key)
        {
            HashName = "System.Security.Cryptography.AesCryptoServiceProvider";
            HashSizeValue = 128;
            BlockSizeValue = 128;
            Initialize();
            Key = (byte[])key.Clone();
        }
    }

    /// <summary>Computes a Hash-based Message Authentication Code (HMAC) using the SHA256 hash function.</summary>
    public class ShaHmac : HMAC
    {
        /// <summary>Initializes a new instance of the ShaHmac class with the specified key data.</summary>
        /// <param name="key">The secret key for ShaHmac encryption.</param>
        public ShaHmac(byte[] key)
        {
            HashName = "System.Security.Cryptography.SHA256CryptoServiceProvider";
            HashSizeValue = 256;
            BlockSizeValue = 128;
            Initialize();
            Key = (byte[])key.Clone();
        }
    }

Спасибо, Ritchie

...