私は、2 台の電話が数分間にわたって大量のデータを交換する Android アプリケーションを作成しています。この通信を暗号化したいので、利用可能なさまざまな暗号化オプションを調査しています。非対称暗号化 (RSA など) を使用してセッション キーを交換し、対称アルゴリズム (AES など) を使用して実際にデータを暗号化/復号化するハイブリッド アルゴリズムが最も適しているようです。
ハイブリッド暗号化について私が知っていることから、2 つのデバイス間で送信されるすべてのパケットは、パケット内に埋め込まれた (相手側の公開鍵で暗号化された) 新しいセッション キーを使用して、相手側での復号化を容易にする必要があります。
CPU を節約するために、RSA を使用して交換されるセッション キーを 1 つだけ使用し、このキーを使用してすべてのデータを暗号化/復号化することを検討しています。これにより、費用のかかる RSA 操作を節約できます。しかし、これは推奨されていないことを理解していますか? 誰かがこれを確認して、どうすればよいか教えてもらえますか?
編集:
ここにさらに情報を追加すると思いました-
通信プロトコルは完全にカスタムで私独自のものです。データは、暗号化されていない UDP パケットで送信され、多数のメタデータと暗号化されたペイロードが含まれます。したがって、通常の SSL / TLS の使用は除外されます。
また、セッションごとに新しい秘密鍵と公開鍵を生成し、公開鍵を交換してから、それを使用して AES で使用されるセッション鍵を交換します。2048 ビットの RSA と 256 ビットの AES を使用しています。これは、私の知る限り、ほとんどのコミュニケーションにとって十分すぎるほどであり、おそらくやり過ぎです。暗号に関する私の知識が優れていないことは認めますが、これを可能な限り安全にするために、できる限り多くのことを読んで学んでいます.