Skip to content

무료 온라인 RSA 키 쌍 생성기 — ECDSA와 Ed25519

온라인 RSA 키 쌍 생성기. 개인 키는 브라우저에 머뭅니다. 2048/4096·ECDSA·Ed25519, PKCS#8·PKCS#1 PEM.

트래킹 없음 브라우저 실행 무료
키 쌍은 브라우저 안에서 Web Crypto API로 생성되며, 생성하는 동안 네트워크 요청은 일어나지 않습니다. 연결을 끊어도 이 페이지는 그대로 동작합니다.

PKCS#8(BEGIN PRIVATE KEY)이 현대적인 기본값이며 JDK가 기대하는 형식입니다. PKCS#1(BEGIN RSA PRIVATE KEY)은 OpenSSL의 전통적 형식으로, 일부 게이트웨이가 여전히 요구합니다. 전환해도 같은 키를 다시 인코딩할 뿐입니다.

비밀로 유지하세요. 이 키를 가진 사람은 누구나 사용자를 사칭할 수 있습니다.

공개 키 지문 — SPKI DER의 SHA-256
JWK(JSON Web Key)
개인 JWK — 절대 게시하지 마십시오
 
공개 JWK
 

OpenSSL로 같은 종류의 키 쌍 생성

RFC 5958/5208(PKCS#8), RFC 8017(PKCS#1), RFC 8410(Ed25519), RFC 7468 PEM 인코딩의 정확성과 RSA·ECDSA·Ed25519 전반의 Web Crypto API 동작을 검토했습니다. — Go Tools 보안 도구팀 · Aug 10, 2026

저희 팀은 PKCS#8에서 PKCS#1로의 변환을 Node crypto 모듈의 기준 출력과 바이트 단위로 대조해 검증하므로, 여기서 내보낸 키는 같은 재료에 대해 OpenSSL이 만들어 낼 키와 동일합니다.

RSA 키 생성기란?

RSA 키 생성기는 수학적으로 짝지어진 한 쌍 — 사용자가 보관하는 개인 키와 남에게 건네는 공개 키 — 을 만듭니다. 개인 키 쪽으로 서명한 것은 공개 키 쪽으로 검증할 수 있으며, 공개해도 안전한 것은 공개 키 쪽뿐입니다. 이 비대칭성이 핵심입니다. 덕분에 검증자는 위조 능력을 얻지 않은 채 서명을 확인할 수 있는데, 공유 비밀로는 결코 할 수 없는 일입니다.

이 생성기는 Web Crypto API를 통해 브라우저 안에서 동작하므로 개인 키는 탭 안에서 만들어지고, 생성하는 동안 페이지는 어떤 네트워크 요청도 보내지 않습니다. RSA 외에 ECDSA와 Ed25519 키 쌍도 생성하며, 이들은 훨씬 짧은 키로 같은 목적을 수행합니다. Ed25519 개인 키는 PKCS#8로 48바이트인 반면, 2048비트 RSA 키는 1.2 KB를 넘어갑니다.

사람들이 걸려 넘어지는 지점은 수학이 아니라 포장입니다. 같은 키를 PKCS#8, PKCS#1, SPKI, JWK로 적을 수 있는데, 한쪽을 거부하는 라이브러리가 파싱 오류보다 친절한 메시지 없이 다른 쪽만 받아들이는 일이 흔합니다. 아래 표가 각 컨테이너를 그것을 기대하는 생태계에 대응시켜 줍니다.

// Verify a downloaded key pair matches, using OpenSSL:
openssl pkey -in rsa-2048-private.pem -pubout | diff - rsa-2048-public.pem
// No output means the public key really belongs to that private key.

주요 기능

브라우저 안에서 생성됩니다

키는 사용자 탭 안의 Web Crypto API에서 나오며, 생성하는 동안 페이지는 어떤 네트워크 요청도 보내지 않습니다. 연결을 끊어도 계속 동작하는데, 이는 이 도구가 제 일을 하는 데 서버가 필요 없다는 것을 보여 줍니다.

RSA, ECDSA, Ed25519

RSA 2048·3072·4096, P-256·P-384·P-521 곡선의 ECDSA, 그리고 Ed25519를 한 페이지에서 같은 내보내기 옵션으로 다룹니다.

PKCS#8과 PKCS#1 출력

OpenSSL을 건드리지 않고 BEGIN PRIVATE KEY와 전통적인 BEGIN RSA PRIVATE KEY 구조를 오갈 수 있습니다. 스위치는 화면에 이미 있는 키를 다시 인코딩하므로 여전히 같은 키입니다.

JWK 내보내기

양쪽 절반 모두 JSON Web Key로 나옵니다. JWKS 문서나 JOSE 검증자에 들어가는 것은 공개 JWK이며, 개인 JWK는 서명하는 쪽만 쓰고 절대 게시해서는 안 됩니다.

SHA-256 지문

모든 키 쌍에 공개 키 지문이 함께 나오므로, 양쪽이 같은 키를 갖고 있는지 별도 채널로 검증할 수 있습니다.

대응하는 OpenSSL 명령

같은 종류의 키를 로컬에서 생성하는 대응 명령이 출력 아래에 표시되어, 원할 때 언제든 명령줄로 옮겨 갈 수 있습니다.

알아보기 쉬운 이름으로 다운로드

파일은 이름을 다시 바꿔야 하는 일반적인 다운로드 이름이 아니라 rsa-2048-private.pem, rsa-2048-public.pem으로 저장됩니다.

계정도 사용량 제한도 없음

서버가 관여하지 않으므로 가입할 것도, 소진할 할당량도 없습니다.

실전 예시

Ed25519 키 쌍 전체

알고리즘: Ed25519
-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIA2HJVU1qChbOJN8XksXVhyD0IjYVt0UU6Mwz814rOFf
-----END PRIVATE KEY-----

-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAV5uB7UaPJrtncx3SXNtNzn1ZXjF1ApwvzBZ8nFzT5eU=
-----END PUBLIC KEY-----

Ed25519 개인 키는 PKCS#8로 48바이트, 공개 키는 44바이트라 각 PEM이 base64 한 줄로 끝납니다. 이것은 일회용 시연 키 쌍입니다 — 복사해 쓰지 말고 직접 생성하세요.

PKCS#8과 PKCS#1은 헤더가 다릅니다

알고리즘: RSA 2048, 구조 전환
PKCS#8:  -----BEGIN PRIVATE KEY-----
PKCS#1:  -----BEGIN RSA PRIVATE KEY-----

같은 키, 두 가지 포장입니다. PKCS#8은 RSA 구조 바깥에 알고리즘 식별자를 덧씌우며, 그래서 모든 알고리즘에 통하는 반면 PKCS#1은 RSA 전용으로만 존재합니다. 스위치를 전환하면 화면에 이미 있는 키를 다시 인코딩할 뿐이므로 지문은 바뀌지 않습니다.

RSA 2048 공개 키

알고리즘: RSA 2048
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni
eSccN1uleXFRBb1g2TN6bk/fbpPCGDyh71m73oB9Bk8+fKVkSThXyWTtpgblB7pX
iQBtTvSWVZGHprkLgMGkU2Yw8Z43m1WpoRuYyXNFe92S5viIdVuKTj/VEUuEpzHd
ffWMIUw70LaUdTP04iQdkNVeS3M6VHkpTwsPSQfsFSwObtLVNy2Lf+ODwJRqCk2r
C749hgKqBdJqkcIj49R7UP4SMQ/9V3yy8DFMrIcgsjC4tHwlQSCGeXNxTNlapGSa
ke55LUR83FASryVJRbUs678SCZSFkyGcT0qLZ/olu/e7Jj2lB0Qy/SJawkrs9hPE
4QIDAQAB
-----END PUBLIC KEY-----

앞머리의 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A는 rsaEncryption 알고리즘 식별자로, RSA SPKI 키를 눈으로 알아보는 단서입니다.

JWK 형태의 공개 키

알고리즘: Ed25519, JWK 패널
{
  "key_ops": [
    "verify"
  ],
  "ext": true,
  "alg": "Ed25519",
  "crv": "Ed25519",
  "x": "V5uB7UaPJrtncx3SXNtNzn1ZXjF1ApwvzBZ8nFzT5eU",
  "kty": "OKP"
}

Web Crypto가 항상 덧붙이는 key_ops와 ext 멤버까지 포함한, 내보내기 결과 그대로입니다. JWKS 항목에는 이 둘이 필요 없으니 지우고, 대신 순환 중에 검증자가 올바른 키를 고를 수 있도록 kid와 use를 넣으세요. Ed25519는 OKP 키 타입에 들어가고, RSA 키는 kty가 RSA이며 n과 e 멤버를 갖습니다.

SHA-256 지문

알고리즘: Ed25519
SHA256(SPKI) = KAXVxapxpG4zLsTVMpPafovT+X1NLWc8fsOXqtrb59o=

공개 키 구조의 SHA-256 다이제스트로, 전화로 읽어 줄 수 있을 만큼 짧습니다. 이 값은 ssh-keygen이 출력하는 값과 다릅니다 — OpenSSH는 자체 와이어 형식을 해싱하므로 같은 키라도 두 값은 결코 일치하지 않습니다.

RSA 키 생성기 사용법

  1. 1

    알고리즘 선택

    RSA는 레거시 시스템을 가장 넓게 아우릅니다. ECDSA는 훨씬 작은 키로 동등한 강도를 냅니다. Ed25519는 새로 시작하는 서명 작업의 현대적 기본값입니다.

  2. 2

    키 크기 선택

    RSA 2048은 현재 권고를 충족하며, 3072과 4096은 오래 쓸 키에 여유를 더합니다. ECDSA는 P-256, P-384, P-521을 지원합니다. Ed25519는 크기가 하나로 고정되어 있습니다.

  3. 3

    PEM 구조 선택

    PKCS#8은 BEGIN PRIVATE KEY를 내보내며 JDK를 포함해 거의 모든 곳에서 동작합니다. 무언가가 BEGIN RSA PRIVATE KEY를 콕 집어 요구할 때만 PKCS#1로 전환하세요.

  4. 4

    양쪽 절반 복사 또는 다운로드

    개인 키는 시크릿 저장소로, 공개 키는 서명을 검증할 상대에게 보내세요. 개인 키 쪽은 어디에도 보내지 마십시오.

  5. 5

    지문 확인

    SHA-256 지문을 별도 채널로 대조해, 상대가 실제로 사용자가 생성한 그 공개 키를 설치했는지 확인하세요.

흔한 키 형식 실수

개인 키 자리에 공개 키를 붙여넣기

서명에는 개인 키 쪽이 필요합니다. 개인 키를 기대한 자리에 BEGIN PUBLIC KEY가 들어오면, 라이브러리는 진짜 문제를 짚어 주는 대신 대개 도움 안 되는 파싱 오류를 냅니다.

✗ 오류
-----BEGIN PUBLIC KEY-----
✓ 정상
-----BEGIN PRIVATE KEY-----

라이브러리에 맞지 않는 PEM 구조

전통적인 RSA 구조만 읽는 생태계는 몇 안 됩니다 — OpenSSL 자신의 -traditional 출력, 일부 결제 게이트웨이 SDK, 오래된 Ruby·Perl 도구 정도입니다. 최신 라이브러리 대부분은, 특히 JDK는 PKCS#8을 기대합니다. 변환 명령을 찾아 헤매지 말고 PEM 구조 전환 스위치를 쓰세요.

✗ 오류
-----BEGIN RSA PRIVATE KEY-----
✓ 정상
-----BEGIN PRIVATE KEY-----

끝의 줄바꿈을 잃어버리기

PEM 파일은 마지막 구분선 뒤에 줄바꿈으로 끝납니다. 공백을 잘라내는 입력 필드를 거쳐 복사하면 일부 파서가 아예 거부하는 파일이 됩니다 — 게다가 빠진 문자가 눈에 보이지 않으니 편집기에서는 멀쩡해 보입니다.

✗ 오류
-----END PRIVATE KEY-----[EOF]
✓ 정상
-----END PRIVATE KEY-----↵[EOF]

옮기는 중에 사라진 문자 하나

PEM을 망가뜨리는 것은 줄 너비가 아니라 사라지거나 끼어들거나 뒤바뀐 문자 하나입니다 — 파서 대부분은 어떤 줄바꿈 폭이든 받아들입니다. 채팅 클라이언트나 입력 필드를 거친 복사는 줄바꿈을 소리 없이 공백으로 바꿔 놓을 수 있고, base64는 어느 문자가 잘못됐는지 아무 단서도 주지 않습니다. 키는 그저 로드에 실패할 뿐입니다. 손으로 선택하지 말고 복사 버튼을 쓰세요.

✗ 오류
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk
✓ 정상
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni
eSccN1uleXFRBb1g2TN6bk

RS256 설정에 HS256 비밀 키를 쓰기

HS256은 공유 비밀 하나를, RS256은 키 쌍을 씁니다. RS256 서명기에 무작위 문자열을 넣으면 파싱 단계에서 실패합니다. 여기서 키 쌍을 생성하거나, HS256을 의도했다면 JWT 비밀 키 생성기를 쓰세요.

✗ 오류
alg: RS256, key: 8f3a9c2e1b7d
✓ 정상
alg: RS256, key: -----BEGIN PRIVATE KEY-----

authorized_keys에 PEM 붙여넣기

SSH 공개 키는 PEM 블록이 아니라 OpenSSH의 한 줄짜리 ssh-ed25519 AAAA… 형식이므로, 이 페이지의 공개 키를 authorized_keys에 붙여넣어도 동작하지 않습니다. RSA 키라면 로컬에서 ssh-keygen -y로 올바른 줄을 도출할 수 있고, SSH 접속 전반으로는 대상 기기에서 생성하는 편이 그래도 낫습니다.

✗ 오류
-----BEGIN PUBLIC KEY-----
✓ 정상
ssh-keygen -y -f rsa-2048-private.pem > id_rsa.pub

누가 이 도구를 쓰나

RS256이나 EdDSA로 JWT 서명
비대칭 JWT 알고리즘은 공유 비밀이 아니라 키 쌍을 필요로 합니다. 개인 키로 서명하고 공개 키를 게시하면, 검증자는 토큰을 발행할 수 있는 것을 결코 손에 쥐지 않습니다. JWT 인코더는 이 페이지가 만든 키를 그대로 받습니다.
웹훅과 릴리스 서명
공개 키를 한 번 게시하고 모든 페이로드를 개인 키로 서명하면, 소비자는 유출될 공유 자격 증명 없이 진위를 검증할 수 있습니다.
로컬 개발과 테스트
서명 검증을 다루는 테스트 스위트에는 일회용 키 쌍이 필요합니다. OpenSSL 호출 방법을 떠올리는 것보다 여기서 하나 생성하는 편이 빠릅니다.
키 쌍이 어떻게 생겼는지 익히기
알고리즘과 PEM 구조를 나란히 오가며 보면, 명세를 읽어서는 잡히지 않던 차이가 손에 잡힙니다.
JWKS 엔드포인트 준비
공개 JWK는 OpenID Connect 디스커버리 문서의 keys 배열에 그대로 들어갑니다. 순환 중에 검증자가 고를 수 있도록 kid를 넣고, 개인 JWK는 그 파일에 넣지 마십시오.
RSA에서 갈아타기
기존 RSA 키 옆에 Ed25519 대체 키를 생성해 크기를 비교한 뒤 전환을 확정하세요.
형식 불일치 해결
라이브러리가 파싱 오류로 키를 거부한다면, 다른 PEM 구조로 다시 내보내는 것만으로 대개 해결됩니다.

PEM 형식과 생성기 작동 원리

어느 컨테이너를 어디에 쓰나
키는 하나인데 포장은 다섯 가지입니다. 엉뚱한 것을 고르는 것이 키가 거부되는 가장 흔한 이유이고, 오류 메시지는 파싱 실패보다 더 구체적인 경우가 드뭅니다.
컨테이너PEM 헤더담는 것주로 만나는 곳
PKCS#8BEGIN PRIVATE KEY모든 알고리즘Web Crypto, JDK, Go, .NET 등 최신 라이브러리 대부분
PKCS#1BEGIN RSA PRIVATE KEYRSA 전용OpenSSL 전통 출력, 일부 결제 게이트웨이, 오래된 Ruby·Perl 도구
SPKI / X.509BEGIN PUBLIC KEY모든 알고리즘, 공개 키 쪽거의 모든 라이브러리가 기대하는 공개 키
PKCS#1 공개BEGIN RSA PUBLIC KEYRSA 전용, 공개 키 쪽레거시 RSA 도구
JWK없음 — JSON입니다모든 알고리즘JWKS 엔드포인트, OIDC 디스커버리, JOSE 라이브러리
이미 갖고 있는 파일을 변환하려면 openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem이 한 방향, openssl rsa -traditional -in pkcs8.pem -out pkcs1.pem이 그 반대 방향입니다.
무작위성은 운영체제에서 옵니다
Web Crypto는 플랫폼 엔트로피 원천 — 리눅스의 getrandom, 윈도우와 macOS의 시스템 CSPRNG — 에서 키 생성 시드를 얻습니다. OpenSSL이 끌어 쓰는 것과 같은 부류의 원천이며, 자바스크립트 의사 난수 생성기가 아닙니다.
생성이 페이지를 얼리지 않습니다
crypto.subtle.generateKey는 비동기이며, 주요 브라우저 엔진에서는 소수 탐색이 메인 스레드 밖에서 일어나므로 4096비트 모듈러스를 찾는 동안에도 인터페이스가 반응합니다. 그래도 페이지는 스피너를 띄우는데, 그 탐색이 얼마나 걸릴지는 운에 달려 있기 때문입니다.
PKCS#8이 PKCS#1을 감쌉니다
PKCS#8 PrivateKeyInfo는 버전 번호, 알고리즘 식별자, OCTET STRING으로 이뤄집니다. 암호화되지 않은 rsaEncryption 키에서는 그 OCTET STRING 안에 완전한 PKCS#1 RSAPrivateKey가 들어 있으며, 이 페이지가 아무것도 다시 유도하지 않고 두 형식을 오가는 원리가 바로 이것입니다.
공개 키는 SubjectPublicKeyInfo를 씁니다
BEGIN PUBLIC KEY는 X.509 SubjectPublicKeyInfo, 즉 알고리즘 식별자와 BIT STRING입니다. 그 비트 안에 무엇이 들어가는지는 알고리즘에 달려 있습니다. RSA에서는 PKCS#1 RSAPublicKey이며 그래서 BEGIN RSA PUBLIC KEY 쪽이 더 짧고, ECDSA에서는 압축하지 않은 곡선 위의 점, Ed25519에서는 32바이트 원시 키입니다.
공개 지수는 65537입니다
여기서 만드는 모든 RSA 키는 0x010001로 적는 값 e = 65537을 씁니다. 작은 지수 공격을 피할 만큼 크면서 켜진 비트가 둘뿐이라, 검증에는 제곱 16번과 곱셈 한 번이 듭니다.
지문은 PEM이 아니라 DER을 다이제스트합니다
SHA-256 지문은 이진 SubjectPublicKeyInfo에 대해 계산됩니다. base64 텍스트를 대상으로 지문을 뜨면 줄바꿈 방식이 바뀔 때마다 값이 달라집니다. 로컬에서의 등가 명령은 openssl pkey -in private.pem -pubout -outform DER | openssl dgst -sha256 -binary | openssl base64입니다.

키 관리 모범 사례

키는 쓰일 곳에서 생성하기
네트워크를 건너간 개인 키는 지나온 모든 구간에 노출된 것입니다. 브라우저에서 생성하면 키 자체는 네트워크를 타지 않지만, 페이지의 코드는 여전히 네트워크로 도착합니다. 대상 호스트에서 생성하면 복사 단계마저 사라집니다. 운영 시스템을 지키는 키라면 호스트 쪽을 택하세요.
RSA가 강제되지 않으면 Ed25519 우선
Ed25519는 32바이트 키로 강력한 보안을 내면서 서명이 빠르고 잘못 고를 파라미터가 없습니다. 상대방이나 오래된 라이브러리가 선택지를 남기지 않을 때 RSA를 쓰세요.
2048비트를 하한으로 삼기
NIST SP 800-131A는 2013년부터 서명 생성에 2048비트 미만 RSA를 금지했고, 어떤 공개 인증 기관도 그보다 작은 키에는 발급하지 않습니다. 여러 해 동안 운용할 키라면 3072이나 4096을 고르세요.
개인 키를 절대 커밋하지 않기
개인 키는 시크릿 관리자나 런타임에 읽는 환경 변수에 두세요. 키가 코드 저장소에 한 번 들어가면 안전한 대응은 순환뿐입니다.
사고 뒤에만이 아니라 일정에 따라 순환하기
옛 키를 폐기하기 전에 키 식별자와 함께 새 공개 키를 게시해, 겹치는 구간 동안 검증자가 양쪽을 모두 받아들이게 하세요. 평소에 연습한 순환만이 압박 속에서도 동작합니다.

자주 묻는 질문

웹사이트에서 개인 키를 생성해도 안전한가요?
키는 사용자 브라우저 안에서 Web Crypto API가 생성하며, 이 페이지는 생성하는 동안 어떤 네트워크 요청도 보내지 않습니다 — 네트워크 패널을 열어 두고 지켜보거나, 연결을 끊은 채로도 생성이 되는지 확인해 보세요. 다만 그것이 무엇을 보여 주고 무엇을 보여 주지 않는지는 분명히 해야 합니다. 이는 이 페이지에 서버가 필요 없다는 것을 보여 줄 뿐, 침해된 스크립트에 대한 증명은 아닙니다. 자바스크립트는 방문할 때마다 저희 서버에서 다시 내려받기 때문입니다. 남는 위험은 네트워크 쪽이 아니라 브라우저 쪽입니다. 악성 확장 프로그램은 페이지와 클립보드를 읽을 수 있고, 그 기기에 접근할 수 있는 사람은 내려받은 파일을 읽을 수 있습니다. 운영 시스템을 지키는 키라면 그 키를 쓸 호스트에서 생성하세요 — 아래 OpenSSL 명령이 바로 그 일을 합니다. 이 페이지는 개발, 테스트, 학습, 그리고 브라우저에서 생성한 키가 허용되는 곳에 알맞은 도구입니다.
PKCS#8과 PKCS#1의 차이는 무엇인가요?
같은 RSA 키를 담는 두 가지 컨테이너입니다. BEGIN RSA PRIVATE KEY로 표시되는 PKCS#1은 RSA 숫자들을 직접 담으며 RSA 전용으로만 존재합니다. BEGIN PRIVATE KEY로 표시되는 PKCS#8은 그 같은 숫자들을 알고리즘 식별자로 감싸, 하나의 형식이 RSA·ECDSA·Ed25519를 모두 실어 나르게 합니다. 최신 라이브러리 대부분은 PKCS#8을 기대하며 — 특히 JDK는 별도 라이브러리 없이는 PKCS#8만 읽습니다 — 반면 상당수 결제 게이트웨이와 OpenSSL 시절의 오래된 도구는 여전히 PKCS#1을 요구합니다. 이 페이지의 전환 스위치는 화면에 이미 있는 키를 다시 인코딩하므로, 더해지거나 없어지는 정보가 없고 지문도 그대로입니다.
PKCS#1 키를 PKCS#8로, 또는 그 반대로 어떻게 변환하나요?
이 페이지의 PEM 구조 스위치를 전환하면 같은 키가 다른 컨테이너로 다시 나옵니다. 이미 갖고 있는 파일이라면 OpenSSL이 로컬에서 변환합니다. openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem은 BEGIN RSA PRIVATE KEY 파일을 BEGIN PRIVATE KEY로 바꾸고, openssl rsa -traditional -in pkcs8.pem -out pkcs1.pem은 그 반대로 갑니다. 어느 방향도 키 재료를 더하거나 빼지 않고 포장만 바뀌므로, 두 파일은 동일한 키를 기술하고 동일한 지문을 냅니다.
RSA 개인 키에서 공개 키는 어떻게 얻나요?
공개 키는 개인 키에서 도출할 수 있고, 그 반대는 결코 불가능합니다. 이 페이지는 양쪽 절반을 한 번에 보여 주므로 따로 도출할 것이 없습니다. 이미 디스크에 있는 개인 키라면 openssl pkey -in private.pem -pubout -out public.pem이 짝이 되는 BEGIN PUBLIC KEY 파일을 씁니다. 어떤 쌍이 서로 맞는지 확인하는 방법도 이것입니다 — 공개 키 쪽을 다시 만들어 건네받은 파일과 대조하세요.
RSA와 Ed25519 중 무엇을 골라야 하나요?
선택을 강요하는 요인이 없다면 Ed25519를 고르세요. 32바이트 키로 RSA 3072에 견줄 만한 보안에 도달하고, 서명이 더 빠르며, 잘못 설정할 파라미터가 없습니다. 상대방이나 인증 기관, 오래된 라이브러리가 요구할 때는 RSA를 고르세요 — 기업 시스템과 결제 시스템에서는 여전히 흔한 일입니다. ECDSA는 둘 사이에 있으며 TLS에서 폭넓게 지원됩니다.
2048비트 RSA는 아직 충분히 강한가요?
네, 오늘날 대부분의 용도에는 충분합니다. NIST는 2048비트 RSA를 112비트 보안 강도로 평가하며 SP 800-57에서 2030년까지 유효한 것으로 다룹니다. 3072비트는 128비트 강도에 도달하며 그 이후를 위해 NIST가 가리키는 값입니다. 정리하면, 몇 해 안에 순환할 키에는 2048을, 2030년대까지 현역으로 남을 키이거나 인증 기관이 요구하는 경우에는 3072이나 4096을 쓰세요. 더 큰 키의 대가는 느린 서명과 커진 서명 크기이지 보안 약화가 아닙니다.
이 키로 JWT에 서명할 수 있나요?
네. RSA 키는 RS256, RS384, RS512와 PSS 변형에서 동작하고, ECDSA P-256은 ES256과 짝을 이루며, Ed25519가 곧 EdDSA 알고리즘입니다. 개인 키로 서명하고 공개 키를 게시하면 검증자는 서명을 만들어 낼 수는 없으면서 확인만 할 수 있습니다. PEM 대신 JWK 패널을 쓴다면 한 가지 주의할 점이 있습니다. Web Crypto는 RSA JWK에 alg를 RS256으로 찍어 넣는데, 엄격한 라이브러리는 그것을 PS256이나 RS512용으로 로드하기를 거부합니다 — alg 멤버를 지우거나 PEM을 쓰세요. JWT 인코더가 이 키를 받고, JWT 디코더는 그렇게 만들어진 토큰에 무엇이 들어 있는지 보여 줍니다.
이 도구로 SSH 키를 생성할 수 있나요?
직접적으로는 아닙니다. OpenSSH 자체의 개인 키 파일은 다른 컨테이너이고, 이 페이지는 그것을 쓰지 않습니다. 그래도 여기서 만든 RSA 키는 쓸 수 있습니다. ssh-keygen -y -f rsa-2048-private.pem > id_rsa.pub이 내려받은 파일에서 authorized_keys 줄을 도출합니다. Ed25519 키는 그렇지 않은데, OpenSSH가 PKCS#8 형태를 거부하기 때문입니다. SSH 접속이라면 더 나은 답은 여전히 키가 필요한 그 기기에서 ssh-keygen -t ed25519를 실행하는 것이며, 그러면 개인 키를 옮길 일이 아예 없습니다. JWT 서명, CI 릴리스 서명, 웹훅 검증에는 이 페이지가 만드는 PKCS#8 키가 바로 그 도구들이 원하는 것입니다.
개인 키를 패스프레이즈로 보호할 수 있나요?
여기서는 할 수 없습니다. 암호화된 PKCS#8은 Web Crypto API가 노출하지 않는 키 유도 단계를 필요로 하므로, 이를 구현하려면 자바스크립트로 암호 기능을 직접 짜야 합니다. 대신 패스프레이즈는 로컬에서 붙이세요. openssl pkcs8 -topk8 -in private.pem -out encrypted.pem이 내려받은 파일을 읽고 패스프레이즈를 물어봅니다.
지문은 어디에 쓰나요?
공개 키 구조의 SHA-256 다이제스트로, 음성이나 채팅 메시지로 대조할 만큼 짧습니다. 누군가에게 공개 키를 보낼 때 별도 채널로 지문을 맞춰 보면 도착한 것이 보낸 것과 같은지 확인됩니다. 지문은 공개 키만 식별하며 개인 키 쪽에 대해서는 아무것도 드러내지 않습니다. 이 값은 ssh-keygen -l이 출력하는 숫자가 아니라는 점에 유의하세요. OpenSSH는 SPKI 구조가 아니라 자체 와이어 형식을 해싱하므로, 같은 키라도 두 값은 결코 일치하지 않습니다.

AES 복호화 도구 — OpenSSL·CryptoJS 호환

보안 도구

온라인 AES 복호화 — GCM/CBC/CTR, 암호 문구 또는 원시 키, OpenSSL·CryptoJS "U2FsdGVkX1" 형식 자동 인식. 브라우저에서만 실행되며 키는 유출되지 않습니다.

AES 암호화 도구 — GCM, CBC, CTR 모드

보안 도구

무료 온라인 AES 암호화 도구 — AES-128/192/256, GCM/CBC/CTR, 암호 문구(PBKDF2) 또는 원시 키. 브라우저에서만 실행되고 서버 업로드는 없습니다.

Bcrypt 해시 생성 및 검증 도구

보안 도구

온라인으로 bcrypt 비밀번호 해시를 생성·검증하세요 — 조절 가능한 비용 인자, $2b$/$2a$/$2y$ 접두사 지원. 100% 브라우저에서 실행, 비밀번호는 업로드되지 않습니다.

HMAC 생성기 및 서명 검증 도구

보안 도구

무료 온라인 HMAC 생성·검증 도구. Text/Hex/Base64 키로 HMAC-SHA256/SHA1/SHA384/SHA512를 Hex/Base64/Base64URL로 출력. 100% 브라우저 실행, 키 유출 없음.

JWT 디코더 (JWT Decoder)

보안 도구

무료 JWT 디코더로 JWT 토큰을 온라인에서 즉시 디코딩. 헤더, 페이로드, 서명, 만료, 클레임 확인. 100% 브라우저 기반 — 토큰이 기기를 떠나지 않음. 가입·추적 없음.

JWT 인코더 (JWT Encoder)

보안 도구

무료 온라인 JWT 생성기·인코더. 헤더와 페이로드를 구성하고 HS256, RS256, ES256으로 즉시 서명. 100% 브라우저 기반 — 비밀 키와 개인 키가 기기를 떠나지 않음.