JWT 알고리즘

JWT 알고리즘 (JWA, RFC 7518)

JWA(JSON Web Algorithms)는 JWS·JWE·JWK에서 사용하는 암호화 알고리즘을 등록·정의하는 표준이에요. 서명, MAC, 키 관리, 콘텐츠 암호화에 쓸 수 있는 알고리즘들의 이름(alg/enc)과 그 알고리즘 식별자를 규칙에 맞게 나열해요. 구현체와 시스템 간에 알고리즘 이름만으로 호환되는 정답을 만들어 줘요.

이 스펙 덕분에 클라이언트와 서버는 같은 alg 문자열(예: RS256)을 보고 어떤 방식으로 서명·암호화했는지 정확히 알 수 있어요.

출처: https://www.rfc-editor.org/rfc/rfc7518.txt

서명 / 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 Wrap
  • PBES2-HS256+A128KW 등 — 패스워드 기반

알고리즘 보안 주의

역사적으로 RS256HS256의 혼동 공격, RSA1_5의 Bleichenbacher 공격 같은 취약점이 알려져 있어요. 서버는 반드시 허용된 알고리즘 화이트리스트로 alg를 검증하고, 안전한 최소 알고리즘(예: RS256 이상, A256GCM 등)을 쓰는 게 좋아요.

더 알아보기