HMAC 만들기
HMAC를 계산하려면
- CryptAcquireContext를 호출하여 Microsoft CSP(암호화 서비스 공급자)에 대한 포인터를 가져옵니다.
- CryptCreateHash를 호출하여 HMAC해시 개체에 대한 핸들을 만듭니다. Algid 매개 변수에 CALG_HMAC 전달합니다. hKey 매개 변수에서 대칭 키의 핸들을 전달합니다. 이 대칭 키는 HMAC를 계산하는 데 사용되는 키입니다.
- dwParam 매개 변수가 HP_HMAC_INFO 값으로 설정된 CryptSetHashParam을 호출하여 사용할 해시 유형을 지정합니다. pbData 매개 변수는 초기화된 HMAC_INFO 구조를 가리킵니다.
- CryptHashData를 호출하여 데이터의 HMAC 컴퓨팅을 시작합니다. CryptHashData를 처음 호출하면 내부 문자열 및 데이터와 함께 XOR 연산자를 사용하여 키 값이 결합됩니다. XOR 작업의 결과가 해시된 다음, HMAC의 대상 데이터(CryptHashData 호출에서 전달된 pbData 매개 변수가 가리켰다)가 해시됩니다. 필요한 경우 CryptHashData 에 대한 후속 호출을 통해 대상 데이터의 해시를 완료할 수 있습니다.
- dwParam 매개 변수를 HP_HASHVAL 설정하여 CryptGetHashParam을 호출합니다. 이 호출을 사용하면 내부 해시가 완료되고 외부 문자열이 키와 XOR을 사용하여 결합됩니다. XOR 작업의 결과가 해시된 다음 내부 해시의 결과(이전 단계에서 완료됨)가 해시됩니다. 그러면 외부 해시가 완료되고 pbData 매개 변수 및 dwDataLen 매개 변수의 길이에 반환됩니다.
참고
메시지 암호화 및 MAC(메시지 인증 코드) 생성에 동일한 대칭(세션) 키를 사용하지 마세요. 둘 다에 동일한 키를 사용하면 공격자가 메시지를 디코딩할 위험이 크게 증가합니다.