HS256과 RS256: 대칭 및 비대칭 JWT
인증 시스템에 적합한 서명 알고리즘을 선택합니다.
HS256과 RS256: 대칭 및 비대칭 JWT은(는) CoddyKit의 무료 Cryptology Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cryptology Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
알고리즘 계열
JWT 서명에는 대칭(HMAC) 또는 비대칭(RSA, ECDSA) 알고리즘을 사용합니다. HS256 = HMAC-SHA256, RS256 = RSA-PKCS1v1.5-SHA256, ES256 = ECDSA-P-256-SHA256입니다. 선택에 따라 키 배포 방식과 신뢰 모델이 달라집니다.
HS256: 대칭 HMAC
HS256은 서명과 검증에 하나의 공유 비밀 키를 사용합니다. 발급자와 모든 검증자가 동일한 비밀을 보유해야 합니다. 구현은 간단하지만 모든 검증자에게 키를 안전하게 배포해야 합니다.
HS256 사용 사례
발급자와 검증자가 동일한 서비스일 때 HS256이 적합합니다(예: 모놀리식 API가 자체 토큰에 서명하고 검증하는 경우). 여러 독립 서비스가 토큰을 검증해야 한다면 HS256을 사용하지 마십시오. 모든 서비스가 비밀을 보유해야 하기 때문입니다.
RS256: 비대칭 RSA
RS256은 개인 키로 서명하고 공개 키로 검증합니다. 인증 서버만 개인 키를 보유합니다. 모든 리소스 서버는 JWKS 엔드포인트에서 공개 키를 가져와 로컬에서 검증하므로 비밀을 공유할 필요가 없습니다.
RS256 사용 사례
RS256은 마이크로서비스 아키텍처에 적합합니다. IDP가 토큰에 서명하고 각 하위 서비스가 요청마다 IDP에 연락하지 않고 공개 키로 검증합니다. 키를 배포할 때 발생하는 위험 없이 수평으로 확장할 수 있습니다.
ES256: ECDSA 대안
ES256은 P-256을 기반으로 ECDSA를 사용합니다. 서명 크기는 2048비트 키를 사용하는 RS256의 256바이트에 비해 64바이트입니다. 검증 속도는 RS256보다 약 10배 빠릅니다. 대역폭이나 검증 속도가 중요한 경우(모바일 API, IoT)에 선호됩니다.
키 교체
RS256/ES256의 경우 JWKS에 새 키(새 kid)를 게시하고, 새 키로 새 토큰에 서명하고, 기존 토큰이 만료될 때까지 유예 기간을 둔 다음 기존 키를 제거하여 키를 교체합니다. HMAC 키 교체에는 새 비밀키를 다시 배포해야 합니다.
성능 비교
HS256 검증: 약 1 µs입니다. RS256 검증: 약 100 µs(2048비트)입니다. ES256 검증: 약 50 µs(P-256)입니다. HS256이 가장 빠르지만 비밀키를 공유해야 합니다. ES256은 분산 시스템에서 보안과 성능의 균형이 가장 좋습니다.
alg 헤더 공격 미리 보기
치명적인 취약점이 있습니다. 검증기가 alg 헤더를 무조건 신뢰하면 공격자가 alg를 RS256에서 HS256으로 바꾸고, 서버의 공개 키(공개되어 있음)를 HMAC 비밀키로 사용해 토큰에 서명할 수 있습니다. 해결 방법은 alg 헤더를 절대 신뢰하지 않는 것입니다.
알고리즘 선택
결정 기준: 단일 서비스 → HS256입니다. 다중 서비스/마이크로서비스 → RS256 또는 ES256입니다. 대규모 모바일 트래픽 → ES256입니다. 확실하지 않다면 ES256(P-256) 또는 2048비트 이상의 키를 사용하는 RS256을 사용하십시오. 성능이 중요한 경로에서는 RS512를 절대 사용하지 마십시오.
라이브러리와 표준
PyJWT(파이썬), jose(Node.js) 또는 auth0/java-jwt를 사용하십시오. 검증 호출에서 예상 알고리즘을 항상 고정하십시오: jwt.decode(token, secret, algorithms=["HS256"]). algorithms=None을 전달하거나 매개변수를 생략하지 마십시오.
빠른 확인
마이크로서비스 아키텍처에서 HS256보다 RS256을 선호하는 이유는 무엇입니까?
요약
HS256은 대칭형(공유 비밀키)이고, RS256/ES256은 비대칭형(개인 키로 서명하고 공개 키로 검증)입니다. 다자간 시스템에는 비대칭 알고리즘을 사용하십시오. 다음 주제: JWT 취약점 악용입니다.
자주 묻는 질문
“HS256과 RS256: 대칭 및 비대칭 JWT” 강의는 무료인가요?
네 — “HS256과 RS256: 대칭 및 비대칭 JWT” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cryptology Academy 강의 전체를 잠금 해제할 수 있습니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“HS256과 RS256: 대칭 및 비대칭 JWT”에서 뭘 배우나요?
인증 시스템에 적합한 서명 알고리즘을 선택합니다. 브라우저에서 직접 실행하는 실습 코드로 Cryptology Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cryptology Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cryptology Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“HS256과 RS256: 대칭 및 비대칭 JWT” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cryptology Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cryptology Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- JWT 구조: 헤더, 페이로드, 서명
- HS256과 RS256: 대칭 및 비대칭 JWT
- JWT 취약점: alg=none 및 키 혼동
- 안전한 JWT 구현 모범 사례