tadashi1996
@tadashi1996 (Tadashi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SSL通信について、以下の理解であっているか教えてください。

SSL通信について、以下の理解であっているか教えてください。

以下内容に対して、正しいか間違っているか教えてください。

私のSSL通信に対する理解

SSLの大まかな仕組み(下記はTLS1.2での認識記事(TLS1.3については、シーケンスそのものが変更されているらしいので、調査中))

  • こちらの記事がわかりやすかった。

    • ザクっとまとめると、以下の手順?(間違っているかもしれないので、間違っていたらご指摘ください。)
      • クライアント(ブラウザやopensslなどのssl通信を行うためのソフト)が、サーバーに SSL 通信のリクエスト
      • サーバーが秘密鍵と公開鍵を生成(秘密鍵はサーバー管理者が事前に作成して、証明書の発行時に対応する公開鍵を付与する)
        • 公開鍵を証明書に含み、クライアントに送付
      • クライアントが共通鍵を生成
        • サーバーから送られた証明書内に含まれる公開鍵で共通鍵を暗号化しサーバーに送付
      • サーバーは秘密鍵で共通鍵を復号
        • クライアントとサーバー以外の誰か(第三者)により改竄されてない事が担保されるので、以降共通鍵で通信を行う
  • 公開鍵に対応する秘密鍵を持っているのはのみなので、復号できる=改竄されていないことが担保できる。

    • しかし、公開鍵そもそもが改竄されていないかどうかは判別できない
    • そのために、証明書チェーンという仕組みが存在する
      • 仮に、サーバー証明書・中間証明書・ルート証明書のみだと前提の上だと、以下の様な形
        1. サーバー証明書を中間証明書が認証し、サーバー証明書に含まれる公開鍵が信頼できる事を証明
        2. 中間証明書をルート証明書が認証し、中間証明書に含まれる公開鍵が信頼できる事を証明

あれ、ルート証明書を認証するのはどこ?

上記サイトによると…

そのためルート証明書の検証を行う場合は、 接続元クライアントに インストールされている CA証明書群の公開鍵 と比較を行います。

なるほど。
クライアント(Opensslなどの、ssl通信を行うためのソフト)にそもそもルート証明書用の公開鍵の認証リスト?が入っており、そいつがルート証明書を認証するのか。

どこかのレッスンで見たスライドがわかりやすかったので、貼っておきます。
0D4C854F-B9F2-4B91-B08D-72973C4BC81D_1_105_c.jpeg


以上です。
忌憚ない、コメント・ご意見お待ちしてます。

2

2Answer

よくある突っ込みどころが1つあるので指摘させてください。

  • Bが共通鍵を生成
  • Aから送られた証明書内に含まれる公開鍵で共通鍵を暗号化しAに送付

最新のプロトコル(TLS1.3)では共通鍵を暗号化して送信する手法は廃止されました。
元々、前方秘匿性の観点から共通鍵をRSAで暗号化して交換するより、DHEやECDHEで鍵共有する手法が推奨されていました。
TLS1.2も生き残っているので、間違った説明とは言えないんですが、現在では推奨されていない古い手法です。

最近のちゃんとした記事だと、「共通鍵を暗号化」の文言は消えており、「共通鍵を共有」とかふんわりした表現になっています。
TLS1.3では全体のシーケンスも変更されているので、一度調べてみることをお勧めします。


以下は重箱の隅を突くような指摘なので、軽く読んでください。

  • HTTP(S)通信において「クライアント(ブラウザ)」と「サーバー」は役割が明確に分かれているので、「A」と「B」といった表現は避けた方が無難です。

  • 「複合」ではなく「復号」ですね。
    「復号化」も微妙な表現で、平文を暗号(暗号文)にすることは「暗号化」と呼びますが、暗号を平文にすることは「復号」と呼びます。
    (最近では復号化でもOKという話もありますが)

  • Aが秘密鍵と公開鍵を生成 公開鍵を証明書に含み、Bに送付
    秘密鍵はサーバー管理者が事前に作成して、証明書の発行時にその公開鍵を付与しておきます。(生成というと自動で作成されるイメージがあるので)

  • 複合化できる=改竄されていない
    共通鍵の復号の話かと思いますが、秘密鍵で復号できたからといって改竄されていないとみなすことはできません。

1Like

Comments

  1. @tadashi1996

    Questioner

    ご一読いただき、かつ、丁寧なご指摘、誠にありがとうございます。
    諸々修正させていただきました。
    一点だけ質問させていただいてもよいでしょうか?
    >共通鍵の復号の話かと思いますが、秘密鍵で復号できたからといって改竄されていないとみなすことはできません。

    こちらは、どう言った意味合いでしょうか?
  2. 公開鍵は誰でも取得できるため、理論上は第三者が別の共通鍵に改ざんすることは可能です。
    ただしクライアントが送った共通鍵は復号できないので、クライアントが送るリクエストの内容は読めず、あまり意味はありませんが。

    公開鍵暗号を使う目的は大きく「暗号化」と「デジタル署名」に分けられ、
    暗号化は盗聴を防止し、デジタル署名は改ざんを防止します。
    この鍵交換の場合は暗号化の方ですね。
  3. @tadashi1996

    Questioner

    返信わすれてました…
    ありがとうございます!!

Your answer might help someone💌