본문으로 건너뛰기

JWT와 JWE의 차이점

JWT와 JWE의 차이점

JWT와 JWE의 차이점

JWT (JSON Web Token) - 서명 방식

목적

  • 토큰이 변조되지 않았음을 증명합니다.
  • 무결성(Integrity)을 보장합니다.

방식

  • 시크릿 키로 서명만 추가합니다.
  • 내용은 Base64로 인코딩되어 누구나 디코딩해서 볼 수 있습니다.

형식

TEXT
header.payload.signature

예시

TEXT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

3개 파트로 구성됩니다.

  1. Header: 알고리즘 정보를 담습니다.(예: HS256)
  2. Payload: 실제 데이터를 담습니다.(JSON)
  3. Signature: 서명 값을 담습니다.

검증 과정

보안 특성

  • ✅ 변조가 불가능합니다.(서명 검증)
  • ❌ 내용이 노출됩니다.(Base64는 암호화가 아닙니다.)
  • 민감한 정보를 넣지 않아야 합니다.

사용 라이브러리

  • jsonwebtoken(Node.js)
  • passport-jwt(Passport 전략)

JWE (JSON Web Encryption) - 암호화 방식

목적

  • 토큰 내용 자체를 암호화해 아무도 볼 수 없도록 합니다.
  • 기밀성(Confidentiality)을 보장합니다.

방식

  • 시크릿 키로 전체 내용을 암호화합니다.
  • 복호화 키가 없으면 내용을 볼 수 없습니다.

형식

TEXT
header.encrypted_key.iv.ciphertext.tag

예시

TEXT
eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..x2I7kZ2nsTfxVn5K.Y8F9bvLqP3KJ8nR2mZ...

5개 파트로 구성됩니다.

  1. Header: 암호화 알고리즘 정보를 담습니다.(예: dir, A256GCM)
  2. Encrypted Key: 암호화된 키를 담습니다.(direct encryption이면 비어 있습니다.)
  3. IV (Initialization Vector): 초기화 벡터를 담습니다.
  4. Ciphertext: 암호화된 실제 데이터를 담습니다.
  5. Tag: 인증 태그를 담습니다.

복호화 과정

보안 특성

  • ✅ 변조가 불가능합니다.
  • ✅ 내용을 숨깁니다.(암호화)
  • 민감한 정보도 안전하게 보호합니다.

사용 라이브러리

  • jose(Node.js)
  • NextAuth.js(기본적으로 JWE 사용)

비교 요약

항목JWT (서명)JWE (암호화)
목적무결성을 검증합니다.기밀성을 보장합니다.
내용 노출누구나 볼 수 있습니다.키가 있어야 볼 수 있습니다.
파트 개수3개입니다.5개입니다.
토큰 길이짧습니다.깁니다.
성능빠름느림 (암호화/복호화)
사용 케이스일반 인증 토큰민감 정보 포함 토큰