674. HMAC (Hash-based MAC) 통신 기반 IPsec 등 활용 구조
핵심 인사이트: 앞선 문서에서 무결성을 증명하는 꼬리표인 MAC을 만들 때 "메시지와 비밀번호를 섞어서 기계에 넣는다"고 했다. 그런데 어떤 기계에 넣고 섞을까? 낡은 대칭키 암호 기계(DES)에 넣고 섞는 귀찮은 방식(CBC-MAC)을 버리고, 엄청나게 빠르고 가벼운 '해시 함수 믹서기(SHA-256)'에 데이터와 비밀키를 한 번에 쏟아붓고 시원하게 갈아버리는 궁극의 조합이 바로 HMAC이다.
Ⅰ. HMAC의 개념과 등장 배경
- 개념: 메시지 인증 코드(MAC)를 생성할 때, 무겁고 복잡한 블록 암호화 알고리즘 대신, SHA-256 같은 빠르고 검증된 암호학적 해시 함수(Hash Function)와 송수신자가 공유한 비밀키(Secret Key)를 교묘하게 융합하여 꼬리표를 만들어내는 표준 알고리즘입니다. (RFC 2104)
- 배경: 해시 함수는 암호화 알고리즘보다 소프트웨어(CPU) 연산 속도가 압도적으로 빠르며, 미국 보안법(수출 제한) 규제도 받지 않아 전 세계 어디서든 자유롭게 쓸 수 있는 장점이 있었습니다.
Ⅱ. HMAC의 동작 메커니즘 (이중 해싱 구조) 🌟
해커가 비밀키의 길이를 유추하거나 앞부분을 때려맞추는 확장 공격(Length Extension Attack)을 막기 위해, 데이터와 키를 단순히 한 번 섞지 않고 햄버거처럼 층층이 두 번 갈아버리는(이중 해싱) 철저한 방어벽을 칩니다.
- 내부 해싱 (Inner Hash):
- 먼저, 비밀키(K)를 특별한 패드(ipad)와 XOR로 비틀어 섞습니다.
- 그리고 그 결과물 뒤에 '원본 메시지'를 찰싹 이어 붙인 뒤, 해시 믹서기(예: SHA-256)에 넣고 1차로 윙 갈아버립니다.
- 외부 해싱 (Outer Hash):
- 이번엔 똑같은 비밀키(K)를 다른 특수 패드(opad)와 XOR로 비틀어 섞습니다.
- 그 뒤에 아까 1차로 갈아 만든 결과물 덩어리를 이어 붙이고, 다시 해시 믹서기에 넣고 2차로 윙 갈아버립니다.
- 완성: 이렇게 2번 꼬아서 튀어나온 256비트짜리 난수가 최종 'HMAC 꼬리표'가 됩니다.
Ⅲ. 현대 통신망의 메인 방패 (IPsec, TLS)
HMAC은 속도와 보안성이라는 두 마리 토끼를 다 잡았기 때문에, 현재 여러분이 쓰는 모든 굵직한 인터넷 방어막의 심장으로 쓰입니다.
- IPsec (VPN의 뼈대): 회사 밖에서 사내망으로 연결하는 VPN(IPsec) 터널을 뚫을 때, AH 프로토콜이나 ESP 프로토콜이 패킷이 중간에 1비트라도 조작되지 않았음을 보증(무결성/출처 인증)할 때 이 HMAC-SHA256 기술을 100% 필수적으로 사용합니다.
- SSL/TLS (HTTPS 웹서핑): 여러분이 네이버에 접속해 아이디를 보낼 때, 과거 TLS 1.2 버전까지는 패킷의 무결성을 검증하기 위해 데이터 끝에 이 HMAC을 찰싹 붙여서(MAC-then-Encrypt) 전송했습니다. (※ 현재 최신 TLS 1.3은 AEAD/GCM 모드로 진화함)
- REST API 인증 (JWT, OAuth): 카카오페이나 토스 등 서버 간(API) 통신을 할 때, 내가 보낸 토큰이 위조되지 않았음을 증명하기 위해 HMAC 서명(HS256)을 달아서 쏩니다.
📢 섹션 요약 비유: 단순 해시가 일반 믹서기에 딸기(데이터)를 넣고 가는 것이라면, HMAC은 은행 금고 안에서 비밀번호(비밀키)를 쳐야만 돌아가는 '이중 보안 특수 믹서기'입니다. 딸기와 얼음(비밀키 1차)을 넣고 한 번 간 뒤, 다시 컵을 옮겨 시럽(비밀키 2차)을 붓고 한 번 더 갈아버립니다. 두 번 꼬인 레시피와 열쇠의 비밀 때문에, 해커가 중간에 딸기 주스를 가로채 불량 시럽을 몰래 넣고 다시 포장하려 해도 완벽히 똑같은 맛(HMAC 값)을 절대로 흉내 낼 수 없는 완벽한 품질 보증 마크입니다.