본문 바로가기
IT/security

#11 hmac (Hash-based Message Authentication Code)

by 내일은교양왕 2025. 6. 12.

개념

로, 해시 함수를 기반으로 한 메시지 인증 코드입니다. 쉽게 말해, 메시지가 중간에 바뀌지 않았는지 확인하고, 누가 보냈는지도 검증할 수 있게 도와주는 기술

 

HMAC의 기본 목적

무결성 보장: 메시지가 도중에 변경되지 않았는지 확인

인증(Authentication): 메시지를 누가 보냈는지 (공유된 비밀 키를 가진 사람인지) 검증

 

검증 흐름

예시 상황을 볼게요

 - A가 B에게 메시지와 HMAC을 보냄

 - A와 B는 같은 비밀 키(key) 를 미리 알고 있음

 

A가 보낼 때

hmac = HMAC(key, message)   // 송신자가 계산
→ message + hmac 전송

 

B가 받을 때

expectedHmac = HMAC(key, message)   // 수신자가 동일 방식으로 재계산

 

B는 전송받은 hmac과 자신이 계산한 expectedHmac을 비교

 - 같으면 → 위변조 없음 + 인증 성공

 - 다르면 → 조작되었거나, 인증 실패

 

예시 (SHA-256 기반 HMAC)

import crypto from 'crypto' 

const key = 'secretkey' 
const message = 'hello world' 

const hmac = crypto.createHmac('sha256', key) 
hmac.update(message) 

const result = hmac.digest('hex') 
console.log(result)

 

HMAC을 사용하는 예시들

 - JWT (JSON Web Token)의 HS256 서명

 - OAuth 인증

 - AWS API 인증

 - TLS (SSL)