본문으로 건너뛰기
🛠️ToolsShed

RSA 키 쌍 생성기

RSA-2048 또는 RSA-4096 키 쌍을 PEM 형식으로 생성합니다.

키는 Web Crypto API를 사용하여 브라우저에서 완전히 생성되며 서버로 전송되지 않습니다.

이 도구 소개

RSA 키 쌍 생성기는 RSA(Rivest-Shamir-Adleman) 알고리즘을 기반으로 암호화용 공개 키와 복호화용 개인 키, 두 개의 수학적으로 연결된 암호화 키를 생성합니다. 이 키들은 인터넷상의 안전한 통신, 디지털 서명, 인증에 필수적입니다. 안전한 API를 구축하거나 인증서 기반 인증을 구현하거나 암호화된 메시징을 설정하든, 신뢰할 수 있는 RSA 키 생성기는 현대적 보안 인프라의 기초가 됩니다.

이 도구를 사용하려면 원하는 키 크기(RSA-2048 또는 RSA-4096)를 선택하고 생성을 클릭하기만 하면 표준 PEM 형식으로 두 키가 즉시 사용 가능한 상태로 생성됩니다. RSA-2048은 대부분의 애플리케이션에 적합하며 예견 가능한 미래에 강력한 보안을 제공하는 반면, RSA-4096은 약간 느린 작업을 대가로 추가적인 보안 마진을 제공합니다. 생성 후 각 키를 개별적으로 복사하여 애플리케이션, 설정 파일 또는 암호화 시스템에서 사용할 수 있습니다.

자주 묻는 질문

코드 구현

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.backends import default_backend

# Generate RSA key pair
def generate_rsa_key_pair(
    key_size: int = 2048,
    public_exponent: int = 65537,
) -> tuple[rsa.RSAPrivateKey, rsa.RSAPublicKey]:
    private_key = rsa.generate_private_key(
        public_exponent=public_exponent,
        key_size=key_size,
        backend=default_backend(),
    )
    return private_key, private_key.public_key()

# Serialize to PEM
def private_key_to_pem(key: rsa.RSAPrivateKey, password: bytes | None = None) -> str:
    encryption = (
        serialization.BestAvailableEncryption(password)
        if password else serialization.NoEncryption()
    )
    return key.private_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PrivateFormat.PKCS8,
        encryption_algorithm=encryption,
    ).decode()

def public_key_to_pem(key: rsa.RSAPublicKey) -> str:
    return key.public_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PublicFormat.SubjectPublicKeyInfo,
    ).decode()

# Sign and verify
def sign(message: bytes, private_key: rsa.RSAPrivateKey) -> bytes:
    return private_key.sign(message, padding.PKCS1v15(), hashes.SHA256())

def verify(message: bytes, signature: bytes, public_key: rsa.RSAPublicKey) -> bool:
    try:
        public_key.verify(signature, message, padding.PKCS1v15(), hashes.SHA256())
        return True
    except Exception:
        return False


if __name__ == "__main__":
    priv, pub = generate_rsa_key_pair(2048)
    print(private_key_to_pem(priv))
    print(public_key_to_pem(pub))

    msg = b"Hello, RSA!"
    sig = sign(msg, priv)
    print("Signature valid:", verify(msg, sig, pub))

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.