개념
로, 해시 함수를 기반으로 한 메시지 인증 코드입니다. 쉽게 말해, 메시지가 중간에 바뀌지 않았는지 확인하고, 누가 보냈는지도 검증할 수 있게 도와주는 기술
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)
'IT > security' 카테고리의 다른 글
| #10 웹 서비스와 공인인증서 (0) | 2025.05.10 |
|---|---|
| #9 공개키를 믿을 수 있을까? (0) | 2025.05.10 |
| #8 비대칭키의 문제점 (0) | 2025.05.10 |
| #7 효율 극대화를 위한 대칭키 + 비대칭키 활용 (0) | 2025.05.10 |
| #6 인터넷에서는 비대칭키를 어떻게 활용할까? (0) | 2025.05.10 |