JWT 알고리즘
JWT 알고리즘 (JWA, RFC 7518)
JWA(JSON Web Algorithms)는 JWS·JWE·JWK에서 사용하는 암호화 알고리즘을 등록·정의하는 표준이에요. 서명, MAC, 키 관리, 콘텐츠 암호화에 쓸 수 있는 알고리즘들의 이름(alg/enc)과 그 알고리즘 식별자를 규칙에 맞게 나열해요. 구현체와 시스템 간에 알고리즘 이름만으로 호환되는 정답을 만들어 줘요.
이 스펙 덕분에 클라이언트와 서버는 같은 alg 문자열(예: RS256)을 보고 어떤 방식으로 서명·암호화했는지 정확히 알 수 있어요.
서명 / MAC 알고리즘
JWS에서 alg로 쓰는 디지털 서명·MAC 알고리즘 목록이에요.
| alg | 알고리즘 | 키 타입 |
|---|---|---|
HS256 |
HMAC using SHA-256 | oct (대칭) |
HS384 |
HMAC using SHA-384 | oct |
HS512 |
HMAC using SHA-512 | oct |
RS256 |
RSASSA-PKCS1-v1_5 using SHA-256 | RSA |
RS384 |
RSASSA-PKCS1-v1_5 using SHA-384 | RSA |
RS512 |
RSASSA-PKCS1-v1_5 using SHA-512 | RSA |
ES256 |
ECDSA using P-256 and SHA-256 | EC |
ES384 |
ECDSA using P-384 and SHA-384 | EC |
ES512 |
ECDSA using P-521 and SHA-512 | EC |
PS256 |
RSASSA-PSS using SHA-256 and MGF1 with SHA-256 | RSA |
PS384 |
RSASSA-PSS using SHA-384 | RSA |
PS512 |
RSASSA-PSS using SHA-512 | RSA |
EdDSA |
Edwards-curve DSA (Ed25519/Ed448) | OKP |
콘텐츠 암호화 알고리즘
JWE에서 enc로 쓰는 대칭 콘텐츠 암호화 알고리즘이에요. *CBC-HS*는 AES-CBC로 암호화한 뒤 HMAC으로 인증 태그를 만드는 '암호화+인증(Encrypt-then-MAC)' 방식이고, GCM은 인증 암호화(AEAD)예요.
| enc | 알고리즘 |
|---|---|
A128CBC-HS256 |
AES-128-CBC + HMAC-SHA-256 |
A192CBC-HS384 |
AES-192-CBC + HMAC-SHA-384 |
A256CBC-HS512 |
AES-256-CBC + HMAC-SHA-512 |
A128GCM |
AES-128-GCM |
A192GCM |
AES-192-GCM |
A256GCM |
AES-256-GCM |
키 관리 알고리즘
JWE에서 alg로 쓰는 키 관리(키 래핑·교환) 알고리즘이에요.
ECDH-ES— ECDH 직접 키 합의(직접 CEK 생성)ECDH-ES+A128KW,ECDH-ES+A192KW,ECDH-ES+A256KW— ECDH 후 AES-Key Wrap으로 CEK 래핑RSA-OAEP,RSA-OAEP-256,RSA1_5— RSA로 CEK를 감씀dir— 직접 대칭 키(CEK = KEK)A128KW,A192KW,A256KW— AES-Key WrapPBES2-HS256+A128KW등 — 패스워드 기반
알고리즘 보안 주의
역사적으로 RS256과 HS256의 혼동 공격, RSA1_5의 Bleichenbacher 공격 같은 취약점이 알려져 있어요. 서버는 반드시 허용된 알고리즘 화이트리스트로 alg를 검증하고, 안전한 최소 알고리즘(예: RS256 이상, A256GCM 등)을 쓰는 게 좋아요.