まず、ステップ 3 にはいくつかのステップがありません。ステップ 3 で実際に行われることは次のとおりです。
- クライアントは証明書を検証します
- クライアントとサーバーはいくつかのメッセージをやり取りして、両者が使用できる秘密鍵暗号化の種類をネゴシエートします
- クライアントはその暗号化アルゴリズムの秘密鍵を作成し、その秘密鍵をサーバーの公開鍵で暗号化し、暗号化された秘密鍵をサーバーに送信します。
- サーバーは秘密鍵を使用して秘密鍵を復号化できるようになりました。
- クライアントとサーバーは秘密鍵アルゴリズムに同意し、秘密鍵を共有します。すべての通信は、共有秘密鍵で暗号化および復号化されるようになりました。
- クライアントは秘密鍵で資格情報を暗号化します...
この理由は 2 つあります。まず、公開鍵 crypto の計算は、秘密鍵 crypto の計算よりもはるかにコストがかかります。アイデアは、その高価な計算を 1 回だけ実行して、共有シークレットを交換できるようにすることです。第 2 に、クライアントはサーバーの公開鍵を知っていますが、クライアントは公開鍵を持っていない可能性があるため、サーバーはどのようにして秘密のメッセージをクライアントに送信できるのでしょうか? そのため、共有秘密鍵について合意する必要があります。
とにかくあなたの質問に移ります:
サービスの秘密鍵はどこに保管されますか?
Windows では、オペレーティング システムによって提供される証明書ストレージにあります。他のオペレーティング システムでは、わかりません。
なぜ証明書が必要なのですか?
クレジット カードで芝刈り機を購入したいとしますが、私が詐欺師ではないかと心配しているとします。私がベガスへの旅費をあなたのカードに請求し始めたら起訴できるように、あなたは私の本当の名前を知りたがっています.
ですから、私たちが取引を行うとき、「エリック・リッパートは、この紙の所有者はエリック・リッパートであり、署名されたエリック・リッパートであると主張しています」と書かれた紙をお見せします. 私を信じてる?Eric Lippert をすでに信頼している場合は、その紙は必要ありません。また、Eric Lippert を信頼していない場合、その紙は信頼を確立しません。これが「自己署名証明書」です。
ここで、「VeriSign は、この書類の所有者は VeriSign に署名した Eric Lippert であると主張している」と書かれた紙を見せたら、問題は、VeriSign が私の身元を確認したことを信頼しますか? もしそうなら、これはあなたが話している相手が本人であるという証拠です。
それが証明書の目的です。認証局と呼ばれる相互に信頼できる第三者によって署名されているため、特定の公開鍵が実際に特定の組織に関連付けられていることが確立されます。
クレジット カードを使用してオンラインで何かを購入する場合、その Web サイトがそのカードに対して承認された請求のみを行うことを信頼していると思われます。この証明書は、暗号化に使用する公開鍵が実際にその Web サイトの公開鍵であり、悪意のあるハッカーの公開鍵ではないことを確認します。
しかし、公開鍵を含む証明書は公開されているため、誰かが証明書を取得してサーバーになりすますことはできませんか?
はい。ただし、秘密鍵である秘密鍵を盗まない限り、彼らの助けにはなりません。他人の証明書を持つ人は、公開鍵で暗号化されたメッセージを復号化できないため、クライアントと秘密鍵を交換することはできません! クライアントをだますことができたとしても、取得できるのは、クライアントが選択した秘密鍵でエンコードされたビットのストリームだけです。この秘密鍵は、証明書の秘密の半分がなければ攻撃者が取得することはできません。
つまり、秘密鍵へのアクセスを許可すると、誰かが私になりすます可能性がありますよね?
はい。システム全体のセキュリティは、秘密のままの秘密鍵に依存します。それが秘密鍵と呼ばれる理由です。攻撃者があなたの秘密鍵にアクセスできるようになった場合、彼らは勝手にあなたになりすますことができるので、秘密にして安全に保管してください。キーが危険にさらされた場合、証明書を取り消すことができるメカニズムがありますが、通常、損害はすでに発生しています。