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()
関数を標準的な方法で探しています。私は、ライブラリやツールセット、あるいは私のためにこれを行い、おそらく同様の仕事をしている他のプログラムとの相互運用を可能にするものがなければならないと思う。
質問:
- が可能と典型的な、上記の私のセットアップですか?あるいは、論理的な誤り、欠陥、または攻撃可能な側面を含んでいますか?
- 他のプログラムとの相互運用性を維持するために私は(いくつかのRFC、PKCS、...)に固執するべきである私のユースケースの標準フォーマットはありますか?もしそうなら、どのソフトウェアがUnixコマンドラインツールとして利用できるかPythonライブラリこの規格を扱うことができますか?
私は他の選択されたアルゴリズムでそれぞれを交換するオプションを使用してRSAおよびAESに固執することを好むだろうが、固定されたアルゴリズムのセットのためのソリューションも同様に歓迎されるであろう。
私が言ったように、アリスからボブに送信することは私の最初のアプローチですが、複数の受信者に送信することは素晴らしいボーナスになります。
私は、標準を探していることを強調するために私の質問を言い換えましたが、それを実装するライブラリでは必ずしも必要ではありません。私は何に固執するか、私のユースケースを実装する方法を知りたい。私はこれが本当に話題ではないと思います。 (もちろん、それを行っている図書館があれば、私も興味がありますが、それは主要な話題ではありません。) – Alfe