私はSSLを避けたい理由、 しかし、私は可能な限りセキュリティで保護されたセッションを作りたいと思うので(私は要求を暗号化することを決めました - JS側とC#側) 私は私にとって適しているかもしれない解決策を思いついた:
- JSの要求を特定の鍵とIV(AES)で暗号化します。
- 要求をサーバーに送信します。
- サーバ上で - 別の鍵(AES)で要求を暗号化する
- 応答をクライアントに送り返します。
- 最初のキーを使用して応答を復号化します。
- 要求をサーバーに送信します。
- サーバー上で - 第2のキーを使用して要求を復号化します。
今、私は暗号化に慣れていません。 同じキーがサーバとクライアントの両方で使用されている場合(おそらく同じキーが使用されているため) 別のキーを使用すると、クライアント上で二重暗号化されたメッセージを復号化できません。
どのように私は現在のアルゴリズムでこの問題を克服することができますか?これは全くできますか? そうでない場合は、これをシミュレートする別の方法がありますか?
頭に感謝します。 (必要に応じてコードを提供する)
回答:
回答№1は0ほとんどの暗号化アルゴリズムでは、すなわち、シーケンス「キーA」 - 「キーB」を暗号化に使用する場合は、復号化に「キーB」 - 「キーA」を使用する必要があります。
あなたは "Key Client" - "Key Server"シーケンスで暗号化し、同じ(a.o.t.)逆のシーケンスで解読しようとします。これはうまくいきません。
暗号化キーをハンドシェイクする良い方法は、
- 双方向のランダムセッション塩を交換する
- セッション塩の一部としてリプレイセーフ(例:確認済みのタイムスタンプ)を使用する
- セッション塩と共有秘密(例えば、ユーザの塩漬けされたパスワードハッシュ)から1組のハッシュを作成する。
- これらのハッシュをIVとキーとして使用する