SSLの基本をまとめておさらい – サーバ証明、認証、通信の秘匿、改竄チェック

ここ数日お仕事でSSLへの正確な理解が要求される事態が発生し、恥ずかしながら知ったかだったため対応に手間取りました。
こういう場合は素直にわかりませんと認めて、その後全力で勉強してキャッチアップする素直さが必要だと感じています。
こと暗号に関しては実作業を行うと急激に難易度が上がる傾向があって知ったかだと出来高ゼロになります。概念とか用語の理解が中途半端だとドキュメントを読み進めることが困難になり、すぐにわけがわからなくなります。

サーバ証明は丁寧なサイトが一杯あって勉強しやすいのですが、クライアント証明は一気に怪しくなります。このエントリはまず基本のサーバ証明について書いてみます。次回、ハマったクライアント証明書きます。

ものすごい詳しいサイトがとても参考になりました。

SSLのきほんの「き」

まずはSSLの基本。通信の暗号化。重要なポイントは次の2つ。2段構えになっています。

  • 通信内容自体はクライアントが生成した共通鍵を用いて暗号化する – (共通鍵暗号方式)
  • 共通鍵をサーバが生成した公開鍵、秘密鍵を用いてやり取りする – (公開鍵暗号方式)

また、第三者機関によるサーバ存在証明を行う認証機能があります。「証明書」はあくまで認証のための手段ですが、証明書にはサーバの公開鍵が含まれており、証明書から取得した公開鍵を使って鍵交換を行うため、かなりの勢いでゴッチャになります!!

  • サーバが実在することを「証明書」を用いて証明する
  • 第三者機関は証明書に秘密鍵を使って署名する
  • クライアントは第三者機関の公開鍵を使ってサーバ証明書の署名を確認する

第三者認証局が悪い奴でないことを証明するために、第三者認証局を別の第三者認証局が証明する仕組みになっています。これを証明書チェーンと呼びます。ルート認証局の証明書はOSに予めインストールされていることが普通です。

  • 最上位の認証局をルート認証局という
  • それ以下を中間認証局という
  • ルート認証局は絶対の信頼があり自己を証明する

さらに通信内容の改ざんチェックの機能があります。

  • サーバはデータを一方向関数(ハッシュ関数)に通しクライアントに送信する
  • クライアントはデータを同じハッシュ関数に通しサーバから送られてきた値と等しいことを確認する
  • 異なる電文から同じダイジェストが生成されるシノニムが発生したとき(h(x)=h(y))、x,yの求めにくさを強衝突耐性と呼ぶ
  • h(x)=h(y)からx,yを現実時間で求められた場合、強衝突耐性が破壊されたと言う
  • 与えられたダイジェストから、同じダイジェストを生成する異なるメッセージの求めにくさを弱衝突体制と呼ぶ
  • h(x)からh(x)=h(y)となるyを現実時間で求められた場合、弱衝突体制が破壊されたと言う
  • 暗号の世界で言う現実時間で求めることの「困難さ」は情報理論の「困難さ」とは直接関係がない
  • MD5,SHA-1といったアルゴリズムが採用されてきたがMD5は既に困難でなくSHA-1についても理論的な脆弱性が指摘されている。業界的にはSHA-1からSHA-2への移行が課題となっている。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする