HMAC
HMAC (Hash-Based Message Authentication Code)
비밀 키와 결합된 암호화 해시 함수를 사용하여 메시지 인증 코드를 생성하는 특정 구조로, 메시지의 데이터 무결성과 진위성을 모두 검증합니다.
기술 세부사항
HMAC(RFC 2104)는 다음과 같이 계산합니다: HMAC(K, m) = H((K' XOR opad) || H((K' XOR ipad) || m)), 여기서 H는 해시 함수(SHA-256), K'는 블록 크기로 패딩된 키, ipad는 0x36 반복, opad는 0x5c 반복입니다. 이 이중 해싱 구조는 plain hash(key || message)에 영향을 미치는 길이 확장 공격을 방지합니다. HMAC-SHA256은 JWT 서명, API 인증(AWS Signature V4), 웹훅 검증(Stripe, GitHub), 키 파생(HKDF)에 사용됩니다. Web Crypto API는 subtle.sign()과 subtle.verify()를 통해 HMAC을 지원합니다. HMAC 검증 시 타이밍 부채널 공격을 방지하기 위해 타이밍 안전 비교가 중요합니다.
예시
```javascript
// HMAC — Web Crypto API example
const data = new TextEncoder().encode('sensitive data');
const hash = await crypto.subtle.digest('SHA-256', data);
const hex = Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0')).join('');
```