Tech Knowledge

IT技術者の知識共有を目的とした記事を書いています

SSL/TLS通信の基礎:情報の安全なやり取り

SSL/TLS通信の基礎について

インターネット上で情報をやり取りするとき、その情報が第三者に盗み見られたり、改ざんされたりしないようにするために、暗号化技術が必要です。SSL/TLSとは、インターネット上で暗号化された通信を行うためのプロトコル(通信のルール)のことです。SSL/TLSは、ウェブサイトやメールなど、さまざまなサービスで利用されています。

 

HTTPSの概要

HTTPSとは、HTTP(HyperText Transfer Protocol)にSSL/TLS(Secure Sockets Layer/Transport Layer Security)を組み合わせたプロトコルです。HTTPは、インターネット上でウェブサイトやアプリケーションと通信するための基本的なプロトコルですが、そのままではデータが暗号化されずに送受信されるため、セキュリティが低いです。HTTPSでは、HTTPの通信内容をSSL/TLSで暗号化することで、セキュリティを高めます。HTTPSを利用するウェブサイトやアプリケーションは、URLが「https://」で始まります。

 

SSL/TLSの仕組み

SSL/TLSの仕組みは、大きく分けて二つのフェーズがあります。一つ目は、暗号化された通信を行うための鍵を交換するハンドシェイクと呼ばれるフェーズです。二つ目は、ハンドシェイクで交換した鍵を使って、実際にデータを暗号化して送受信するフェーズです。

ハンドシェイクでは、以下のような手順で鍵を交換します。

1. クライアント(例えばブラウザ)がサーバー(例えばウェブサイト)に接続します。
2. サーバーは、自分の身元を証明するために、証明書と呼ばれる電子的な証明書をクライアントに送ります。証明書には、サーバーの公開鍵という暗号化の鍵が含まれています。
3. クライアントは、証明書が正しいかどうかを検証します。証明書が正しいと判断されたら、クライアントはサーバーの公開鍵を使って、自分が生成した秘密鍵という別の暗号化の鍵を暗号化してサーバーに送ります。
4. サーバーは、自分の秘密鍵という対応する鍵を使って、クライアントから送られた秘密鍵を復号します。これで、クライアントとサーバーは同じ秘密鍵を共有することになります。

このようにして、ハンドシェイクが完了します。この後は、クライアントとサーバーは共有した秘密鍵を使って、データを暗号化して送受信します。このようにして、SSL/TLS通信では、第三者が通信内容を見たり、改ざんしたりすることができなくなります。

SSL/TLS通信は、インターネット上で安全な情報交換を実現するための重要な技術です。しかし、SSL/TLS通信も完全に安全というわけではありません。例えば、証明書の偽造や盗難などの攻撃に対しては注意が必要です。また、SSL/TLS通信のバージョンや暗号化方式によっても、安全性やパフォーマンスに違いがあります。SSL/TLS通信を利用する際は、常に最新のバージョンや暗号化方式を選択することが推奨されます。

 

暗号化方式の種類

暗号化方式とは、データを変換して解読できない状態にする方法のことです。暗号化方式には、主に以下の3種類があります 。

- 共通鍵暗号方式
- 公開鍵暗号方式
- ハイブリッド暗号方式

 

共通鍵暗号方式について

共通鍵暗号方式とは、暗号化と復号の鍵が共通している方式です。つまり、暗号化するのに使用した鍵(暗号鍵)を、復号する際にも使用します。共通鍵暗号方式は、処理速度が速いことがメリットですが、鍵の管理や受け渡しが難しいことがデメリットです。もし鍵が第三者に盗まれたり、解読されたりしたら、暗号化されたデータが漏洩してしまいます。また、やり取りする相手ごとに異なる鍵を用意しなければならないので、鍵の管理が大変です。

共通鍵暗号方式の例としては、「DES」「RC4」「AES」などの暗号アルゴリズムがあります。暗号アルゴリズムとは、データをどのように変換するかというルールのことです。暗号アルゴリズムによって、鍵の長さや強度が異なります。一般的に、鍵の長さが長いほど、強力な暗号化ができます。しかし、鍵の長さが長すぎると、処理時間やメモリ使用量が増えてしまいます。そのため、適切なバランスを考えて鍵を選ぶ必要があります。

 

公開鍵暗号方式について

