HMAC(Hashed MAC)

HMAC은 CMAC과 더불어 자주 쓰이는 메시지 인증 코드 생성 방법입니다. 메시지 인증 코드(MAC : Message Authentication Code)에 대해서는 지난 포스팅을 참고하시기 바랍니다.

 

HMAC은 2번의 Hash 함수와 1개의 대칭키(또는 비밀키라고 하지요)를 사용합니다. 대칭키를 사용하였으니 메시지의 출처를 인증할 수 있겠네요. 왜냐면 key는 단 둘만 알고 있는 비밀이기 때문입니다. 그러니 메시지의 인증이 가능한 메시지 인증 코드입니다. 

 

HMAC의 과정은 아래의 그림이 간략하게 보여줍니다. 

 

 

이 그림에 ipad인지 opad인지 모르는 녀석들도 섞여있네요. 이제 글과 함께 위의 그림을 같이보도록 합시다. 

 

 

HMAC의 크기: n

메시지 블록의 크기: m 

 

1. 메시지 블록의 크기를 나눈다

우선 메시지를 일정한 크기(256 bit(32 byte)이던 512 bit(64 byte)이던)로 나눕니다. 이 일정한 메시지 블록의 크기를 m이라고 합시다. 

 

2. 비밀키를 패딩으로 채운다.

비밀키는 최종적으로 나오는 HMAC, 즉 n의 크기 이상을 권장합니다. 만약 비밀키가 m비트 이하라면 왼쪽에 0을 덧붙여 비밀키를 m비트의 크기로 채웁니다.

 

3. 그렇게 나온 비밀키와 ipad(input pad)와 XOR 연산을 한다. 

ipad는 m/8번의 연속된 이진열로 0011 0110(0x36)으로 이루어져있습니다. 자, 그럼 여기서 m은 8의 배수로 이루어져있어야 m/8이 정수가 되겠네요. 만약 m이 16비트라면 ipad는 0011 0110 0011 0110인 ipad가 될것이고 패딩된 키와 XOR 연산이 될 것입니다.

 

4. 3의 연산된 값을 메시지 블록 맨 앞에 놓는다.

이렇게 되면 총 N+1개의 메시지 블록이 생겨납니다.

 

5. 해쉬 함수로 메시지 다이제스트를 n비트 생성한다.

4에서 연산된 N+1개의 메시지 블록 전체를 해쉬 함수로 해쉬 값을 생성해냅니다. 생성된 값은 중간 HMAC이라고 합니다.

 

6. 중간 HMAC을 m비트로 만들기 위해 0으로 채운다.

이 중간 HMAC을 다시 해쉬 함수를 만들기 위해 m비트로 맞춥니다.

 

7. 다시 패딩된 비밀키와 opad(output pad)를 XOR한다.

opad는 m/8번의 연속된 이진열 0101 1100(0x5C)로 이루어져있습니다.

 

8. 7의 결과값을 중간 HMAC 앞에 놓는다.

최종적인 HMAC을 만들기 위해서 7번의 결과와 HMAC을 합칩니다.

 

9. 마지막으로 중간 HMAC을 만든 동일한 해쉬 함수를 통해 최종 HMAC을 생성해낸다.

 

10. 결과적으로 나온 HMAC을 메시지 뒤에 붙여 상대방에게 전송하면 HMAC의 과정은 끝이납니다.

 

이상으로 HMAC에 대한 설명과 어떻게 만들어지는지에 대한 과정 설명을 마칩니다.

 

 

 

 

반응형
블로그 이미지

REAKWON

와나진짜

,