非対称暗号(公開鍵暗号)

暗号化 | 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を使用し、セッションごとに鍵を生成。

2025〜2026年の最新動向

耐量子暗号(PQC)への移行

量子コンピュータの進歩により、RSAやECCは将来的に解読される可能性があります。NIST(米国標準技術研究所)は2024年、以下の耐量子暗号アルゴリズムを標準化しました。

  • CRYSTALS-Kyber(ML-KEM):鍵カプセル化(鍵交換の代替)
  • CRYSTALS-Dilithium(ML-DSA):デジタル署名
  • SPHINCS+(SLH-DSA):ハッシュベースの署名

TLS 1.3では既に「ハイブリッドPQC」(従来のECDH + KEM)の試験実装が進んでいます。

"Harvest Now, Decrypt Later" 攻撃

現在の暗号化通信を収集しておき、将来の量子コンピュータで解読しようとする攻撃です。10年以上の機密性が必要なデータは既に耐量子暗号への移行を検討すべき段階です。

よくある質問(FAQ)

Q. 非対称暗号(公開鍵暗号)とは何ですか?

暗号化と復号化に異なる鍵(公開鍵と秘密鍵)を使用する暗号方式です。公開鍵は誰でも入手でき、秘密鍵は本人のみが保持します。TLS/HTTPS、SSH、デジタル署名の基盤技術です。

Q. RSAとECCはどちらを使うべきですか?

新規システムでは、より短い鍵長で高いセキュリティを提供するECC(特にP-256やEd25519)を推奨します。RSA-2048は後方互換性が必要な場合に使用します。将来を見越すならNISTが2024年に標準化した耐量子暗号(CRYSTALS-Kyber等)の導入も検討してください。

Q. Pythonで非対称暗号を使う最良の方法は?

cryptographyライブラリ(pip install cryptography)が最も推奨されます。RSAより楕円曲線(Ed25519)を使う方が現代的で安全です。古いPyCryptoやPyCryptodomeよりもcryptographyパッケージの方がAPIが安全です。

関連用語

📝 関連ブログ記事

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

暗号化実装のご相談

非対称暗号の実装や、セキュリティ設計に関するご質問など、お気軽にお問い合わせください。