PythonでRSA暗号の使用方法をマスターする

この記事では、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でより安全なシステムを開発してみてはいかがでしょうか。

コメント

コメントする

目次