MAC/HMAC이 뭐예요?
메시지 인증 코드(MAC/HMAC)를, 보낸 사람과 받는 사람만 가진 비밀 도장틀로 찍는 확인 도장 이야기로 풀어봤어요.
보낸 사람이 쪽지에 지문(해시)만 찍어 보냈어요.지문은 내용이 안 바뀌었는지는 보여주지만, 누가 보냈는지는 못 보여줘요.
아무나 지문을 다시 찍을 수 있어요.지문은 비밀이 필요 없는 셈이라, 내용을 바꾼 사람도 새 지문을 똑같이 만들 수 있어요.
MAC/HMAC은 비밀 도장틀로 찍는 확인 도장이에요.도장틀(비밀 열쇠) 없인 아무도 맞는 도장을 못 찍어요. → 지문에 비밀을 더한 것이라고 보면 돼요.
지문·비밀 도장·봉인 편지를 나란히 보면 이래요.지문·비밀 도장·봉인 편지는 서로 다른 약속을 지켜요. 하나가 다른 걸 대신하지 않아요.
도장틀을 미리 나눠야 하고, '내가 안 찍었다'는 부인은 못 막아요.열쇠를 미리 나누는 문제가 남고, 제3자가 증명할 증거(부인 방지)가 필요하면 왕의 도장이 찍힌 신분증(디지털 서명)을 써요.
MAC/HMAC = 보낸 사람과 받는 사람만 가진 비밀 도장틀로 메시지 위에 찍는 확인 도장. 틀 없인 아무도 못 찍어서, 안 바뀌었는지와 누가 보냈는지를 같이 증명해요.
Message Authentication Code(MAC), 그중 해시 함수를 쓰는 방식이 HMAC(Hash-based MAC)이에요. 메시지와 공유 비밀키로 태그를 만들고(HMAC은 해시 함수로, CMAC은 블록 암호로), 같은 키를 가진 수신자만 같은 태그를 재계산해 검증할 수 있어요. 키 없는 해시(지문)는 우연한 변경만 잡아내고 일부러 고친 것은 못 막지만, MAC은 무결성과 발신자 인증을 함께 지켜요. 다만 키를 사전에 공유해야 하고, 부인 방지는 제공하지 않아요 — 그건 공개키 기반 전자서명(PKI)의 몫이에요.
어른들은 이렇게 불러요
- MAC
Message Authentication Code - 비밀 도장틀로 찍는 확인 도장. 메시지와 공유 비밀키로 함께 만든 태그예요.
- HMAC
HMAC - 해시로 만드는 비밀 도장. 해시 함수를 이용해 MAC을 만드는 가장 흔한 방식이에요.
- 해시(지문)
Hash (fingerprint) - 비밀 없이 누구나 계산해요. 우연히 바뀐 것은 잡지만, 일부러 고치면 지문도 새로 찍을 수 있어요. → 물건마다 찍는 지문
- 무결성
Integrity - 몰래 못 바꾸게. 해시도 MAC도 이걸 지켜요. → 지키는 것 세 가지
- 발신자 인증
Sender authentication - 정말 그 사람이 보냈는지. 도장틀을 가진 사람만 맞는 도장을 찍을 수 있어서 증명돼요.
- 키 공유 문제
Key-distribution problem - 도장틀을 미리 나눠야 하는 숙제. MAC/HMAC이 풀지 못하는 남은 문제예요.
- 부인 방지
Non-repudiation - '내가 안 보냈다'를 못 하게 막는 것. MAC은 못 해요. 왕의 도장(서명)이 해줘요. → 왕의 도장이 찍힌 신분증
- TLS
TLS - 봉인 편지를 주고받는 약속. 실제로는 봉인(암호화)과 비밀 도장(MAC) 둘 다 같이 써요. → 상점과 주고받는 봉인 약속