JWT 기반 authentication 기능을 개발하다, JWT의 secret key 암호화 알고리즘으로 HMAC SHA512를 사용하게 되어 정리한다.
두찬의 Tech 이야기를 참조하여 작성했다.
MAC (Message Authenticatio Code)
- 메시지의 무결성 (integrity)과 메시지 인증(authentication) 목적으로 사용
- 사용자 간 공유된 key를 가지고 메시지 해쉬값(MAC)을 생성하여, 메시지가 내가 원하는 사용자로부터 왔는지 판단
HMAC (Keyed-Hashed Message Authentication Code)
개념
- 해시 함수를 이용해서 메시지 인증 코드를 구성하는 것을 HMAC 이라고 한다.
- 원본 메시지가 변하면 그 해시값도 변하는 해싱(Hashing)의 특징을 활용하여 메시지의 변조 여부를 확인하여 무결성과 기밀성을 제공.
- HMAC은 인증을 위한 secret Key와 임의의 길이를 가진 Message를 해시 함수(알고리즘)을 사용해서 생성한다. 해시 함수로는 MD5, SHA-256과 같은 일반적인 해시 함수를 그대로 사용할 수 있으며 각 알고리즘에 따라 다른 고정길이의 MAC(Hash value)가 생성된다.
인증 프로세스
- Sender와 receiver 모두 인증에 사용할 해시 알고리즘과 secret key를 알고 있다고 가정한다.
- Sender는 해시 알고리즘과 secret key를 보내고 싶은 메시지에 사용하여 signiture를 생성한다.
signiture = hash(메시지, secret key)
- Sender는 생성된 signiture과 메시지를 receiver에게 전송한다.
- Receiver는 해시 알고리즘과 secret key를 이용하여 받은 메시지로 signiture를 생성해보고, sender로부터 전달받은 signiture과 비교하여 검증한다.
해시 알고리즘 종류
HMAC-XXX에 붙는 XXX가 해시 알고리즘을 의미한다. MD5, SHA-256 등의 일반적인 해시 함수를 사용할 수 있다. (ex) HMAC-SHA256은 SHA-256 알고리즘을 의미한다.
SHA- 시리즈는 Secure Hash Algorithm을 의미한다. SHA-1, SHA-2, ... SHA-256, SHA-512 등이 있는데, 해시 다이제스트의 길이가 256인 것을 SHA-256이라고 한다.
- 다이제스트: 원문을 해싱해서 나온 메시지.
SHA-XXX HMAC 알고리즘들은 XXX에 따라 최소/권장되는 secret key의 사이즈가 다르다.
SHA-512는 최소 secret key length가 64 bytes이며, 128 bytes가 권장된다.
128 bytes를 초과하는 key는 해싱되어 128 bytes로 맞춰진다.