非対称暗号とは
非対称暗号(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
)
)
ハイブリッド暗号
非対称暗号は処理が遅いため、実際のシステムでは「ハイブリッド暗号」を使用します:
- ランダムなセッション鍵(対称鍵)を生成
- データを対称暗号(AES等)で暗号化
- セッション鍵を公開鍵暗号で暗号化
- 暗号化されたデータとセッション鍵を送信
トラブル事例と対策
⚠️ 秘密鍵の漏洩
影響:過去のすべての通信が解読される可能性
対策:Perfect Forward Secrecyを使用し、セッションごとに鍵を生成。
