ただの技術メモ

個人備忘録

HTTPS通信の仕組み

SSLSSLサーバー証明書)を用いたHTTPS通信は、共通鍵暗号方式と公開鍵暗号方式の両方を用いたハイブリット形式で行われます。

以下でそれぞれの暗号方式の仕組みをまとめます。

共通鍵暗号方式

概要

  • 暗号化する際と復号化する際に共通の鍵を利用する暗号化方式
  • 暗号化と復号化どちらにも共通の鍵を利用するので共通鍵は公開されず、データ送信側とデータ受信側のみで共有

f:id:chann_r:20211218111951p:plain
共通鍵暗号方式

メリット・デメリット

  • 共通の鍵を利用するため処理速度が速いのがメリット
  • 通信毎に共通鍵が必要なので鍵の作成や管理、安全な配布が課題

公開鍵暗号方式

概要

  • 暗号化する際と復号化する際に公開鍵と秘密鍵という別々の鍵を利用する暗号化方式
  • データ受信側は秘密鍵を使って公開鍵を作成し、データ送信側は公開鍵を受信します。データ送信側は公開鍵で暗号化し、データ受信側は秘密鍵で復号化
  • 秘密鍵はデータ受信側が大切に保管し、公開鍵は誰でも取得できる場所に公開されます。

f:id:chann_r:20211218112025p:plain
公開鍵暗号方式

メリット・デメリット

  • メリットは安全に通信できること
  • 暗号化と復号化に別の鍵を利用するため処理に時間がかかってしまうのがデメリット

ハイブリット方式

モチベーション

以上の2つの暗号化方式を踏まえると、通信自体は処理速度が速い共通鍵暗号方式で行いたいです。しかし、共通鍵の共有がリスクになってしまいます。そのため、この共通鍵の共有を公開鍵暗号方式で行って通信自体は共通鍵暗号方式でやるのがハイブリット方式です。

通信の流れ

  1. データ送信側(ウェブサーバー)は秘密鍵と公開鍵、サーバー証明書を用意する。

  2. データ受信側はサーバー証明書を受信し、ブラウザのルート証明書サーバー証明書を検証する。

    検証の流れ

  3. データ受信側は共通鍵を生成して、サーバー証明書内の公開鍵で共通鍵を暗号化する。この公開鍵で暗号化された共通鍵をデータ送信側に送信することで共通鍵を安全に共有できる。

サーバー証明書を作る流れ

サーバー証明書とは、通信相手に偽りがないこと(通信先のサーバーがきちんと実在すること)を公正な第三者機関である認証局(CA)が証明して出す証明書

  1. サーバー管理者が認証局に証明書を発行するリクエストを送る(CSR: Certificate Signing Request)

    CSRは申請する会社の情報や公開鍵などの情報をエンコードしたテキストファイル。

  2. 認証局CSRを受け取って、認証ができたらCSRに署名を行う。

    署名はCSRのデータをハッシュ関数にかけてハッシュ値を算出し、署名生成鍵(秘密鍵)で暗号化したものを元のCSRに付与すること

参考

dev.classmethod.jp