こんにちは、みんな。
私はRSAの公開鍵と秘密鍵、およびPyCryptoでの暗号化/復号化を少し試してみましたが、私には奇妙なように見える問題に遭遇しました(おそらく、現在の動作方法は非常に理にかなっていますが、私は知りません. RSA 非対称暗号化についてよく知らないので、困惑しています)。私が遭遇したのは、公開鍵だけを持つものを解読できないことです。
これが問題です。サーバーとクライアントがあります。サーバーがクライアントを「認識」して登録し、「既知のデバイス」のリストに表示するようにします。クライアントはサーバーの公開鍵を持ち、サーバーはクライアントの公開鍵を持つため、クライアントがサーバーと通信するとき、クライアントの秘密鍵とサーバーの公開鍵でデータを暗号化します。これを行うことにより、適切なサーバーのみが (秘密鍵を使用して) データを開くことができ、送信者が実際にクライアントであると主張するクライアントであることを確認できます。私はこの非対称暗号化の初心者なので、どう思いますか。アイデアは、これらのクライアントの 1 つが起動すると、その公開鍵を送信するというものです (もちろん、サーバーの公開鍵で暗号化されていますが、それは 'ねえ、私は新しいクライアントで、これが私の公開鍵です。その鍵を私のUUIDに登録してください」とサーバーは従い、その公開鍵をクライアントのUUIDに関連付け、その鍵を使用してそのクライアントからのデータを復号化します。クライアントの公開鍵を送信し、その秘密鍵を秘密に保ちたいだけです、シークレット(プライベートですよね?)
私はopensslとPyCryptoを使用する非常に単純なPythonスクリプトを使用していくつかのテストを行っています(実際には、サーバー/クライアントアーキテクチャなどでも...秘密鍵で何かを暗号化し、公開鍵で復号化しようとしています)
まず、公開/秘密鍵セットを次のように作成しました。
openssl genrsa -out ~/myTestKey.pem -passout pass:"f00bar" -des3 2048
わかりました、最初に私を少し困惑させます...秘密鍵と公開鍵の両方を含むファイルを1つだけ生成します...まあ...わかりました...何でも。次の方法で公開鍵を抽出できます。
openssl rsa -pubout -in ~/myTestKey.pem -passin pass:"f00bar" -out ~/myTestKey.pub
だから私は、秘密鍵(実際には秘密鍵と公開鍵)のカップルと公開鍵~/myTestKey.pem
を~/myTestKey.pub
それぞれ と に持っていると思いました。ええと... PyCryptoはこのアセンブリが好きではないので、どうやら私は何か間違っているようです。理由はわかりません。
encryptor.py
" " と " "という 2 つの非常に単純なテスト スクリプトがありdecryptor.py
ます。" encryptor.py
" は何かを秘密鍵で暗号化し、" decryptor.py
" はそれを公開鍵で復号化する必要があります。私は知っています... 私はオリジナリティのパラゴンです...
そこで、文字列 " Loren ipsum " を " encryptor.py
" (秘密鍵を使用) で暗号化します。
-----------encryptor.py ----------------
#!/usr/bin/python
from Crypto.PublicKey import RSA
def encrypt(message):
externKey="/home/borrajax/myTestKey.pem"
privatekey = open(externKey, "r")
encryptor = RSA.importKey(privatekey, passphrase="f00bar")
encriptedData=encryptor.encrypt(message, 0)
file = open("/tmp/cryptThingy.txt", "wb")
file.write(encriptedData[0])
file.close()
if __name__ == "__main__":
encryptedThingy=encrypt("Loren ipsum")
そして、それはうまくいきます。ええと...そう思うのですが、ファイル " /tmp/cryptThingy.txt
" には意味不明なことがたくさんあります。本当に、本当に暗号化されているように見えます。
しかし、公開鍵だけを含むファイルだけを使用して復号化しようとすると...
-----------decryptor.py ---------------
#!/usr/bin/python
from Crypto.PublicKey import RSA
def decrypt():
externKey="/home/borrajax/myTestKey.pub"
publickey = open(externKey, "r")
decryptor = RSA.importKey(publickey, passphrase="f00bar")
retval=None
file = open("/tmp/cryptThingy.txt", "rb")
retval = decryptor.decrypt(file.read())
file.close()
return retval
if __name__ == "__main__":
decryptedThingy=decrypt()
print "Decrypted: %s" % decryptedThingy
... PyCryptoは次のように叫びます。
File "/usr/local/lib/python2.7/dist-packages/pycrypto-2.5-py2.7-linux-i686.egg/Crypto/PublicKey/RSA.py", line 107, in _decrypt
mp = self.key._decrypt(cp)
TypeError: Private key not available in this object
はい、もちろん使えません!公開鍵を抽出しました!それを正しく行う方法を見つけるのに2時間かかりました!!
私は何が欠けていますか?私が言ったように、私はこの公開/秘密鍵の非対称キー暗号化ではかなり初心者なので、コアの「概念エラー」がある可能性があります...ヒントをいただければ幸いです。
前もって感謝します!