RSA暗号の計算処理を実装できるPython-RSAのインストール | ジコログ

RSA暗号の計算処理を実装できるPython-RSAのインストール

RSA暗号の計算処理を実装できるPython-RSAのインストール プログラミング

「プログラムで公開鍵・秘密鍵を作成したい」
「PythonでRSA暗号化・復号化の処理を実装したい」

このような場合には、Python-RSAがオススメです。
この記事では、RSA暗号を処理できるPython-RSAのインストールを解説しています。

本記事の内容

  • Python-RSAとは?
  • Python-RSAのシステム要件
  • Python-RSAのインストール
  • Python-RSAの動作確認

それでは、上記に沿って解説していきます。

Python-RSAとは?

Python-RSAとは、RSA暗号の計算ができるPythonライブラリです。
Python-RSAを使えば、PythonでRSA暗号化・復号化を実装できます。

また、Python-RSAでは次のようなコマンドラインツールも提供されています。

  • pyrsa-decrypt 
  • pyrsa-encrypt
  • pyrsa-keygen 
  • pyrsa-priv2pub
  • pyrsa-sign   
  • pyrsa-verify

これらを含めて、Python-RSAはPythonのみで開発されています。
そのため、Pythonさえ動けばどこでもRSA暗号を利用できます。

ただ、RSA鍵ペアの生成についてはssh-keygenを利用することが一般的でしょうね。
ssh-keygenによる公開鍵・秘密鍵の作成については、次の記事で解説しています。

Python-RSAはPython API(モジュール)としての利用にこそ、その価値を感じます。
Pythonコード上でRSA暗号化・復号化の処理が可能になるということですからね。

以上、Python-RSAについて説明しました。
次は、Python-RSAのシステム要件を説明します。

Python-RSAのシステム要件

現時点(2022年8月)でのPython-RSAの最新バージョンは、4.9となります。
この最新バージョンは、2022年7月20日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10

このサポート状況は、以下のPython公式開発サイクルとは少し異なります。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

Python 3.6は、2021年末でサポート期限が終了しています。
そのため、Python 3.7以降を利用するようにしましょう。

以上、Python-RSAのシステム要件を説明しました。
次は、Python-RSAのインストールを説明します。

Python-RSAのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.2.2
setuptools 63.4.2
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、Python-RSAのインストールです。
Python-RSAのインストールは、以下のコマンドとなります。

pip install rsa

Python-RSAのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package    Version
---------- -------
pip        22.2.2
pyasn1     0.4.8
rsa        4.9
setuptools 63.4.2
wheel      0.36.2

Python-RSAは、1つのパッケージに依存しているだけです。
それであれば、既存環境へもPython-RSAを容易に導入できますね。

以上、Python-RSAのインストールを説明しました。
次は、Python-RSAの動作確認を説明します。

Python-RSAの動作確認

Python-RSAの動作確認を行います。
以下に分けて確認を実施します。

  • 鍵ペア(公開鍵・秘密鍵)の生成
  • 鍵を用いた暗号化と復号化

それぞれを以下で説明します。

鍵ペア(公開鍵・秘密鍵)の生成

通常、鍵はファイルに保存して利用します。
そのため、生成した鍵をファイルに保存しましょう。

その動作が、次のコードとなります。

import rsa

pub_file_path = "pub_key.pem"
private_file_path = "private_key.pem"

(pub_key, private_key) = rsa.newkeys(512)

with open(pub_file_path, 'wb+') as f:
    pub_str = pub_key.save_pkcs1('PEM')
    f.write(pub_str)

with open(private_file_path, 'wb+') as f:
    private_str = private_key.save_pkcs1('PEM')
    f.write(private_str)

上記コードを実行すると、鍵ペアが生成されます。

pub_key.pem

-----BEGIN RSA PUBLIC KEY-----
MEgCQQDUj1EIrod9jr3qxVDzZCOMs3QiE7sypBnet4u0RrM4GVGaG/Z3fBX1CPnV
H5MQOgPLdnOLwqnK/jPipSeAE0XvAgMBAAE=
-----END RSA PUBLIC KEY-----

private_key.pem

-----BEGIN RSA PRIVATE KEY-----
MIIBPQIBAAJBANSPUQiuh32OverFUPNkI4yzdCITuzKkGd63i7RGszgZUZob9nd8
FfUI+dUfkxA6A8t2c4vCqcr+M+KlJ4ATRe8CAwEAAQJACmhuFle9aKd5oypAOXq4
xuXulNCUhPlGDwK7w3sGteN4mB9/0EPoJ4yu0CaWzJ2xep4UEFZB1yhq/Y8+y6Hc
6QIjAO1qF8slYITOr0WArSq704tmDryPj2idHyBj8VYW8qk7ADUCHwDlMx/utDDx
BBVBxIdC/1MQzH2WK7NHCsmlEt1VehMCIwCnc3z0u5goE99rliaNTY0XdRRPyrHL
h4a8wcEmh2kAE61BAh8A31+PDHWiiRIAoYMmjB4IV4PkFXnrlB4oXW/gNBDvAiJn
rI5eJW8raXMM+Bv9wbQGZ4Q7aAGfa9YNXIadw8XCV8Oq
-----END RSA PRIVATE KEY-----

これらはセットであるからこそ、意味があります。
なお、通常は秘密鍵の内容は公開すべきではありません。

鍵を用いた暗号化と復号化

生成した鍵を用いて、RSA暗号を試してみましょう。
便宜上、暗号化と復号化をまとめて行います。

それらを行うコードは、以下。

import rsa

pub_file_path = "pub_key.pem"
private_file_path = "private_key.pem"

with open(pub_file_path, mode='rb') as f:
    pub_str = f.read()
    pub_key = rsa.PublicKey.load_pkcs1(pub_str)

with open(private_file_path, mode='rb') as f:
    private_str = f.read()
    private_key = rsa.PrivateKey.load_pkcs1(private_str)


message = 'RSAで暗号化'.encode('utf8')

# 暗号化
crypto = rsa.encrypt(message, pub_key)
print(crypto)

# 復号化
decode_message = rsa.decrypt(crypto, private_key)
print(decode_message.decode('utf8'))

上記コードを実行した結果は、以下のように表示されます。

b"W\x87;L`\x05xt\xb8\xcdj#0\x1e\x10D\xaf^\xf9\xfc\xca\xd2\xa7\xb9DV\x1fZ\xe1Wk\xb6@\x01'G:\t@\xde\x03L\x0e\x9e\xc4\xb4}{\xb8\x85\xefF\x1e5\x88\xff\xca\x9e\x1d\xd7\xd7w\x0f\xd4"
RSAで暗号化

これらは、暗号化されたメッセージと復号化されたメッセージです。
コードの大まかな説明としては、次のようになります。

まずは、公開鍵・秘密鍵をそれぞれ読み込みます。
そして、公開鍵を用いてデータの暗号化を実施。
最後に、暗号化されたデータを秘密鍵により復号化します。

以上、Python-RSAの動作確認を説明しました。

タイトルとURLをコピーしました