この設計は、クライアントとサーバー間のトランスポートセキュリティ用です。クラウドストレージシステムに使用する予定です。私はそれがあなたを知っている誰に対しても安全であって欲しいです。
私は(NSAのような)誰もが私にデータへのキーの引き渡しを強制しないようにしようとしています。そのため、私でもデータにアクセスできないようにすることが目標です。
仕組みは次のとおりです。
2つの層があります。外側には、恒久的な暗号化/復号化キーのペアを持つRSA-4096暗号化の層があります。内部にはRSA-4096暗号化の別のレイヤーがありますが、どこにも保存されておらず、裏返すことができない一時的な鍵ペアを使用しています。外部層を使用してサーバーのIDを確認し、内部層を使用して接続を保護します。
このスケマティックに、私が表示していない可能性のある穴はありますか?永続的な秘密キーを強制的に裏返すと、サーバーの偽装が可能になり、一時的なキーが役に立たなくなるという事実に加えて、また、どうすればこれを解決できますか?
はい。最初の問題は、独自の暗号プロトコルを作成していることです。しないでください。代わりにTLSまたはSSHを使用してください。
第二に、安全なプロトコルを書くことについて書かれた多くの本があり、プロトコルの一般的な問題すらあります。あなたのアルゴリズムはそれらを持っています。
第3に、順不同のトラフィック、変更されたメッセージ(暗号化について言及しているが整合性チェックについて言及していない)、暗号化モードが定義されていない(そして問題がある可能性がある)、初期化ベクトルが記述されていない(そして問題がある)、圧縮について言及していない、削除されたメッセージについて何もしていない、この会話に挿入された同じキーを持つ以前の会話からのメッセージを追跡していない、一時キーの一時的な定義をしていないです。
4番目に、遅い公開鍵暗号を使用しています。
第5に、脅威モデルはありません。投稿には当初、実際に達成しようとしていることの定義がありませんでした(ただし、コメントでそれを追加しました)。
そして、私は実際には暗号の専門家ではなく、これらすべての欠陥を一目で確認できるので、専門家が実際に確認できる欠陥がいくつあるか想像してみてください。
欠陥のある新しいプロトコルを作成しないでください。必要に応じて、既存のものを使用してください。