Pythonで公開鍵暗号を実装する方法

プログラミング

Pythonによる公開鍵暗号の実装

Pythonで公開鍵暗号を実装するには、主にPyCryptodomeライブラリを使用するのが一般的です。このライブラリは、RSA、ECC(楕円曲線暗号)など、様々な公開鍵暗号アルゴリズムをサポートしており、安全で効率的な実装を提供します。

PyCryptodomeのインストール

まず、PyCryptodomeライブラリをインストールします。ターミナルまたはコマンドプロンプトで以下のコマンドを実行します。

pip install pycryptodome

RSA暗号の実装例

RSAは、公開鍵暗号の代表的なアルゴリズムです。ここでは、PyCryptodomeを使用してRSA鍵ペアの生成、メッセージの暗号化、復号化を行う基本的な例を示します。

鍵ペアの生成

RSAの鍵ペア(公開鍵と秘密鍵)を生成するには、Crypto.PublicKey.RSAモジュールを使用します。鍵の強度は、ビット長で指定します。一般的に2048ビット以上が推奨されています。

from Crypto.PublicKey import RSA

# 鍵ペアの生成 (2048ビット)
key = RSA.generate(2048)

# 公開鍵の取得
public_key = key.publickey()

# 秘密鍵の取得
private_key = key

生成された鍵は、ファイルに保存して後で再利用することができます。

# 公開鍵をファイルに保存
with open(“public_key.pem”, “wb”) as f:
f.write(public_key.export_key())

# 秘密鍵をファイルに保存
with open(“private_key.pem”, “wb”) as f:
f.write(private_key.export_key())

メッセージの暗号化

生成した公開鍵を使用して、メッセージを暗号化します。メッセージはバイト列である必要があります。

from Crypto.Cipher import PKCS1_OAEP
import binascii

# 公開鍵を読み込む (ファイルから、または生成したオブジェクトを直接使用)
# with open(“public_key.pem”, “rb”) as f:
# public_key_obj = RSA.import_key(f.read())
public_key_obj = public_key # 例として生成したオブジェクトを使用

# 暗号化対象のメッセージ
message = b”This is a secret message.”

# PKCS1_OAEPパディングを使用した暗号化オブジェクトの作成
cipher = PKCS1_OAEP.new(public_key_obj)

# メッセージの暗号化
encrypted_message = cipher.encrypt(message)

# 暗号化されたメッセージはバイト列
print(“Encrypted message:”, binascii.hexlify(encrypted_message))

メッセージの復号化

暗号化されたメッセージは、対応する秘密鍵を使用して復号化します。

# 秘密鍵を読み込む (ファイルから、または生成したオブジェクトを直接使用)
# with open(“private_key.pem”, “rb”) as f:
# private_key_obj = RSA.import_key(f.read())
private_key_obj = private_key # 例として生成したオブジェクトを使用

# 復号化オブジェクトの作成
cipher_rsa = PKCS1_OAEP.new(private_key_obj)

# メッセージの復号化
decrypted_message = cipher_rsa.decrypt(encrypted_message)

print(“Decrypted message:”, decrypted_message.decode())

鍵の管理とセキュリティに関する注意点

公開鍵暗号の実装においては、鍵の管理が非常に重要です。

秘密鍵の保護

秘密鍵は、暗号化の逆操作(復号化)やデジタル署名に使用されるため、絶対に漏洩させてはなりません。ファイルに保存する場合は、適切なアクセス権限を設定し、暗号化して保存することを検討してください。

鍵の交換

公開鍵は安全に交換される必要があります。攻撃者が公開鍵を偽装すると、中間者攻撃(Man-in-the-Middle attack)が可能になります。信頼できるチャネルを通じて公開鍵を共有するか、公開鍵基盤(PKI)のような仕組みを利用することが重要です。

アルゴリズムの選択

RSA以外にも、ECC(楕円曲線暗号)など、より効率的で安全なアルゴリズムが存在します。用途やセキュリティ要件に応じて、適切なアルゴリズムを選択してください。ECCは、RSAと比較して同じセキュリティレベルをより短い鍵長で実現できる利点があります。

まとめ

Pythonで公開鍵暗号を実装するには、PyCryptodomeライブラリが強力なツールとなります。RSA暗号の鍵生成、暗号化、復号化は比較的容易に実装できますが、実際の運用においては、秘密鍵の厳重な管理、公開鍵の安全な交換、そして必要に応じたより高度なアルゴリズムの選択が不可欠です。これらの点を考慮し、安全なシステムを構築することが求められます。