あなたのアルゴリズムは逆向きであるため、機能しません。
公開鍵を使用して復号化することはできません。公開鍵は暗号化のみに使用されます。復号化には秘密鍵が必要です。これは、公開/秘密キー暗号化の基礎です。
代わりに、セッション キー ネゴシエーションを使用します。
- クライアントが接続すると、その公開鍵がサーバーに送信されます。
- サーバーは、適切な有効期限と適切なアンチリプレイ値とともに、安全なランダム AES セッション キーを生成します。
- サーバーは、クライアントの公開鍵を使用して安全なランダム AES セッション鍵ブロブを暗号化します
- サーバーは暗号化された BLOB をクライアントに送信します
- クライアントは、クライアントの秘密鍵を使用してセッション BLOB を復号化します
- クライアントは、セッション キーで暗号化された確認メッセージを送信します
- サーバーとクライアントは、共有セッション キーを使用して安全な通信を開始します。
いくつかの注意事項:
サーバーは、セッションを開始する前に、クライアントが信頼できることを確認する必要があります。これは、帯域外の手順を使用して実行できます (つまり、公開鍵は信頼できるサード パーティによって登録されます)。または、最新の API でよくあることですが、サーバーは公開鍵と秘密鍵のペアを生成し、それをクライアントに送信して、公開鍵を保持します。
リプレイを防ぐために、サーバーはセッション キーを適切に期限切れにする必要があります。
- クライアント (管理している場合) は、おそらくサーバーが信頼できるものであることを確認する必要があります (つまり、サーバーの既知の公開鍵を使用します)。