한국어
  • security
  • encryption
  • jws
  • asymmetric
  • ec
  • rsa
  • public key
  • private key
  • token
  • signing jwt

JWT 서명 알고리즘 개요

RSA와 EC라는 두 가지 가장 인기 있는 비대칭 암호화 접근 방식을 다루며, JSON 웹 토큰(JWT) 서명 알고리즘을 탐색합니다. Logto가 이러한 알고리즘을 사용하여 JWT 토큰을 보안하는 방법과 각 알고리즘의 장점과 단점을 알아보세요.

Charles
Charles
Developer

JWT란 무엇인가요?

JSON 웹 토큰(JWT)은 주장을 안전하게 표현하기 위한 간결하고 URL 안전한 방법입니다. 구조에는 헤더, 페이로드 및 서명이 포함됩니다.

오늘날 JWT는 널리 채택되어 OAuth 2.0과 OIDC에서 중요한 역할을 맡고 있습니다. 하지만 클라이언트에서 보내진 JWT를 권한 부여 서버가 어떻게 확인하고 신뢰합니까? 발급자에 의해 토큰이 어떻게 발급되고 서명됩니까? 이번 블로그 게시물에서는 비대칭 암호화에 대해 이야기하고 Logto에서 JWT 토큰에 사용하는 다양한 서명 알고리즘의 장점과 단점을 자세히 살펴보겠습니다.

JWT 구조

Logto는 ID 토큰과 액세스 토큰 모두를 포함하여 모든 JWT 토큰에 서명을 합니다. 서명이 된 JWT는 또한 JWS (JSON 웹 서명)라고도 불립니다. 서명이 된 JWT 구조는 점(.)으로 구분된 세 부분인 헤더, 페이로드 및 서명으로 구성되어 있습니다.

JOSE (JSON 개체 서명 및 암호화) 헤더

헤더는 일반적으로 다음 부분들로 구성됩니다:

  • typ: 토큰의 유형으로, JWT입니다.
  • alg: 사용 중인 서명 알고리즘으로, RS256 또는 ES384 같은 것이 있습니다.
  • kid: JWT를 보안하는 데 사용된 키를 나타내는 힌트입니다.

페이로드

페이로드는 주장을 포함하며, 이는 개체(보통 사용자)에 관한 설명과 추가 데이터를 나타냅니다. 예를 들어 ID 토큰은 다음과 같은 주장을 포함할 수 있습니다:

서명

서명은 JWT의 발신자가 위조자가 아님을 확인하고 메시지가 조작되지 않았음을 검증하는 데 사용됩니다. 서명이 된 JWT를 사용할 때, 토큰의 무결성을 보장하기 위해 서명을 꼭 검증해야 합니다. API를 보호하기 위해 JWT 토큰을 검증하는 방법에 대한 이 가이드를 확인하세요.

비대칭 암호화란 무엇인가요?

비대칭 암호화는 공개 키와 개인 키라는 서로 관련된 고유한 키 쌍을 사용하는 컴퓨터 보안 및 암호학의 기초적인 개념을 말하며, 공개 키 암호화로도 알려져 있습니다.

공개 키와 개인 키의 정의

  • 공개 키: 이름에서 알 수 있듯이 공개 키는 공개 공유를 위한 것입니다. JWT와 유사한 시스템의 맥락에서 공개 키는 서명 검증에 사용되며, 암호화에는 사용되지 않습니다. 데이터가 개인 키로 서명되고 수신자가 해당되는 공개 키를 가지고 있으면, 수신자는 데이터가 개인 키 소유자에 의해 서명되었으며 전송 중에 조작되지 않았음을 확인할 수 있습니다.
  • 개인 키: 그에 반해 개인 키는 주로 소유자만 알아야 하는 비밀로 유지되어야 합니다. JWT의 맥락에서 개인 키는 디지털 서명을 생성하는 데 사용되며, 이는 공개 키에 접근할 수 있는 누구나 검증할 수 있습니다.

이러한 키의 독특한 배열은 디지털 세상에서 안전한 데이터 전송 및 사용자 인증 메커니즘의 기초를 형성합니다. 자세한 내용은 이 블로그 게시글을 확인하세요.

인기 있는 JWT 서명 키 알고리즘: RSA 대 EC

RSA (Rivest-Shamir-Adelman)EC (Elliptic Curve) 알고리즘은 비대칭 암호화에서 가장 많이 사용되는 ‘수학적 기능’ 중 두 가지입니다.