公開鍵暗号方式とは、暗号用と復号用の鍵を別々に用意する方式です。まず、データ受信者が2つの鍵を作成します。そして、暗号用の鍵(公開鍵)だけを一般公開します。公開鍵でできるのは暗号化だけであるため、鍵が第三者の手に渡っても問題はありません。データ送信側は、送りたいデータを公開鍵で暗号化します。データを受け取った受信者は、自身がもつ復号用の秘密鍵でデータを復号できます。公開鍵暗号方式は、鍵の管理や受け渡しが簡単なことがメリットですが、暗号化や復号の処理が複雑で遅いことがデメリットです。

公開鍵暗号方式の例としては、「RSA」などの暗号アルゴリズムがあります。RSAは、大きな素数をかけ合わせた数を公開鍵とし、その素因数分解秘密鍵とする方法です。素因数分解は計算量が多く、コンピュータでも簡単には解けない問題です。そのため、RSAは高い安全性を持ちます。RSAは、電子署名SSL通信などに使われています。

 

ハイブリッド暗号方式について

ハイブリッド暗号方式とは、共通鍵暗号方式と公開鍵暗号方式を組み合わせた方式です。共通鍵暗号方式の処理速度の速さと公開鍵暗号方式の安全性の高さを両立させています。ハイブリッド暗号方式では、以下の手順でデータと鍵がやり取りされます。

1.受信者は公開鍵と秘密鍵を作成し、公開鍵を公開する
2.送信者は共通鍵を作成する
3.送信者はデータを共通鍵で暗号化し、受信者に送る
4.送信者は入手した公開鍵で共通鍵を暗号化し、受信者に送る
5.受信者は暗号化された共通鍵を、自身の秘密鍵で復号する
6.受信者は復号した共通鍵で、データを復号する

 

このようにすることで、以下のメリットがあります。

- 共通鍵の受け渡しが安全に行える
- 共通鍵の管理が簡単になる
- データの暗号化や復号が速く行える

ハイブリッド暗号方式は、インターネット上で安全な通信を実現するための技術として広く利用されています。例えば、HTTPS通信では、SSL/TLSプロトコルというハイブリッド暗号方式の仕組みが使われています。SSL/TLSプロトコルでは、公開鍵暗号方式RSAECCなどと、共通鍵暗号方式のAESやChaCha20などが組み合わせられています。

 

証明書について

証明書

証明書とは、SSL/TLS通信を行う際に必要な電子文書です。証明書には、以下のような情報が含まれます。

- サーバーの公開鍵
- サーバーのドメイン名やIPアドレス
- 証明書の有効期限
- 証明書発行機関(CA)の署名

証明書は、サーバーとクライアント(ウェブブラウザやアプリケーション)の間で公開鍵暗号方式を用いて暗号化された通信を確立するために使われます。公開鍵暗号方式とは、公開鍵と秘密鍵という2種類の鍵を使ってデータを暗号化・復号化する方式です。公開鍵は誰でも知ることができる鍵で、データを暗号化するために使われます。秘密鍵は持ち主だけが知ることができる鍵で、データを復号化するために使われます。公開鍵と秘密鍵は互いに対応しており、公開鍵で暗号化したデータは秘密鍵でしか復号化できません。

証明書発行機関(CA)

証明書発行機関(CA)とは、証明書を発行する機関です。CAは、サーバーの公開鍵やドメイン名などの情報を確認し、正しいことを証明するために自分の署名を証明書に付けます。CAの署名があることで、クライアントはサーバーが本物であることを信頼できます。CAは、国際的な規格や法律に基づいて運営されており、一定の基準を満たしたサーバーに対してのみ証明書を発行します。CAの例としては、VeriSignやDigiCertなどがあります。

 

自己署名証明書

証明書には、公式な認証機関(CA)によって発行されたものと、自分で作成した自己署名証明書とがあります。公式なCAによって発行された証明書は、信頼できる第三者によって検証されているため、安全性が高いと言えます。しかし、公式なCAによる証明書は、有料であったり、更新期限があったりするなど、手間やコストがかかる場合があります。

一方、自己署名証明書は、自分で作成できるため、無料であったり、有効期限を自由に設定できたりするなど、利便性が高いと言えます。しかし、自己署名証明書は、自分で作成したものなので、信頼できる第三者によって検証されていないという欠点があります。そのため、自己署名証明書を利用する場合は、以下の点に注意する必要があります。

- 自己署名証明書を利用するサーバーとクライアントは、互いに信頼できる関係であること
- 自己署名証明書を利用するサーバーとクライアントは、互いに自己署名証明書を事前に交換しておくこと
- 自己署名証明書を利用するクライアントは、ブラウザなどのアプリケーションで警告メッセージが表示されても無視しないこと

