2016-05-08 20 views
0

RSAとAESを使用してメッセージを暗号化して署名する標準的な方法を探しています。RSAとAESを使用した暗号化/復号化。基準?

秘密を送信するためのアリスのアクション、ボブに署名されたメッセージ:

AES = random()  
message' = encrypt(message, AES) 
AES' = encrypt(AES, Bob's public RSA) 
messageHash = hash(message') 
signature = encrypt(messageHash, Alice's private RSA) 
send(Bob, AES') 
send(Bob, message') 
send(Bob, signature) 

アリスから、署名されたメッセージを秘密を受信するためのボブの行動:

私は擬似コードで行わアクションは、このようにしていることを理解します
AES', message', signature = split(input) 
AES = decrypt(AES', Bob's private RSA) 
messageHash = decrypt(signature, Alice's public RSA) 
receivedMessageHash = hash(message') 
messageHash == receivedMessageHash? --> bail out if unequal 
message = decrypt(message', AES) 

ので、アリスは、ランダムAESキーを選択することでメッセージを暗号化し、それを復号化するためのAESキーと発信元として彼女を証明するための署名の暗号化されたバージョンと一緒に、ボブにこれを送ります。

もちろん、複数の人に送信するなど、署名などの必要はありませんが、このような設定を探しています。たぶん私は何か間違ったことを理解しています。私の疑似コードは精度が不足しているか、バグがあります。

CryptoなどのPythonライブラリやopensslなどのUnixシェルツールを使用して、この手順をすべて一歩一歩進めることができます。

しかし、パディングを実装する方法について悩むことなく、またはメッセージを受信するときに擬似コードで使用されるsplit()関数を標準的な方法で探しています。私は、ライブラリやツールセット、あるいは私のためにこれを行い、おそらく同様の仕事をしている他のプログラムとの相互運用を可能にするものがなければならないと思う。

質問:

  1. が可能と典型的な、上記の私のセットアップですか?あるいは、論理的な誤り、欠陥、または攻撃可能な側面を含んでいますか?
  2. 他のプログラムとの相互運用性を維持するために私は(いくつかのRFC、PKCS、...)に固執するべきである私のユースケースの標準フォーマットはありますか?もしそうなら、どのソフトウェアがUnixコマンドラインツールとして利用できるかPythonライブラリこの規格を扱うことができますか?

私は他の選択されたアルゴリズムでそれぞれを交換するオプションを使用してRSAおよびAESに固執することを好むだろうが、固定されたアルゴリズムのセットのためのソリューションも同様に歓迎されるであろう。

私が言ったように、アリスからボブに送信することは私の最初のアプローチですが、複数の受信者に送信することは素晴らしいボーナスになります。

+0

私は、標準を探していることを強調するために私の質問を言い換えましたが、それを実装するライブラリでは必ずしも必要ではありません。私は何に固執するか、私のユースケースを実装する方法を知りたい。私はこれが本当に話題ではないと思います。 (もちろん、それを行っている図書館があれば、私も興味がありますが、それは主要な話題ではありません。) – Alfe

答えて

2

gnupgを使用して、送信したいものを暗号化して署名することができます。

暗号化の権利の取得は、ハードです。だから基本的に暗号の第一原則は "DIYではない"です。

しかし、あなたがしなければならない場合は、最初にこれらのチュートリアルを見る:the state of crypto in Pythonwhat to do when you need cryptocrypto 101

+0

私は質問を書く前にPGPとGPGを考えました。彼らは私のユースケースを過酷に思っていて、特にキーハンドリングをもっと複雑にしたいと思っていました。しかし、このリンゴを噛むことは、最初から鍵交換のような後の問題を解決するかもしれない。提案していただきありがとうございます! – Alfe

+0

gnupgが複雑なように見える理由は、gnupgが最も優れている理由です。また、安静時に鍵を保護します。したがって、キーフレーズ。キーを生成してAESに呼び出すよりも、暗号化のほうが重要です! –

+0

私は鍵を保護するような他の側面から抽象化したい。それは私がこれらの面を無視しようとしているわけではありません;-) – Alfe

関連する問題