HMAC

2021. 2. 16. 08:39

HMAC Hash-based Message Authentication Code의 약자이다.

우리 말로 하면 '해시 기반 메세지 인증 코드' 라고 번역할 수 있다

송신자와 수신자만이 공유하고 있는 keymessage를 혼합하여서 hash 값을 만드는 것입니다.

채널을 통해 보낸 메시지가 훼손 되었는지 여부를 확인하는데 사용할수 있다.

MAC의 특성상 역산이 불가능하기 때문에 수신된 메시지와 hash 값을 다시 계산하여 계산된 HMAC과 전송된 HMAC이 일치하는지를 확인 하는 방식입니다.

 

HMAC 작동 과정

 

HMAC의 크기 :n

메시지의 블록의 크기: m

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

 

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

'IT > 용어정리' 카테고리의 다른 글

리눅스 명령어  (0) 2021.09.30
Elasticsearch  (0) 2021.02.16
ASN.1  (0) 2021.02.16
X.509  (0) 2021.02.16
TURN  (0) 2021.02.16

BELATED ARTICLES

more