非対称暗号(公開鍵暗号) - 暗号化全般

暗号化全般 | IT用語集

非対称暗号とは

非対称暗号(Asymmetric Encryption)は、暗号化と復号化に異なる鍵(公開鍵と秘密鍵)を使用する暗号方式です。1976年にDiffieとHellmanによって概念が発表され、「鍵配送問題」を解決する画期的な技術として普及しました。

主な用途:

  • 暗号化:公開鍵で暗号化、秘密鍵で復号化
  • デジタル署名:秘密鍵で署名、公開鍵で検証
  • 鍵交換:対称暗号の鍵を安全に共有

代表的なアルゴリズム

  • RSA:素因数分解の困難性に基づく(1977年)
  • 楕円曲線暗号(ECC):離散対数問題に基づく、短い鍵長で高セキュリティ
  • Diffie-Hellman:鍵交換専用
  • Ed25519:高速なデジタル署名

AIエンジニアとしての実体験

AIサービスのAPI認証やデータ暗号化で非対称暗号を活用しています:

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes

# RSA鍵ペア生成
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048
)
public_key = private_key.public_key()

# 公開鍵で暗号化
ciphertext = public_key.encrypt(
    b"secret message",
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

# 秘密鍵で復号化
plaintext = private_key.decrypt(
    ciphertext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

ハイブリッド暗号

非対称暗号は処理が遅いため、実際のシステムでは「ハイブリッド暗号」を使用します:

  1. ランダムなセッション鍵(対称鍵)を生成
  2. データを対称暗号(AES等)で暗号化
  3. セッション鍵を公開鍵暗号で暗号化
  4. 暗号化されたデータとセッション鍵を送信

トラブル事例と対策

⚠️ 秘密鍵の漏洩

影響:過去のすべての通信が解読される可能性

対策:Perfect Forward Secrecyを使用し、セッションごとに鍵を生成。

関連用語

📝 関連ブログ記事

【2026年最新】OpenSSLの深刻な問題とは?

暗号化実装のご相談