Сгенерируйте сильный ключ HMACSHA256 в C#
Я ищу, чтобы реализовать hmacsha256 запрос подписи в API, который я строю. Из того, что я понял из https://tools.ietf.org/html/rfc4868 , Лучше всего, чтобы секретный ключ имел то же количество битов, что и алгоритм хеширования (т. е. секретные ключи SHA256 должны быть 256 бит/32 байта).
Могу ли я использовать один из множества различных генераторов случайных чисел для C# или существует определенный способ, которым эти ключи должны быть сгенерированы.
Наконец, Amazon Web Services использует HMACSHA256, но они секретные ключи, которые они предоставляют (по крайней мере, мне) составляет 320 бит / 40 байт (когда ключ преобразуется в байты с помощью UTF-8, см. https://github.com/aws/aws-sdk-net/blob/master/AWSSDK/Amazon.Runtime/Internal/Auth/AWS4Signer.cs#L205-L232)есть ли причина использовать больше, чем требуется алгоритму хэширования, поскольку он усечен?
2 ответа:
Если ключ длиннее, чем поддерживает HMAC, он обычно хэшируется до нужного размера. В основном это делается для поддержки удобочитаемых ключей произвольной длины. Если вы генерируете ключ программно и вам не нужно, чтобы он был удобочитаемым, я бы рекомендовал использовать
RandomNumberGenerator
. Это в основном то, для чего он был сделан.using System.Security.Cryptography; RandomNumberGenerator rng = RandomNumberGenerator.Create(); byte[] data = new byte[32]; rng.GetBytes(data);