개발자로서, 우리는 auth 프레임워크와 그 JWT를 다룰 때 이 알고리즘 중 하나를 선택해야 할 때가 많습니다. 그러나 어떤 것을 선택해야 할까요? 각 알고리즘의 장점과 단점을 살펴보겠습니다.

RSA 서명 알고리즘 (예: RSASHA256)

  • 장점:
    1. 폭넓은 지원: RSA는 다양한 플랫폼과 라이브러리에서 널리 지원되어, 다양한 환경에서의 호환성을 보장합니다.
    2. 오랜 트랙 기록: RSA는 신뢰할 수 있는 보안을 오래도록 제공해 왔으며, 암호학 커뮤니티에 잘 알려진 알고리즘입니다.
  • 단점:
    1. 키 크기: RSA 키는 EC와 같은 수준의 보안을 달성하기 위해 더 길어져야 하기 때문에, 토큰 크기가 커지고 계산 부담이 증가합니다.
    2. 성능: RSA 연산은 EC보다 느릴 수 있어, 트래픽이 많은 애플리케이션에서는 단점이 될 수 있습니다.

EC 서명 알고리즘 (예: ECDSASHA384)

  • 장점:
    1. 효율성: EC는 RSA에 비해 뛰어난 성능을 자랑하여, 리소스가 제한된 애플리케이션이나 트래픽이 많은 환경에 이상적입니다.
    2. 압축된 키 크기: EC 키는 RSA 키에 비해 훨씬 짧으면서도 동일한 보안 수준을 제공합니다. 이는 저장 공간 및 네트워크 요구사항을 줄이고 암호화 연산을 가속화합니다.
    3. 보안: EC는 타원 곡선의 복잡한 수학에 의해 강화된 견고한 보안 덕에, 무차별 공격에 강합니다.
  • 단점:
    1. 제한된 지원: 일부 구형 시스템과 라이브러리는 EC에 대한 포괄적인 지원이 부족할 수 있어, 호환성 문제가 발생할 수 있습니다. 예를 들어, Cloudflare Zero Trust는 EC 서명 토큰을 지원하지 않습니다.
    2. 복잡성: EC를 구현하려면 수학적 복잡성으로 인해 더 복잡할 수 있습니다.

Logto의 JWT 서명 알고리즘 선택

Logto는 항상 최고 수준의 보안과 유연성을 고수해왔고, 가장 현대적이고 성능이 뛰어난 솔루션을 핵심에 사용하려고 합니다. EC는 견고한 보안과 연산 효율성의 우승 조합을 제공하여, 현대 인증 및 권한 부여 필요에 완벽하게 적합합니다. 따라서 EC는 제품 개발 초기부터 우리의 기본 서명 키 알고리즘으로 사용되었습니다.

그러나 일부 타사 시스템 및 프레임워크, 특히 구형 시스템과의 비호환성을 인식했고, 따라서 JWT 서명 키 알고리즘을 개인 키를 회전하는 기능을 도입했습니다.

개인 키를 회전하는 Logto 콘솔 UI 스크린샷

불지원 되는 JWT 서명 알고리즘 때문에 타사 플랫폼에 연결할 수 없는 문제가 발생한다면, 이제 새로운 개인 키를 위해 RSA 알고리즘을 선택하여 회전할 때입니다.

이 기능은 장기 키 노출 또는 손상의 위험을 완화하는 데에도 도움이 됩니다. 주기적으로 개인 키를 회전하는 것은 모든 조직의 보안 전략에서 필수적인 관행이어야 하며, Logto가 강력히 권장합니다.

요약: 일반적으로 사용되는 JWT 서명 알고리즘: RSA와 EC

JWT 토큰에 서명하는 것은 전송되는 데이터의 무결성과 진정성을 보장합니다. 서명 알고리즘의 선택은 애플리케이션의 보안, 성능 및 호환성에 큰 영향을 미칠 수 있습니다.

RSA와 EC 알고리즘 모두 암호학에서 필수적이며 인기 있는 알고리즘입니다. 이러한 알고리즘의 장단점과 수학적 원리를 이해하면, 인증 및 권한 부여 프레임워크와 함께 작동하는 애플리케이션을 위한 더 나은 선택을 할 수 있습니다.

Logto는 더 안전하고 견고한 사용자 경험을 계속 탐색하고 제공할 것입니다.