키쌍 생성기 (RSA·EC·Ed25519)
브라우저에서 RSA·ECDSA·ECDH·Ed25519·X25519 키쌍을 생성하고 PKCS#8/SPKI PEM 또는 JWK로 내보냅니다.
사용법
- 알고리즘을 고릅니다. P-256 위의 ECDSA가 좋은 기본값이고, 상대가 지원하면 Ed25519, 무언가가 요구하면 RSA입니다.
- RSA라면 모듈러스 길이와 해시, 그리고 서명용인지 OAEP 암호화용인지를 정합니다.
- 생성을 누르고 필요한 것을 복사합니다. 남에게 줄 공개 SPKI PEM, 보관할 개인 PKCS#8 PEM이나 JWK입니다.
자세한 설명
펼치기접기
알고리즘을 고르고 단추를 누르면, 실제 도구들이 요구하는 네 가지 형태로 새 키쌍이 나옵니다. 개인키는 PKCS#8 PEM, 공개키는 SPKI PEM, 그리고 둘 다 JWK로도 나옵니다. 생성은 브라우저 자체의 WebCrypto가 하므로 개인키는 이 페이지 안에서 만들어지고 네트워크를 건너가지 않습니다. 그 말은 탭을 닫는 순간 사라진다는 뜻이기도 하니, 떠나기 전에 복사해 두십시오.
사람들이 놀라는 세부가 하나 있습니다. RSA의 경우 내보낸 키에는 무엇에 쓸 생각이었는지가 기록되지 않습니다. PKCS#1 v1.5 서명, PSS 서명, OAEP 암호화 중 무엇을 고르든 키를 만드는 WebCrypto 알고리즘은 달라지지만, 세 경우 모두 rsaEncryption 객체 식별자로 내보내집니다. 그래서 openssl asn1parse는 이들을 평범한 RSA 키로 읽고 PEM 파일은 구조적으로 똑같습니다. 의도는 JWK에만 남아 alg: "RS256"이나 alg: "PS256"이라는 힌트가 됩니다. 패딩을 고정하는 키 파일이 필요하다면, 그것은 키의 성질이 아니라 그 주위의 인증서나 프로토콜의 성질입니다.
어떤 알고리즘을 쓸지는 대개 상대편이 무엇을 받아 주는가의 문제입니다. Ed25519는 32바이트 공개키와 빠른 서명, 그리고 틀릴 여지가 있는 매개변수가 없다는 장점이 있어서 SSH와 현대 프로토콜이 선호합니다. 다만 브라우저 지원이 시기마다 달라서, 여기서는 브라우저가 만들 수 없을 때 조용히 실패하는 대신 그 사실을 분명히 알려 줍니다. P 계열 곡선은 안전한 상호운용 기본값이며 P-256이면 거의 모든 경우에 충분합니다. RSA는 오래된 무언가가 고집할 때 쓰는 것이고 비용이 드러납니다. 4096비트 키는 생성에 수 초가 걸리는데 P-256은 즉시이고, 공개키 크기는 서른 배입니다.
두 쪽을 혼동하지 마십시오. SPKI PEM은 -----BEGIN PUBLIC KEY-----로 시작하며 남에게 건네는 쪽이고, PKCS#8 PEM은 -----BEGIN PRIVATE KEY-----로 시작하며 개인 스칼라나 RSA 소수를 담고 있습니다. 여기서 개인키에는 암호가 걸리지 않습니다. WebCrypto의 내보내기에 암호화 선택지가 없기 때문입니다. 필요하다면 나중에 openssl pkcs8 -topk8 -v2 aes-256-cbc를 통과시키십시오.
자주 묻는 질문
PKCS#1 키와 PSS 키가 똑같아 보이는 이유는?
파일로서는 실제로 똑같기 때문입니다. WebCrypto는 어떤 패딩을 요청했든 모든 RSA 키를 rsaEncryption 알고리즘 식별자로 내보내므로, PEM에는 의도한 방식의 기록이 남지 않습니다. openssl asn1parse도 둘에 같은 OID를 보여 줍니다. 다른 것은 JWK뿐이고 거기서 alg 필드가 RS256이나 PS256이라고 말합니다. 패딩은 서명을 검증하는 쪽이 정하는 것이며 키가 정하는 것이 아닙니다.
여기서 개인키를 생성해도 안전합니까?
브라우저가 생성하고 어디로도 보내지 않으며, 그래서 이 페이지는 오프라인에서도 동작합니다. 다만 진지하게 보호할 키의 대체물은 아닙니다. 값이 브라우저 탭에 있고 클립보드를 거치며 암호가 걸려 있지 않습니다. 버리는 시험용 키나 곧 비밀 관리 도구에 넣을 JWT 서명 키라면 괜찮습니다. 오래 쓰는 루트 키라면 그 키를 보관할 기계에서 생성하십시오.
개인키에 암호를 어떻게 거나요?
여기서는 못 합니다. WebCrypto에 암호화 내보내기 선택지가 없어서 이 페이지의 PKCS#8 PEM은 늘 암호가 없습니다. 나중에 openssl을 통과시키십시오. openssl pkcs8 -topk8 -v2 aes-256-cbc -in key.pem -out key.enc.pem입니다. 같은 키를 PKCS#8 암호화 형태로 감싸 주는데, 서버가 암호를 물을 때 기대하는 것이 대개 그 형태입니다.
Ed25519를 생성할 수 없는 이유는?
브라우저가 아직 구현하지 않았기 때문입니다. Ed25519와 X25519는 P 계열 곡선보다 훨씬 나중에 WebCrypto에 규정되었고 엔진마다 도입 시기가 달랐으므로, 최신 브라우저여도 거부할 수 있습니다. 이 도구는 빈 결과를 보여 주는 대신 그 경우를 분명히 알립니다. 상호운용 대안은 P-256입니다.
이것으로 SSH 키를 만들 수 있습니까?
Ed25519와 RSA라면 키 재료는 맞지만 형식이 맞지 않습니다. OpenSSH는 개인키에 자기 고유의 -----BEGIN OPENSSH PRIVATE KEY----- 컨테이너를, 공개키에는 한 줄짜리 ssh-ed25519 AAAA… 형태를 원합니다. 공개키 쪽은 ssh-keygen -i -m PKCS8 -f key.pub로 변환하십시오. 개인키 쪽은 애초에 ssh-keygen -t ed25519를 돌리는 편이 대개 일이 적습니다.
관련 도구
JWK ↔ PEM 변환기
JWK이나 JWKS 전체를 PEM 공개키로, 또는 그 반대로 변환하고 각 키의 RFC 7638 thumbprint까지 브라우저에서 계산합니다.
개발
Ed25519 서명·검증 (RFC 8032)
브라우저에서 Ed25519 키로 메시지에 서명하거나 서명을 검증하고, 시드에서 나온 공개 키와 R·S 값을 함께 봅니다.
개발
SSH 공개키 검사기
SSH 공개키와 authorized_keys, known_hosts 줄을 해석합니다. 알고리즘, 키 길이, SHA256·MD5 지문, 주석과 옵션을 보여 줍니다.
개발
HKDF 키 유도 (RFC 5869, 추출·확장)
HKDF로 키를 유도하고 두 단계를 모두 봅니다. 추출 단계의 PRK, 확장 단계의 T 블록, hex와 base64 OKM. RFC 5869 케이스 내장.
개발
AES-GCM 암복호화 (키·논스·AAD)
브라우저에서 AES-GCM으로 암복호화합니다. hex 키와 논스, 선택적 AAD, 태그 길이 선택, 그리고 암호문과 태그를 분리해 보여 줍니다.
개발
PKCS#12 키스토어 분석기
.p12/.pfx를 브라우저에서 엽니다. 비밀번호 없이 MAC과 암호 알고리즘을, 입력 후에는 인증서 체인·개인 키·키 일치 여부를 보여줍니다.
개발