2013-07-10 4 views
6

내가 만들고있는 API에 HMACSHA256 요청 서명을 구현하려고합니다. https://tools.ietf.org/html/rfc4868에서 알 수 있듯이 해시 알고리즘과 동일한 비트 수 (예 : SHA256 비밀 키는 256 비트/32 바이트 여야 함)가 가장 좋습니다.C#에서 강력한 HMACSHA256 키 생성

C#에 다양한 난수 생성기 중 하나를 사용할 수도 있고 이러한 키를 생성해야하는 특정 방법이있을 수 있습니다.

마지막으로 아마존 웹 서비스는 HMACSHA256을 사용하지만, 최소한 (적어도 나에게) 제공하는 비밀 키는 320 비트/40 바이트입니다 (키가 UTF-8을 사용하여 바이트로 변환되는 경우 https://github.com/aws/aws-sdk-net/blob/master/AWSSDK/Amazon.Runtime/Internal/Auth/AWS4Signer.cs#L205-L232 참조). 해시 알고리즘이 필요 이상으로 잘리는 이유는 없기 때문입니다. A (아마도 보안) 키를 생성하는

답변

5

경우, 일반적으로 적절한 크기로 해시됩니다. 이는 주로 사람이 읽을 수있는 임의 길이의 키를 지원하기위한 것입니다. 프로그래밍 방식으로 키를 생성하고 사람이 읽을 수있는 키가 필요하지 않은 경우 RandomNumberGenerator을 사용하는 것이 좋습니다. 이것은 기본적으로 만들어진 것입니다.

using System.Security.Cryptography; 

RandomNumberGenerator rng = RandomNumberGenerator.Create(); 

byte[] data = new byte[32]; 
rng.GetBytes(data); 
10

한 가지 방법은 : 키가 HMAC가 지원하는보다 긴

var hmac = new HMACSHA256(); 
var key = Convert.ToBase64String(hmac.Key); 
+1

Base64는 16 진수와 같지 않습니다. IE의 변수 이름은 오해의 소지가 있습니다. – Peter

+1

@Peter, 그것을 지적 해 주셔서 감사합니다. 변수 이름을 수정했습니다. – Omar