以上のように、自己署名証明書は、公式なCAによる証明書と比べてメリットとデメリットがあります。自己署名証明書を利用するかどうかは、目的や状況に応じて判断する必要があります。

 

SSL/TLS通信の歴史について

SSL/TLSとは、インターネット上で通信を暗号化するためのプロトコルです。SSL/TLSは、Webサイトやメールなどの様々なサービスで利用されています。この記事では、SSL/TLS通信の歴史について解説します。

SSL/TLSの起源

SSL/TLSの起源は、1994年にネットスケープコミュニケーションズ社によって開発されたSSL 1.0に遡ります。SSL 1.0は、公開前に重大な脆弱性が発見されたためリリースされませんでしたが、その後改良されたSSL 2.0が同年にリリースされました 。SSL 2.0は、インターネット上で安全な通信を実現するための画期的な技術でしたが、セキュリティ上の問題や互換性の問題が指摘されました。

そのため、ネットスケープコミュニケーションズ社は、1995年後半にSSL 3.0をリリースしました 。SSL 3.0は、SSL 2.0の欠点を改善し、より強固な暗号化や認証を提供しました。SSL 3.0は、Netscape NavigatorMicrosoft Internet Explorerなどのウェブブラウザや、Apache HTTP ServerやOpenSSLなどのウェブサーバに広く採用されました 。

SSL/TLSの標準化

1996年以降、SSLの標準化はネットスケープコミュニケーションズ社からIETF TLSワーキンググループに移管されました 。IETF TLSワーキンググループは、1999年にSSL 3.0とほぼ同等のRFC 2246 TLS 1.0をリリースしました 。TLS 1.0は、SSLという名称からTLSという名称に変更されたこと以外は、大きな変更点はありませんでした。

その後、IETF TLSワーキンググループは、セキュリティ機能を強化したRFC 4346 TLS 1.1を2006年にリリースしました 。TLS 1.1では、CBCブロック暗号モードに対する攻撃への対応や、暗号スイートの拡張などが行われました。

さらに、IETF TLSワーキンググループは、暗号アルゴリズムの移行のためにSHA-256やGCMなどを導入したRFC 5246 TLS 1.2を2008年にリリースしました 。TLS 1.2では、暗号化や認証に関する多くのオプションが追加されました。

2018年には、パフォーマンスやセキュリティを向上させるために大幅な改良が施されたRFC 8446 TLS 1.3がリリースされました 。TLS 1.3では、ハンドシェイクの高速化やレイテンシーの低減、脆弱性の排除や暗号化方式の整理などが行われました。

SSL/TLSの課題と動向

SSL/TLSは、インターネット上で安全な通信を実現するための重要な技術ですが、その一方で、様々な課題や問題に直面してきました。特に、2014年は、HeartbleedやPOODLEなどの脆弱性が発見された年でした 。

SSL/TLSに関連した主要な課題や問題は、以下のようなものがあります。

- ソフトウェアの実装上の問題やバグ
- 暗号アルゴリズムの危殆化(きたいか)への対応
- 認証局の運用上の問題
- SSL/TLSプロトコルの設計上の問題

ソフトウェアの実装上の問題やバグについては、使用するソフトウェアやライブラリの脆弱性情報を注視し、適切にソフトウェアアップデートやパッチを適用することで解決できます。代表的な例として、OpenSSLライブラリにおけるHeartbleedやDROWNなどの脆弱性が挙げられます 。

暗号アルゴリズムについては、MD5やDES、RC4などの今となっては弱い暗号の利用を控える必要があります。BEASTやCRIMEなどCBCブロック暗号モードに関連した脆弱性が多く発見され、GCMモードなどの認証暗号を使った暗号が推奨されています 。また、SHA-1を使用したSSLサーバ証明書についても、Google ChromeFirefoxなどのブラウザでは2017年1月以降使用できなくなりました 。サーバ管理者の方は、SHA-2アルゴリズムを使ったサーバ証明書の移行計画を立てておく必要があります。

認証局については、2011年頃はDigiNotar社やTURKTRUST社など、SSLサーバ証明書を発行する認証局が攻撃を受け不正な証明書を発行してしまう事件が多発し、認証局の信頼が損なわれました 。それまでは証明書失効リスト(CRL)やOCSP(Online Certificate Status Protocol)などPKIの失効の仕組みだけで証明書が信頼できるか判断できたのが、それだけでは十分ではないとされました 。不正に発行された証明書を検知するための仕組みとして、Public Key Pinning Extension for HTTPやCertificate Transparencyなど、SSL/TLSを補強する技術が実装されつつあります 。

Written with Copilot