質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
公開鍵認証

公開鍵認証とは、公開鍵と秘密鍵の2つの鍵の組を利用する、SSHで利用される認証方式です。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

4933閲覧

秘密鍵での暗号化、公開鍵での複合化について

yamadataro3

総合スコア12

公開鍵認証

公開鍵認証とは、公開鍵と秘密鍵の2つの鍵の組を利用する、SSHで利用される認証方式です。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/04 05:34

一般的には、以下のように公開鍵(public_key)で暗号化して秘密鍵(private_key)
で複合化すると思います。
import rsa

message = b"This is the message to be encrypted"
public_key, private_key = rsa.newkeys(1024)
encrypted_message = rsa.encrypt(message, public_key)
decrypted_message = rsa.decrypt(encrypted_message, private_key)
print(encrypted_message, decrypted_message, sep="\n\n")

=====================================================
やりたいことは、秘密鍵(private_key)で暗号化して
公開鍵(public_key)で複合化をしたいです。

import rsa

message = b"This is the message to be encrypted"
public_key, private_key = rsa.newkeys(1024)
encrypted_message = rsa.encrypt(message, private_key)
decrypted_message = rsa.decrypt(encrypted_message, public_key)
print(encrypted_message, decrypted_message, sep="\n\n")

そこで、上記のように書き換えて実行しましたが、以下のエラーとなります。

File "rsatest.py", line 8, in <module>
decrypted_message = rsa.decrypt(encrypted_message, public_key)
File "C:\Users\Spring\AppData\Local\Programs\Python\Python38\lib\site-packages\rsa\pkcs1.py", line 248, in decrypt
decrypted = priv_key.blinded_decrypt(encrypted)
AttributeError: 'PublicKey' object has no attribute 'blinded_decrypt'

エラーの回避方法、または秘密鍵(private_key)で暗号化して
公開鍵(public_key)で複合化するほかの方法等をご教示お願いできますでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

やりたいことは、秘密鍵(private_key)で暗号化して公開鍵(public_key)で複合化をしたいです。

それはできないです。
ただRSAなら、公開鍵暗号として「暗号化」(暗号化・復号)、「署名」(署名・検証) の2機能が使える(珍しい)方式なので、「秘密鍵で署名・公開鍵で検証」はできます。

なお、OpenSSLというライブラリの場合、(歴史的な経緯もあり) 「秘密鍵で署名」の内部動作をRSA_private_encrypt()という、「秘密鍵で暗号化」っぽい名前の関数が担当しています。
※実質は「秘密鍵で復号」とほぼ同じ処理 … RSA独自の特徴

これが使いたいということであれば、M2CRytpoというライブラリが、ほぼOpenSSLのラッパーになっているようで、以下のドキュメントにあるように、RSAクラスのメソッドに private_encrypt も入っています。そちらは選択肢としてありうるでしょう。
https://www.heikkitoivonen.net/m2crypto/api/M2Crypto.RSA.RSA-class.html

とは言え、敢えて内部動作の部分の機能を呼び出さなくても「署名・検証」の機能を呼び出せば事足りるだろうとは思います。
※例えば https://pycryptodome.readthedocs.io/en/latest/src/signature/pkcs1_v1_5.html

投稿2020/08/04 11:57

angel_p_57

総合スコア1672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

How can I encrypt with a RSA private key in python?の回答コードがそのまま求める答えになっているかと思います。

投稿2020/08/04 05:55

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問