この記事では、PythonでのRSA暗号の使用方法について詳しく解説します。具体的なコード例とその解説、応用例を含めています。
目次
はじめに
RSA暗号は、公開鍵暗号の一つであり、安全なデータ通信やデジタル署名などでよく使用されます。Pythonでは、`cryptography`や`PyCryptodome`などのライブラリを使用して簡単にRSA暗号を扱うことができます。
必要なライブラリのインストール
!pip install cryptography
基本的な暗号化と復号
最も基本的な暗号化と復号のプロセスを見ていきましょう。
公開鍵と秘密鍵の生成
from cryptography.hazmat.primitives import serialization, asymmetric
# 鍵のペアを生成
private_key = asymmetric.rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
# 公開鍵を生成
public_key = private_key.public_key()
テキストの暗号化
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
# 暗号化するテキスト
message = b"Hello, RSA"
# 暗号化
ciphertext = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
テキストの復号
# 復号
decrypted_message = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(decrypted_message.decode('utf-8')) # 出力: Hello, RSA
応用例
データの署名と検証
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
# 署名するデータ
data = b"Sign me!"
# 署名
signature = private_key.sign(
data,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
# 署名の検証
public_key.verify(
signature,
data,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
公開鍵と秘密鍵の保存と読み込み
# 秘密鍵の保存
with open("private_key.pem", "wb") as f:
f.write(private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption()
))
# 公開鍵の保存
with open("public_key.pem", "wb") as f:
f.write(public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
))
まとめ
PythonでRSA暗号を使用する方法について、基本的な暗号化・復号から応用例まで解説しました。この知識を活かして、Pythonでより安全なシステムを開発してみてはいかがでしょうか。
コメント