JWK와 PEM 형식 이해
JWK(JSON Web Key, RFC 7517)는 암호 키를 JSON으로 표현하는 표준입니다. RSA 공개키는 {"kty":"RSA","n":"...","e":"AQAB"} 형식이며, n과 e는 Base64URL로 인코딩된 modulus·exponent입니다. 개인키는 추가로 d·p·q·dp·dq·qi가 들어갑니다. EC 키는 {"kty":"EC","crv":"P-256","x":"...","y":"..."}이며 개인키는 d를 더 포함합니다.
PEM은 ASN.1 DER 바이너리를 Base64로 감싸 텍스트화한 형식으로, -----BEGIN PUBLIC KEY-----·-----END PUBLIC KEY-----로 둘러쌉니다. 공개키는 SPKI(SubjectPublicKeyInfo), 개인키는 PKCS#8(BEGIN PRIVATE KEY)이 가장 일반적인 형식입니다. 본 도구는 SPKI/PKCS#8만 다룹니다. PKCS#1(BEGIN RSA PUBLIC KEY)은 표준에서 권장되지 않으므로 OpenSSL로 미리 변환해 주세요.
지원 알고리즘
RSASSA-PKCS1-v1_5+ SHA-256: JWT의 RS256 서명용.RSA-PSS: JWT의 PS256 등 확률적 서명.RSA-OAEP: 키 래핑·암호화 용도.ECDSA+ P-256/P-384/P-521: ES256/ES384/ES512 서명.ECDH: 키 교환.
변환 후 확인
OpenSSL로 PEM의 유효성을 확인할 수 있습니다.
- 공개키:
openssl pkey -pubin -in pub.pem -text -noout - 개인키:
openssl pkey -in priv.pem -text -noout - EC 공개키:
openssl ec -pubin -in pub.pem -text -noout
자주 묻는 질문 (FAQ)
Q. 새 키를 만들고 싶어요.
A. "새 키 쌍 생성" 버튼을 누르면 선택한 알고리즘·곡선으로 키 쌍을 만든 뒤 JWK·PEM을 함께 출력합니다. 테스트 용도로만 사용하세요.
Q. PKCS#1 RSA 키도 지원하나요?
A. Web Crypto API가 SPKI/PKCS#8만 지원하므로, PKCS#1은 먼저 openssl rsa -in pkcs1.pem -RSAPublicKey_in -pubout로 SPKI로 변환해 사용하세요.
Q. 키가 외부로 전송되나요?
A. 모든 변환은 브라우저 내에서 수행되며 네트워크 요청이 발생하지 않습니다. localStorage에도 저장되지 않습니다.