クライアントはサーバーのプライベートキーなしでデータを復号できるのか?(結論:できません — 理由はこちら)

HTTPS や WSS(暗号化された WebSocket)経由で安全なウェブサイトやサービスを利用するとき、ブラウザとサーバーの間では裏側で安全な通信のための“握手”が行われています。その目的は、通信内容を誰にも盗み見されないようにすることです。

よくある誤解の一つはこうです: 「クライアントがサーバーのパブリックキーを持っているなら、サーバーデータを復号できるのでは?」 あるいは、 「クライアントもサーバーのプライベートキーが必要なのでは?」

答え:いいえ。クライアントはサーバーのプライベートキーを持っていませんし、持つ必要もありません。

その理由を見ていきましょう。


TLS の基本:2つのフェーズ

TLS(Transport Layer Security)は HTTPS や WSS を支える暗号化プロトコルで、次の2段階で構成されています:

1. ハンドシェイクフェーズ(非対称暗号)

  • クライアントはサーバーに接続し、**証明書(Certificate)**を受け取ります。これには パブリックキー が含まれています。
  • クライアントとサーバーはこのパブリックキーを使って、共有の秘密情報(セッションキー)を安全に作成します。
  • 古い方式では、クライアントが「pre-master secret」をパブリックキーで暗号化してサーバーに送り、サーバーはそれを プライベートキー で復号します。
  • あるいは(最近では一般的な)_Diffie-Hellman 鍵交換_で、サーバーがプライベートキーを使って署名し、身元を証明します。

プライベートキーはこの段階でのみ使用され、実際のデータ通信には使われません。

2. データ交換フェーズ(対称暗号)

  • ハンドシェイクの後、セッションキーが両者の間で確立されます。
  • このキーは 対称鍵 で、クライアントとサーバーの両方がこの1つのキーを使って通信データを暗号化・復号します。
  • セッションキーは一時的なもので、毎回の接続で新しく生成されます。

つまり:

  • プライベートキーは ハンドシェイク中のみ使用
  • セッションキーは 本通信で使用

パブリックキーはプライベートキーから生成される

サーバーの パブリックキー は、プライベートキー から数学的に導き出されたものです。

  • プライベートキーはサーバーに安全に保存されます。
  • パブリックキーは証明書に含まれており、クライアントに自由に配布されます。
  • どちらか一方で暗号化されたものは、もう片方でしか復号できません(非対称暗号の基本)。

シーケンス図:TLS ハンドシェイクとデータ通信

sequenceDiagram
    participant Client
    participant Server

    Client->>Server: ClientHello (random, cipher suites)
    Server->>Client: ServerHello (random, cert with public key)
    Server-->>Client: [Optional] Certificate Request
    Note over Server: Server uses Private Key to sign handshake messages

    Client->>Server: Pre-master secret (encrypted with Public Key)
    Note over Server: Decrypts with Private Key
    Client-->>Server: ChangeCipherSpec
    Server-->>Client: ChangeCipherSpec
    Client->>Server: Finished (encrypted with Session Key)
    Server->>Client: Finished (encrypted with Session Key)

    Note over Client,Server: Secure channel established using Session Key
    Client-->>Server: Encrypted data
    Server-->>Client: Encrypted response

なぜクライアントにプライベートキーは不要なのか?

  • クライアントは パブリックキー を使ってセッションキーの確立に関与します。
  • ハンドシェイクの後、両者は同じセッションキーを共有しています。
  • データ通信はすべてセッションキーを用いた 対称暗号 で暗号化されており、クライアントはそれで復号できます。

プライベートキーがなくても、クライアントはセキュアに通信できます。


もしサーバーにプライベートキーがなかったら?

  • TLS ハンドシェイクに失敗します。
  • サーバーは pre-master secret を復号できず、署名もできません。
  • 結果:接続は確立できません

TLS で使われるキーのまとめ

鍵の種類 保持者 役割
パブリックキー 証明書に含まれる クライアントがセッションキー交換に使用
プライベートキー サーバーだけ 証明や復号に使用(ハンドシェイク時)
セッションキー クライアント & サーバー 実際の通信データを暗号化・復号するため

まとめ

サーバーのプライベートキーは金庫の鍵のようなもの。常にサーバーに安全に保管され、最初のやり取り(ハンドシェイク)だけに使われます。

それ以降の通信はすべて、一時的に生成されたセッションキーによって守られています。

つまり、クライアントにプライベートキーは必要ありません。そして、あってはいけません。


Get in Touch with us

Chat with Us on LINE

iiitum1984

Speak to Us or Whatsapp

(+66) 83001 0222

Related Posts

Our Products