Oh MyUtils

RSA 키 쌍 생성기 - RSA & Ed25519 온라인

브라우저에서 RSA (2048/4096비트) 및 Ed25519 키 쌍을 생성하세요. PEM 또는 JWK 형식으로 내보내기 — 100% 클라이언트 사이드, 서버 전송 없음.

100% 클라이언트 사이드 — 키가 브라우저 밖으로 전송되지 않습니다
출력 형식

자주 묻는 질문

RSA 키 쌍 생성기란 무엇인가요?

RSA 키 쌍 생성기는 RSA 알고리즘을 사용하여 수학적으로 연결된 공개 키와 개인 키 쌍을 만드는 도구입니다. 공개 키는 데이터를 암호화하거나 서명을 검증하고, 개인 키는 데이터를 복호화하거나 서명을 생성합니다. 이 도구는 브라우저의 Web Crypto API를 사용하여 어떤 데이터도 서버로 전송하지 않고 안전하게 키를 생성합니다.

이 도구를 어떻게 사용하나요?

알고리즘(RSA-2048, RSA-4096, Ed25519)을 선택하고 출력 형식(PEM 또는 JWK)을 선택한 후 '키 쌍 생성' 버튼을 클릭하세요. 브라우저에서 즉시 두 키가 생성됩니다. 복사 버튼으로 키를 복사하거나 .pem 파일로 다운로드할 수 있습니다. 개인 키는 안전하게 보관하고 절대 공유하지 마세요.

키 데이터가 안전한가요? 서버로 전송되나요?

키 데이터는 100% 안전하며 브라우저를 떠나지 않습니다. 이 도구는 HTTPS/TLS 연결에 사용되는 것과 동일한 Web Crypto API(crypto.subtle.generateKey)를 사용하여 기기에서 직접 키를 생성합니다. 서버로 전송되는 키 자료도, 키를 추적하는 분석도, 브라우저 탭 메모리 외에 저장되는 데이터도 없습니다.

RSA와 Ed25519의 차이점은 무엇인가요?

RSA는 2048-4096비트 키 크기로 암호화와 서명을 모두 지원하는 널리 사용되는 알고리즘입니다. Ed25519는 서명/검증만 지원하지만 더 작은 키(256비트), 더 빠른 연산, RSA-3072에 해당하는 보안을 제공하는 현대적 타원 곡선 알고리즘입니다. Ed25519는 GitHub과 GitLab이 SSH 인증에 권장합니다. JWT 서명과 일반 암호화에는 RSA를, SSH 키에는 Ed25519를 사용하세요.

PEM과 JWK 형식이란 무엇인가요?

PEM은 '-----BEGIN PRIVATE KEY-----' 같은 헤더/푸터 사이에 Base64로 인코딩된 키 데이터를 감싸는 텍스트 형식입니다. SSH, OpenSSL, TLS 인증서의 표준입니다. JWK(JSON Web Key)는 RFC 7517에 정의된 JSON 기반 형식으로 웹 애플리케이션, JWT 라이브러리, OAuth/OIDC 제공자에서 주로 사용됩니다. 서버 구성에는 PEM, 웹 API에는 JWK가 적합합니다.

생성된 키를 SSH 인증에 사용할 수 있나요?

네, 몇 가지 주의사항이 있습니다. 이 도구는 PKCS#8/SPKI PEM 형식으로 키를 생성합니다. 최신 OpenSSH는 PKCS#8 PEM을 직접 지원합니다. 개인 키를 파일로 저장하고 chmod 600 권한을 설정한 후 'ssh -i key.pem user@host'로 사용하세요. OpenSSH 네이티브 형식으로 변환하려면 'ssh-keygen -p -m pem -f key.pem'을 사용하세요.

코드 예제

// RSA-2048 Key Pair Generation (Web Crypto API)
async function generateRSAKeyPair(bits = 2048) {
  const keyPair = await crypto.subtle.generateKey(
    {
      name: 'RSA-OAEP',
      modulusLength: bits,
      publicExponent: new Uint8Array([1, 0, 1]),
      hash: 'SHA-256',
    },
    true,
    ['encrypt', 'decrypt']
  );

  const privDer = await crypto.subtle.exportKey('pkcs8', keyPair.privateKey);
  const pubDer = await crypto.subtle.exportKey('spki', keyPair.publicKey);

  const toPem = (der, label) => {
    const b64 = btoa(String.fromCharCode(...new Uint8Array(der)));
    const lines = b64.match(/.{1,64}/g).join('\n');
    return `-----BEGIN ${label}-----\n${lines}\n-----END ${label}-----`;
  };

  console.log(toPem(privDer, 'PRIVATE KEY'));
  console.log(toPem(pubDer, 'PUBLIC KEY'));
}

generateRSAKeyPair();

관련 도구