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

JWT 에서 EC 및 RSA 서명 알고리즘 소개

비대칭 암호화의 필수 요소를 배우고, 두 가지 인기 있는 JWT 서명 키 알고리즘 - EC와 RSA의 장단점을 이해하세요.

Charles
Charles
Developer

배경

디지털 세계에서는 데이터 전송 보안을 강화하기 위한 노력이 계속해서 발전하고 있습니다. 요즘은 JSON 웹 토큰 (JWT)이 널리 채택되어 OAuth 2.0과 OIDC에서 중요한 역할을 하고 있습니다. 하지만 어떻게 인증 서버가 클라이언트로부터 보내진 JWT 토큰을 검증하고 신뢰할 수 있을까요? 토큰은 어떻게 발행되고 발행자에 의해 서명될까요? 이번 블로그 글에서는 비대칭 암호화에 대해 이야기하고 Logto가 JWT 토큰에서 사용하는 다양한 서명 알고리즘의 장단점을 살펴보겠습니다.

비대칭 암호화 이해하기

비대칭 암호화, 또는 공개키 암호화로도 알려진 이 개념은 컴퓨터 보안과 암호화에서 기본적인 개념이며, 서로 관련된 고유한 키 쌍: 공개 키와 개인 키를 사용합니다. 이러한 키의 역할은 처음에는 직관적이지 않을 수 있지만, 데이터 보안에 필수적입니다.

  • 공개 키: 이름 그대로 공개적으로 공유하기 위해 설계된 공개 키입니다. JWT 및 유사 시스템의 맥락에서, 공개 키는 암호화가 아닌 서명 검증에 사용됩니다. 데이터가 개인 키로 서명되고 수신자가 해당 공개 키를 소유한 경우, 그들은 데이터가 실제로 개인 키 소유자에 의해 서명되었고 전송 중에 변조되지 않았음을 검증할 수 있습니다. 그러나 HTTPS와 같은 전통적인 비대칭 암호화 사용에서는 공개 키가 암호화에 사용되며, 암호화된 데이터는 쌍으로 된 개인 키를 보유한 대상 서버만이 복호화할 수 있습니다.
  • 개인 키: 반대로, 개인 키는 정당한 소유자에게만 알려져야 하는 비밀로 철저히 보호되어야 합니다. JWT의 맥락에서는, 개인 키는 누구라도 해당 공개 키에 액세스할 수 있는 디지털 서명을 생성하는 데 사용됩니다. 또한, 보다 전통적인 비대칭 암호화의 맥락에서, 개인 키는 실제로 디지털 서명을 생성하고 암호화된 데이터에 대한 접근을 허용하는 데 사용됩니다.

이러한 키의 고유한 배열은 데이터가 서명되거나 암호화되는 방식에서 보안 데이터 전송 및 사용자 인증 메커니즘의 근본을 형성합니다. 더 자세한 내용은 이 블로그 글을 확인하세요.

비대칭 암호화 알고리즘: RSA vs EC

RSA (Rivest-Shamir-Adelman)EC (Elliptic Curve) 알고리즘은 비대칭 암호화에서 가장 일반적으로 사용되는 두 가지 “수학 함수”입니다. 개발자로서 우리는 인증 프레임워크와 그 JWT를 다룰 때 종종 이러한 알고리즘 중 하나를 선택해야 합니다. 그러나 어떤 것을 선택해야 할까요? 각 알고리즘의 장단점을 살펴보겠습니다.

RSA 서명 알고리즘

  • 장점:
    1. 광범위한 지원: RSA는 다양한 플랫폼과 라이브러리에서 널리 지원되어 다양한 환경에서 호환성을 보장합니다.
    2. 오랜 역사: RSA는 신뢰성 있는 보안성과 오랜 역사를 가지고 있으며, 그 알고리즘은 암호학 커뮤니티에 잘 알려져 있습니다.
  • 단점:
    1. 키 크기: RSA 키는 동일한 수준의 보안을 달성하기 위해 EC보다 길어야 하므로 토큰 크기가 커지고 계산 오버헤드가 증가합니다.
    2. 성능: RSA 연산은 EC보다 느린 경향이 있어 고트래픽 응용 프로그램에서는 단점이 될 수 있습니다.

