「プログラムで公開鍵・秘密鍵を作成したい」
「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.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年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の動作確認を説明しました。