Crypto

MAC(메시지 인증 코드), CMAC 그리고 HMAC

총알 2024. 4. 14. 21:10
728x90

MAC에 대해 공부하기 위해 구글에서 MAC을 검색해 보았더니

애플의 MAC만 잔뜩 나와서 메시지 인증 코드(Message Authentication Code)라고 검색하였더니

내가 원하는 정보들을 얻을 수 있었다.

 

그럼 MAC에 대해서 알아보도록 하자.

 

MAC(Message Authentication Code)
MAC이란 메시지 인증 코드로 말 그대로 메시지 인증에 쓰이는 정보로
메시지를 받은 사람이 위변조가 되었는지 되지 않았는지를 판단할 수 있다.
MAC의 경우에는 무결성과 신뢰성을 보장하지만, 부인 방지는 할 수가 없다.
그 이유로는 MAC의 경우에는 대칭키를 사용해 MAC값을 생성하는데
제 3자가 대칭키를 해킹해 MAC값을 생성하여 메시지를 보낼 수 있기 때문이다.

 

그럼 MAC 생성/검증 방법을 알아보자.

MAC 생성방법
1. MAC값을 생성할 대칭키를 생성
2. 생성한 대칭키를 이용해 Message의 MAC값을 생성
3. Message + MAC 값을 수신자(영희)에게 전송
MAC 검증
1. 송신자(영수)로부터 받은 Message로 대칭키를 활용해 MAC 값을 생성
2. 수신자(영희)가 생성한 MAC값과 송신자(영수)가 생성한 MAC값을 비교
3. MAC값이 같다면 검증에 성공

 

MAC이 무엇인지, 생성 방법과 검증 방법을 알아보았는데, 이어서 MAC의 종류에 알아보려고 한다.

그중에 이번에 알아볼 알고리즘은 CMAC과 HMAC이다

 

먼저 CAMC에 대해서 알아보자

 

CMAC(Cipher-based Message Authentication Code)
CMAC은 평문 데이터를 특정 암호화 알고리즘(AES, 3DES 등)으로 암호화하고
그 암호화된 데이터의 무결성을 체크하는 알고리즘

 

*MSB: 최상위 비트가 최고값을 가짐

 

CMAC 생성방법
1. Message의 길이가 b의 정수배인지 아닌지 확인한다.
    정수배가 아니라면 Message 마지막에 1을 추가 후 나머지를 0으로 채워서 b의 정수배로 만든다.
    b: 블록의 길이 (AES: b = 128 bit, 3DES: b = 64 bit)
2. M1을 k로 암호화(encrypt)한다.
3. k로 암호화한 M1값을 M2와 XOR연산한다.
4. 3의 결과 값을 k로 암호화(encrypt)한다.
5. n-1번째 블록까지 3~4 과정을 반복한다.
6. n-1번째 블록을 암호화 한 값, n번째 Message, k1 or k2와 XOR연산 후 k로 암호화한다.
    k1, k2: 두 값은 상수로 사용자의 key 값으로부터 자동으로 생성되는 값
7. MAC(T) 값 생성

 

이어서 HMAC 생성 방법에 대해 알아보자

 

HMAC(Hash-based Message Authentication Code)
Hash Function(해시 함수)의 특징을 사용한 메시지 인증코드로,
CMAC과 동일하게 메시지의 무결성을 보장한다.
일반적으로는 대칭키를 사용하며 주어진 Message(평문)과 키를 이용하여 MAC값을 생성한다.
추가로 HAMC의 경우 아래 그림의 S, E값을 미리 구해놓을 수 있어서
CMAC에 비해서 연삭속도가 더 빠르다고 한다.

 

ipad: input pad = 0x36(0011 0110)

opad: output pad = 0x5C(0101 1100)

ipad, opad는 메시지 블록 크기를 m이라 하였을 때 m/8만큼 반복해서 생성한다.

ex) 메시지 블록 크기가 16bit라면 ipad는 00110110 00110110가 된다.

HMAC 생성방법
1. 사전에 대칭키를 미리 교환한다.
2. MAC값을 생성할 때 사용할 Hash Function(해시 함수) 선택
    ex) SHA256
3. 비밀키의 크기가 메시지의 블록 크기보다 작으면 부족한 만큼 0으로 채워준다.(패딩)
4. 3에서 패딩 된 비밀키와 ipad를 XOR연산한다.(해당 값을 S라고 정의)
5. S를 message 맨 앞에 위치시킨다.
6. S와 Message의 Hash 값을 생성한다.(HMAC'으로 HMAC 중간값으로 정의)
7. 패딩 된 키와 opad값을 XOR 연산한다(해당 값을 E라고 정의)
8. E와 HMAC'의 Hash값을 구한다.
9. 최종적으로 구한 Hash값이 HMAC이다.

 

728x90

'Crypto' 카테고리의 다른 글

키유도 함수 PBKDF2  (0) 2024.05.07
난수 생성기, PRNG와 TRNG  (0) 2024.04.11
ECC 알고리즘, ECDH와 ECDSA  (0) 2024.04.10
Hash function 알고리즘의 종류와 특징  (0) 2024.04.02
Hash Function의 특징과 용도  (0) 2024.04.01