はじめに
概要
この文書は、SSL(Secure Sockets Layer)という技術を分かりやすく解説し、特にパスワードなどの機密情報をどのように守るかを中心に説明します。専門的な語は必要最小限にとどめ、具体例を交えて丁寧に伝えます。
なぜ重要か
インターネット上でログインするときやオンライン決済をするとき、通信が第三者に見られるとパスワードが盗まれます。SSLは、ブラウザとサーバーの間の通信を暗号化して、情報の盗聴や改ざんを防ぎます。例えば、銀行のサイトやショッピングサイトの保護に使われます。
本書の目的と構成
本書はSSLの基本から暗号化のしくみ、主要な機能、そしてパスワード保護の実装方法までを順を追って説明します。全7章で、初心者でも理解しやすい表現を心がけています。
想定読者
システム管理者や開発者、ウェブサイト運営者、そしてセキュリティに関心のある一般の方に役立ちます。技術的な背景がなくても読み進められるように配慮しています。
SSLの基本定義と役割
定義
SSL(Secure Sockets Layer)は、インターネット上でデータを安全にやり取りするための仕組みです。通信内容を暗号化し、送信先が正しいかを確認し、データが途中で改ざんされていないかを検証します。現在は改良版のTLSが広く使われますが、目的は同じです。
主な役割
- 暗号化:送受信されるデータを読み取れない形に変えます。たとえばパスワードやカード番号を保護します。
- 認証:接続先のサーバーが本物かどうかを証明します。証明書という仕組みで確認します。
- データ整合性:通信途中で内容が変わっていないかをチェックします。改ざんを検出します。
具体的な場面での動き
Webサイトにログインするとき、ブラウザとサーバーは最初に鍵を交換し、以降の通信を暗号化します。これにより、第三者が通信を盗み見しても意味のある情報を得られません。オンラインショッピングやメールの送受信、API連携などで同様に使います。
なぜ重要か
個人情報や機密データを安全に扱うために不可欠です。盗聴や改ざん、なりすましといったリスクを低くします。ネットサービスの信頼性を支える基盤といえます。
SSLの暗号化メカニズム
暗号方式の組み合わせ
SSLは「非対称暗号」と「対称暗号」を組み合わせて使います。非対称は鍵が2つ(公開鍵と秘密鍵)、対称は同じ鍵を両方が使います。性能面を考え、実際の通信は速い対称暗号で行い、鍵のやり取りに非対称暗号を使います。
公開鍵と秘密鍵の役割
ウェブサイトは秘密鍵を保有します。公開鍵は証明書に入れて公開します。ブラウザは公開鍵で情報を暗号化し、サーバーだけが秘密鍵で復号します。秘密鍵はサイト所有者だけが知っているべきものです。
ハンドシェイクと鍵交換
接続開始時にブラウザとサーバーは暗号方式で合意します。ブラウザはサーバーの公開鍵を使い、セッション用の「共有情報」(例:プレマスターシークレット)を暗号化して送ります。サーバーは秘密鍵で復号し、両者で同じ対称セッション鍵を生成します。これが鍵交換の流れです。
セッション鍵の利用と有効期間
生成した対称セッション鍵は、その通信セッションだけで使います。高速に大量のデータを暗号化でき、安全性のため時間やセッションで有効期間を限定します。
身近な例で説明すると
公開鍵は鍵穴が見える箱、秘密鍵は箱を開ける専用の鍵です。誰でも箱に手紙を入れて封すれば、箱を開けられるのは鍵を持つ人だけです。一時的な対称鍵は、その手紙を短時間だけ暗号化する封筒のようなものです。
SSLの3つの主要メカニズム
SSLは安全な通信を確保するために、次の3つの仕組みを同時に使います。どれも役割が違うので、例を交えて分かりやすく説明します。
1. 暗号化
データを他人が読めない形に変えます。例えると中身が見えない封筒に入れるようなものです。暗号化は通信中に盗み見されても内容が分からないようにする仕組みで、送受信の速度や用途に応じて短い共通鍵(対称鍵)を使った方法が使われます。たとえば銀行のウェブサイトで口座情報を送るとき、暗号化で守られます。
2. 認証
相手が本物かどうかを確かめます。これは身分証の提示に似ています。サーバーは証明書を示し、証明書を発行した信頼できる機関が正当性を保証します。ハンドシェイク中に相手の証明を確認し、不正な偽装を防ぎます。必要ならクライアント側も証明書で認証できます。
3. データ整合性
送ったデータが途中で改ざんされていないかを確かめます。封筒に封がされているかを確認するイメージで、改ざんがあれば検出できます。SSLではハッシュや署名に相当する仕組みを使い、受け取ったデータが送信時と同じであることを保証します。
これら3つが組み合わさることで、安全で信頼できる通信が実現します。
SSLプロトコルの構成要素
SSLレコードプロトコル
SSLの基礎となる部分です。アプリケーションデータを小さなフラグメントに分け、必要に応じて圧縮します。その後、メッセージ認証コード(MAC)を付けて整合性を保証し、暗号化して送信します。たとえば、ブラウザが送るHTTPデータはこのプロトコルで安全に運ばれます。
ハンドシェイクプロトコル
通信を始める際に使います。クライアントとサーバーが暗号方式や鍵を決め、必要なら相互に認証します。鍵交換の後にセッション鍵が作られ、以降の通信はこの鍵で保護されます。初回接続時に重要な役割を果たします。
Change-Cipher Specプロトコル
暗号設定の切替えを通知します。新しい暗号パラメータや鍵が有効になる直前に短いメッセージを送って、双方が同じ状態になることを確認します。誤差があると安全な通信が成立しません。
アラートプロトコル
エラーや警告を伝えるための仕組みです。たとえば、証明書が無効だったりメッセージ整合性が取れない場合に通知します。重大な問題なら接続を切断する指示も送れます。
データの流れ(簡単な例)
- ハンドシェイクで鍵を確立
- Change-Cipher Specで暗号化を開始
- レコードプロトコルでデータをMAC付け暗号化して送信
- 問題発生時はアラートで通知
各プロトコルは役割がはっきり分かれ、安全で信頼できる通信を実現します。
SSLの主要機能
暗号化
通信内容を第三者から読めないようにします。たとえば、ウェブサイトでパスワードやクレジットカード番号を送るとき、SSLはデータを暗号化して盗聴を防ぎます。対話は読み取り不能な形に変わります。
認証
接続先が本当にそのサイトか確認します。認証局が発行した証明書を使い、銀行やショッピングサイトが偽サイトでないことを確かめます。ユーザーは安心してサービスを利用できます。
整合性
送ったデータが途中で改ざんされていないか確認します。小さな変化でも検出する仕組みがあり、受け取った内容が送信時と同じであることを保証します。
否認防止
送信した側が「送っていない」と主張できないようにします。デジタル署名により、誰が送ったかを示す証拠を残します。取引記録などで役立ちます。
公開鍵暗号化
安全に鍵を交換する仕組みです。最初に公開鍵でやり取りし、その後は速い共通鍵で通信します。これにより安全かつ効率的な接続が可能になります。
セッション管理
一度確立した安全な接続を再利用したり、途中で途切れても安全に再開したりできます。ページを移動したり短時間接続が切れても、負担を減らして安全性を保ちます。
パスワード保護の実装
はじめに
SSL(正確にはTLS)はパスワードなどの送信中データを暗号化して盗聴や改ざんを防ぎます。ここでは実際の実装手順とサーバー側でやるべき追加対策を分かりやすく説明します。
実装の基本手順
- HTTPSを有効にする
- 信頼できる認証局(例: Let’s Encrypt)から証明書を取得してサーバーに導入します。ブラウザは証明書を検証し、安全な接続を確立します。
- TLSの設定を強化する
- TLS1.2/1.3を使い、古いプロトコルは無効にします。サーバーの推奨設定を適用してください。
- HSTSとリダイレクト
- 常にHTTPSへリダイレクトし、HSTSを有効にして中間者攻撃を減らします。
ブラウザ側とサーバー側の役割
- ブラウザは証明書を検証し、安全な対称鍵でパスワードを暗号化して送信します。
- サーバーはその接続を受け取り、平文のパスワードを直接保存してはいけません。
サーバーでの安全な保存方法
- ハッシュ化して保存する
- パスワードは復元できない形(ハッシュ)で保存します。具体例: bcryptやArgon2などの関数を使います。これにより、たとえデータが漏れても元に戻せません。
- ソルトを使う
- 各ユーザーごとに固有のランダム値(ソルト)を加えてハッシュ化します。これで同じパスワードでも別のハッシュになります。
追加の保護策
- 強力なパスワードポリシーとパスワード漏洩チェック
- 二要素認証(SMSや認証アプリ)を導入
- レート制限、ブルートフォース対策、ログ監視
- クッキーには Secure と HttpOnly、SameSite を設定
- 証明書の定期更新と設定の監査
実運用での注意点
- SSL/TLSは送信中の保護を担いますが、サーバー内の保存やアクセス管理も同じくらい重要です。総合的に対策を取ることでパスワードを安全に運用できます。












