RSA 암호화 / 서명
암호Web Crypto로 RSA-OAEP 암호화와 RSASSA-PKCS1-v1_5 서명. 키 쌍 생성 또는 PEM 키 붙여넣기.
이 페이지에서
RSA란?#
RSA는 비대칭 암호입니다. 하나의 공유 비밀이 아니라 짝을 이루는 한 쌍의 키로 동작합니다. 공개 키 는 누구에게든 나눠줄 수 있습니다. 이 키가 하는 일은 데이터를 잠그고 서명을 검증하는 것뿐입니다. 개인 키 는 여러분 곁에 머물며, 공개 키로 암호화된 데이터를 풀거나 누구나 검증할 수 있는 서명을 만드는 유일한 수단입니다. 이 분할이 비밀을 한 번도 공유한 적 없는 두 당사자가 기밀 메시지를 주고받고 진짜성을 증명할 수 있게 합니다.
이 페이지는 RSA가 흔히 쓰이는 네 가지 연산을, 모두 브라우저의 네이티브 Web Crypto 엔진을 통해 다룹니다.
- 암호화 / 복호화 는 RSA-OAEP 와 SHA-256을 씁니다. 현대적인 인증 패딩 방식입니다. 공개 키로 암호화한 짧은 메시지는 개인 키로만 다시 읽을 수 있습니다.
- 서명 / 검증 은 RSASSA-PKCS1-v1_5 와 SHA-256을 씁니다. 상호 운용성이 가장 넓은 서명 방식이며, 대부분의 JWT와 X.509 체인이 여전히 쓰는 것입니다.
- 키 생성 은 2048, 3072, 4096비트 쌍을 공개 지수 65537로 만들고, 표준 PEM(공개 키는 SubjectPublicKeyInfo, 개인 키는 PKCS#8)으로 내보냅니다.
RSA는 의도적으로 짧은 페이로드 에만 한정됩니다. RSA-2048과 SHA-256에서 암호화할 수 있는 가장 큰 메시지는 약 190바이트입니다. 그 이상이 필요하면 대칭 도구를 쓰고 그 키만 RSA로 보호하세요.
사용 방법#
- 쌍을 생성하세요. 키 크기(2048 / 3072 / 4096)를 고르고 키 쌍 생성 을 누르세요. 읽기 전용 상자 두 개가 채워집니다. 공개 키 와 개인 키, 둘 다 PEM입니다. 각각을 안전한 곳에 복사해 두세요. 개인 키 만큼은 절대 공유하면 안 됩니다.
- 모드 를 고르세요. 암호화, 복호화, 서명, 검증 중 하나.
- 모드에 맞는 키 를 키 필드에 넣으세요.
- 암호화 → 공개 키를 붙여넣으세요.
- 복호화 → 개인 키를 붙여넣으세요.
- 서명 → 개인 키를 붙여넣으세요.
- 검증 → 공개 키를 붙여넣으세요.
- 메시지 를 타이핑하세요. 검증에서는 서명 (Base64)도 서명 필드에 붙여넣으세요.
- 실행하세요. 상태 줄이 결과를 보고합니다. 검증에서는 서명이 유효한지 무효한지 명시적으로 알려줍니다.
주요 기능#
- 두 알고리즘, 한 키 쌍. 같은 PEM이 OAEP 암호화와 PKCS#1 서명에 모두 쓰립니다. Web Crypto가 가져오는 시점에 알고리즘을 취하기 때문입니다.
- 표준 PEM 출력. 공개 키는 SPKI, 개인 키는 PKCS#8입니다. 모든 언어와 플랫폼이 기본으로 읽는 형식입니다.
- 65537 공개 지수. 보편적으로 선택되는 값입니다. 빠르기에 충분히 작고, 알려진 약점을 피하기에 충분히 큽니다.
- 상호 운용 가능한 서명. RSASSA-PKCS1-v1_5는 실세계 JWT, 코드 서명, 인증서 체인이 기대하는 형식입니다.
- 업로드 없음. 키 생성, 암호화, 서명이 모두 브라우저에서 로컬로 실행됩니다. 개인 키는 결코 서버에 닿지 않습니다.
실전 예시#
2048 을 선택하고 키 쌍 생성 을 누르세요. 공개 키 상자가 다음 모양의 PEM 블록으로 채워집니다.
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyY7v...(lines of base64)
-----END PUBLIC KEY-----
개인 키 상자는 더 긴 -----BEGIN PRIVATE KEY----- 블록으로 채워집니다. 이제 암호화 로 전환하고, 공개 키를 키 필드에 붙여넣고, 메시지로 handshake: 0x4F2A 를 타이핑한 뒤 실행하세요. 출력은 약 344자 길이의 단일 Base64 덩어리입니다. RSA-2048 암호문 정확히 256바이트를 Base64로 인코딩한 것입니다.
복호화 로 전환하고, 개인 키를 키 필드에 붙여넣고, 그 덩어리를 메시지 필드에 떨어뜨린 뒤 실행하세요. 원래의 handshake: 0x4F2A 가 돌아옵니다. 서명의 경우, 서명 으로 같은 흐름을 밟으면 344자 Base64 서명이 나오며, 검증 은 이것을 공개 키에 대해 유효하다고 확인합니다. 단, 먼저 메시지의 글자 하나를 바꾸면 무효하다고 보고합니다.
FAQ#
왜 RSA는 짧은 메시지만 암호화할 수 있나요?#
RSA는 키 크기를 모듈로 하는 수 위에서 동작합니다. RSA-2048에서는 256바이트 블록을 쓸 수 있고, OAEP 패딩이 그중 2 * hashLen + 2 바이트(SHA-256의 경우 98바이트)를 소비하여 메시지 자체는 190바이트만 남깁니다. 이것은 설계된 것입니다. RSA는 대량 데이터가 아니라 키와 서명을 위한 것입니다. 표준 패턴은 “하이브리드”입니다. 대량 데이터는 AES로 암호화(대칭 도구를 쓰세요)하고, AES 키만 RSA로 암호화하는 것입니다.
2048, 3072, 4096비트 중 어느 것을?#
2048은 현재 기준선이며 대부분의 용도에 여전히 적절하다고 여겨집니다. 3072는 대략 128비트 대칭 강도에 해당하고, 4096은 10년 이상 오래 쓰고 싶은 키를 위한 보수적 선택입니다. 단계를 올릴 때마다 키 생성과 모든 연산에서 실제 시간 비용이 들며, 보안 이득은 수확 체감합니다.
암호화와 서명의 차이는 무엇인가요?#
암호화는 비밀에 관한 것입니다. 공개 키가 잠그고, 개인 키가 엽니다. 서명은 진짜성에 관한 것입니다. 개인 키가 서명을 만들고, 공개 키가 이를 검사합니다. 둘은 같은 키 쌍을 쓰지만 다른 알고리즘(OAEP vs PKCS#1)을 쓰며, 다른 질문에 답합니다. “누구나 이것을 읽을 수 있는가?” vs “이 키의 소유자가 정말로 이것을 만들었는가?”.
개인 키는 생성하거나 쓸 때 어디로 전송되나요?#
어디로도 전송되지 않습니다. 생성, 암호화, 복호화, 서명, 검증 모두 Web Crypto가 페이지 안에서 수행합니다. PEM 블록은 여러분의 브라우저 탭에만 존재하며, 아무것도 전송되지 않습니다. 프로덕션 개인 키를 다룰 때는 어떤 웹 페이지에든 아예 붙여넣지 말고, 여러분이 통제하는 환경에서 생성하세요.