EC 서명 알고리즘

  • 장점:
    1. 효율성: EC는 RSA에 비해 뛰어난 성능을 자랑하며, 리소스 제한이 있거나 높은 트래픽 부하의 응용 프로그램에 이상적입니다.
    2. 압축된 키 크기: EC 키는 같은 보안 수준을 제공하면서 RSA 키보다 훨씬 짧습니다. 이를 통해 저장 및 네트워크 요구사항이 줄어들고 암호화 연산이 가속화됩니다.
    3. 보안: EC는 타원 곡선의 복잡한 수학에 의해 강력한 보안을 제공하며, 무차별 공격에 대해 탄탄한 내성을 가지고 있습니다.
  • 단점:
    1. 제한된 지원: 일부 오래된 시스템 및 라이브러리는 포괄적인 EC 지원을 제공하지 않아 호환성 문제가 있을 수 있습니다. 예를 들어, Cloudflare Zero Trust는 EC 서명된 토큰을 지원하지 않습니다.
    2. 복잡성: EC를 구현하려면 수학적 복잡성 때문에 더 복잡할 수 있습니다.

Logto의 JWT 서명 알고리즘 선택

Logto는 항상 최고의 보안 및 유연성 표준을 설정하고, 가장 현대적이고 성능이 뛰어난 솔루션을 핵심으로 삼으려 합니다. EC는 강력한 보안과 계산 효율성을 결합해 현대 인증 및 권한 부여 요구에 완벽하게 들어맞습니다. 따라서 EC는 우리의 제품 초기 단계부터 기본 서명 키 알고리즘으로 사용되었습니다.

그러나 오랜 시간, 사용자의 피드백을 받았으며, EC 서명된 토큰이 일부 타사 시스템 및 프레임워크, 특히 레거시 시스템과 호환되지 않는다는 것을 알게 되었습니다. 따라서 Logto는 모든 인증 요구를 충족할 수 있도록 RSA 알고리즘 지원을 제공하기 위해 노력하고 있습니다.

다음 릴리스에서 Logto Cloud는 “개인 키 회전” 기능을 도입할 것이며, 이를 통해 테넌트에 새 OIDC 개인 키 및 쿠키 키를 생성할 수 있습니다. (개인 키는 JWT 토큰 서명에, 쿠키 키는 쿠키 서명에 사용됩니다.)

OIDC 키 회전 콘솔 UI 스크린샷

이 기능은 장기적인 키 노출 또는 타협과 관련된 위험을 완화하는 데 도움이 됩니다. 정기적으로 개인 키를 교체하는 것은 어떤 조직의 보안 전략에서도 기본적인 실천이 되어야 하며, Logto는 이를 강력히 추천합니다.

또한, JWT 서명 키를 회전할 때, EC와 RSA 사이에서 서명 키 알고리즘을 선택할 수 있는 옵션도 제공할 것입니다. 지원되지 않는 JWT 서명 알고리즘 때문에 서드파티 플랫폼에 연결할 수 없는 문제가 있다면, 이제 회전하고 새로운 개인 키에 대해 RSA 알고리즘을 선택할 시간입니다.

이 설정은 테넌트 설정 페이지에 있으므로, UI는 OSS 사용자에게는 제공되지 않습니다. 하지만 걱정하지 마세요. 최신 릴리스로 업그레이드하고 Logto 루트 디렉토리에서 다음 CLI 명령을 실행하여 이를 달성할 수 있습니다.

요약

비대칭 암호화는 인증 시스템에서 JWT 토큰을 보호하는 데 도움을 줍니다. EC와 RSA 알고리즘은 암호학에서 필수적이고 인기 있는 알고리즘입니다. 이 알고리즘 뒤에 있는 장단점과 수학적 원리를 이해하면, 인증 및 권한 부여 프레임워크와 함께 작동하도록 응용 프로그램에 대한 더 나은 결정을 내릴 수 있습니다.

Logto는 더 안전하고 강력한 사용자 경험을 위해 지속적으로 탐색하고 솔루션을 제공합니다.