コンテンツへスキップ
🛠️ToolsShed

RSA 鍵ペア生成ツール

RSA-2048またはRSA-4096鍵ペアをPEM形式で生成します。

鍵はブラウザ内でWeb Crypto APIを使用して生成され、サーバーには送信されません。

このツールについて

RSA鍵ペア生成ツールは、RSA(Rivest-Shamir-Adleman)アルゴリズムに基づいて、暗号化用の公開鍵と復号化用の秘密鍵という数学的に関連付けられた2つの暗号化キーを生成します。これらの鍵はインターネット上での安全な通信、デジタル署名、認証に欠かせません。セキュアな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.