2013-08-06 4 views
8

우리는 C 번호HMACSHA256 차이 및 HMACSHA512

public string GenerateHMac(string key, string message) 
{ 
    var decodedKey = Convert.FromBase64String(key); 

    var hasher = new HMACSHA256(decodedKey); 

    var messageBytes = Encoding.Default.GetBytes(message); 

    var hash = hasher.ComputeHash(messageBytes); 

    return Convert.ToBase64String(hash); 
} 

에 전달 된 키는 256 비트의베이스 64 부호화 된 문자열에 민감한 값에 대해 HMAC 해시를 생성하기 위해 다음 코드를 사용한다. HMACSHA256, HMACSHA384 또는 HMACSHA512를 사용하여 값을 해싱해야하는지 여부에 대한 질문이 제기되었습니다.

  • HMACSHA512를 HMACSHA256보다 사용하면 어떤 점이 좋습니까?
  • 훨씬 안전합니까?
  • 긴 키를 사용할 때 성능에 심각한 영향이 있습니까?

부수적으로; 내가 HMACSHA512를 사용하면 decodedKey 값이 생성자에 전달 될 때 512 비트 키가 필요합니까?

+1

[wikipedia 페이지] (http://en.wikipedia.org/wiki/SHA-2#Comparison_of_SHA_functions)에는 몇 가지 성능 벤치 마크가 있습니다. – jbabey

답변

15

해시 메서드 자체의 장점을 보려면 keylength.com website을 살펴보십시오. SHA-256조차도 꽤 큰 보안 마진을 가지고 있음을 알 수 있습니다.

HMAC 알고리즘은 기본 해시 알고리즘에 대한 공격을 거의 인식하지 못합니다. HMAC는 해시 출력의 절반까지 키 강도를 반으로 줄이는 생일 문제에 대해 불 침투합니다. 적의 공격자가 비밀 키를 가지고 있지 않아 충돌을 일으킬 수 없기 때문에 단순히 적용되지 않습니다. HMAC-SHA1조차도 꽤 안전합니다.


이제 해시 속도는 실행 환경에 따라 다릅니다. 그러나 일반적으로 다음과 같은 가정을 할 수 있습니다.

  1. SHA-1은 일반적으로 동일한 플랫폼에서 모든 SHA-2 구현보다 빠릅니다.
  2. SHA-512는 64 비트 컴퓨터에서 SHA-256보다 빠릅니다 (내부적으로 64 비트 산술을 사용하므로).
  3. SHA-256은 8, 16 및 32 비트 시스템에서 SHA-512보다 빠릅니다.

호환성 문제가 예상되는 경우 SHA-1을 사용하십시오. 그렇지 않으면 SHA-512로 갈 수도 있습니다 (결과를 적절한 비트 수로 잘라냅니다). SHA-512의 내부 상태와 높은 보안 성은 약간의 이점이 될 수 있습니다. 나는 알고리즘의 일반적인 문제로 인해 어떤 형태의 SHA-1도 허용하지 않는 고객과 관련된 문제에 부 닥쳤다. 다시 말하면, 안전하지 않다는 사실 일반적으로은 수용을 방해 할 수 있습니다. SHA-384과 덜 공지 SHA-256분의 512 및 SHA-224분의 512 해시 방법은 384, 256, 224 비트의 출력을 차단 SHA-512의 특별한 형태임을


참고. 따라서 이러한 알고리즘의 속도는 동일합니다. 출력 크기와 다른 점은 이러한 특수 형식이 내부적으로 다른 초기 값을 사용한다는 점입니다. 그렇지 않으면 384 비트로 자른 SHA-512는 SHA-512/384만큼 안전하고 빠릅니다. 그러나 SHA-384를 사용하여 호환성을 유지해야합니다.


입력 키 크기는 기본 해시 기능에 종속되지 않습니다. 키는 먼저 XOR 마스크되어 기본 해시 함수에 의해 해시됩니다. 해시 알고리즘은 사실상 무제한 양의 데이터를 입력으로 사용할 수 있습니다.

사용 된 해시 메서드의 크기보다 큰 키 크기를 사용하는 것이 좋습니다. 그렇지 않으면 HMAC 메서드에서 제공하는 보안 여백이 저하 될 수 있습니다. 키 크기로 해시 알고리즘이 여러 블록을 해시하도록 강제하는 경우 사소한 성능 저하가 발생할 수 있습니다.


당신은 또한 안전 할 것이라는 의미에서 (곧) SHA-3 표준을 사용할 수 있습니다. HMAC-SHA-3은 현재 너무 많은 의미를 갖지 않습니다. HMAC는 실제로 SHA-3 (Keccak)에 대한 과잉 공격입니다. SHA-3는 HMAC 구성이 없어도 안전해야합니다. 지금까지 [편집] KMAC는 SHA-3를위한 MAC 구조로 표준화되었습니다.

그 외에도 SHA-2 구조는 SHA-3 경쟁 기간 동안 암호 분석에 대한 꽤 우수한 저항성을 보여줍니다. SHA-3으로 업그레이드 할 필요가 없습니다.

4

보안 이점에 대해 걱정할 필요가 없다고 생각합니다. HmacSha1은 여전히 ​​secure으로 생각되며 보안은 키 길이에 비례한다고 생각해야합니다. Sha256 대 Sha512 성능은 구현, 플랫폼 등에 따라 달라 지므로 스스로 테스트해야합니다. HMAC에 제공하는 키 길이는 해시 알고리즘과 별개입니다 (pseudocode 참조).

+0

NIST 전환 문서 (http://csrc.nist.gov/publications/nistpubs/800-131A/sp800-131A.pdf), 표 9 : 해시 함수 전환 (Hash Function Transitions)은 SHA-1이 2013 년 이후 특정 용도로 디지털 서명. SHA-1은 HMAC 사용에 여전히 허용 될 수 있지만 SHA-2는 보안에 대한 고려 사항으로 널리 사용 가능하며 더 이상 사용되지 않습니다. 묵시적 약점을 단계적으로 제거하는 보안 알고리즘을 사용하는 개발자로서 얼마나 편안합니까? – ingyhere

+0

HMACSHA1을 사용하지 않는 것이 좋습니다. HMACSHA512와 HMACSHA256의 보안에 대해 걱정하지 않고 멀리있는 키 길이에만 초점을 맞추어 설명했습니다. – jbtule

0

HMAC는 해시 알고리즘을 두 번 호출합니다. SHA3은 키순 해시를 위해 HMAC 생성을 필요로하지 않으므로 이중 호출을 쉽게 피할 수 있습니다. 그 결과, SHA3는 성능면에서 HMAC-SHA2를, 보안면에서 HMAC-SHA1보다 우수합니다.