最近、個人情報やパスワード、クレジットカード番号など、重要な情報をインターネット上で利用することも多いです。
それらが安全にやり取りされているのか心配ではありませんか? もしくは、セキュリティの重要性が高まっているので、インターネットのセキュリティについて詳しく知りたいと思っていませんか?この記事を読むことで、通信を安全に行うプロトコルであるSSL/TLSについて学ぶことができます。また、SSLを暗号化するハッシュ関数である「SHA-1」「SHA-2」についても解説していきます。
SSL/TLS通信とは
普段、何気なく使っているインターネットですが、私たちがウェブページを訪れて文章を読んだり、画像や動画を見たりすることができるのはHTTP(Hypertext Transfer Protocol)という通信プロトコルがあるからです。通信プロトコルとはネットワーク上での様々な規約を定めたものです。
HTTPは1990年にバーナーズ・リーによって設計され、1998年頃にはインターネット通信の主要なプロトコルとして普及しました。その後、バージョンアップや改良が行われてきましたが、インターネット上で個人情報をやり取りしたりショッピングしたりする機会が増えてきて、HTTPを安全なものにする必要が出てきました。セキュリティを突いた攻撃や、暗号解読攻撃などを防ぐ必要があるためです。
そこで登場したのがSSL(Secure Sockets Layer)通信です。SSLは1990年代中頃、当時の主要なブラウザを開発していたNetscape社によって開発されました。
SSLはクライアント/ウェブサーバ間の通信を暗号化する技術で、インターネット上でやり取りされる個人情報を暗号化し、安全なやり取りを実現するための通信プロトコルです。SSLを利用することにより、盗聴、改ざんおよびなりすましを防止することができます。
SSLとHTTPを組み合わせたプロトコルがHTTPSで、HTTPSで実装されたウェブサイトのURLは「https://」で始まります。URLが「http://」で始まるサイトはSSL対応が完了しておらず、通信を安全に行うことができません。HTTPのポート番号は80、HTTPSのポート番号は443となっています。
SSLはHTTPのみならず、ファイル転送を行うFTPや、電子メールの転送に使われるSMTPプロトコルなどにも利用されています。
TLSとの違いは?
SSLはSSL/TLSと表記されることがあります。SSLのバージョン3.0がリリースされた後、SSLを引き継ぐ形でTLS(Transport Layer Security)がリリースされました。両者の互換性はありませんが、どちらも安全に通信を行うためのプロトコルです。
現在一般的に使用されているのはTLSですが、SSLという名称が広まっているため、SSL/TLSという形で表現されています。
SSL/TLS通信(HTTPS)の仕組み
SSL通信(HTTPS)は、「共通鍵暗号方式」と「公開鍵暗号方式」の両方を用いた「ハイブリッド方式」で行われます。この二つを使うことで、安全に通信を行うことができます。SSL通信では共通鍵が使用されますが、共通鍵の受け渡しに公開鍵暗号方式を利用します。
具体的には、まずクライアントがサーバに対してHTTPSでの接続を要求します。
要求を受けたサーバは、公開鍵とSSLサーバ証明書をクライアントに送信します。クライアントはSSLサーバ証明書を検証した後、受け取った公開鍵で共通鍵を暗号化しサーバに送信します。暗号化された共通鍵を受け取ったサーバは、自身の持っていた秘密鍵で復号します。
この時点で、クライアントとサーバが同じ共通鍵を持つことになり、共通鍵で通信を暗号化することができます。
SSL/TLS(HTTPS)通信の確立手順
1.クライアント SSL(HTTPS)接続要求
2.サーバ SSLサーバ証明書と公開鍵を送信(秘密鍵は保持)
3.クライアント SSLサーバ証明書を検証 共通鍵を公開鍵で暗号化して送信
4.サーバ 共通鍵を自身の秘密鍵で復号
5.共通鍵でSSL(HTTPS)通信を確立
共通鍵暗号方式とは
暗号化と復号で同一の鍵(共通鍵)を使う方式です。送信側は共通鍵で情報の暗号化を行い、受信側は共通鍵で情報の復号を行います。
第三者に共通鍵を知られると盗聴や改ざんを防ぐことができないため、鍵は秘密裏に共有する必要があります。
共通鍵暗号方式の特徴は、暗号化と復号のスピードが速いことです。しかし、共通鍵は転送時に漏えいする可能性があり、また通信相手ごとに別々の共通鍵を用意する必要があります。
共通鍵暗号方式の代表的なアルゴリズムにはDESとAESがあります。
公開鍵暗号方式とは
暗号化と復号で異なる鍵(公開鍵と秘密鍵)を使う方式です。
受信側は公開鍵と秘密鍵を生成し、公開鍵を認証局に登録します。送信側は認証局から公開鍵を取り出し、公開鍵で情報を暗号化して送信します。受信側は自らの秘密鍵を使って情報を復号します。
共通鍵暗号方式の特徴は、多数の相手と通信するのに適していることです。また鍵の管理は容易ですが、暗号化と復号化のスピードは遅くなっています。
公開鍵暗号方式の代表的なアルゴリズムにはRSAがあります。
SSLサーバ証明書とは
SSLサーバ証明書は、「ウェブサイト運営者の実在性」と「暗号化通信」を第三者組織(認証局)が証明することで付与される電子証明書のことです。
クライアントはサーバから送信されるSSLサーバ証明書を検証することで、接続先のサーバが証明書を通じて、信頼できる相手か否かを確かめることができます。
暗号化通信を行うウェブブラウザには、あらかじめルート証明書がインストールされています。ルート証明書は認証局が発行するデジタル証明書で、SSLサーバ証明書と突き合わせることで通信相手の信頼性を確認できます。証明書がインストールされているブラウザの代表格はGoogle Chromeです。
サーバ証明書が正規のものであるかをチェックする際にはハッシュ関数が使用されます。ハッシュ関数とは、入力した値に対してアルゴリズムを実行し、異なる値を出力する関数のことです。同じ値からは同じ値が出力されますが、値が1文字でも違うと異なるハッシュ値を生成します。例えば、「Hello」という平文を入力したとすると、「186ahud098eikjese」というハッシュ値が得られるといった具合です。
ウェブサーバから送信されるSSLサーバ証明書には、認証局の署名が付いています。この署名は証明書の内容をハッシュ化した値を認証局の秘密鍵で暗号化したものです。クライアントは認証局の公開鍵で署名を復号することで、ハッシュ値を得ることができます。このハッシュ値を、サーバSSL証明書をハッシュ化した値と比較します。証明書の値が一致すれば、認証局から署名を受けた正規のウェブサイトであると証明されます。
SSLサーバ証明書に使用されているハッシュ関数は、SHA-1、SHA-2というハッシュ関数です。
SHA-1とは
160ビットのハッシュ値を生成するハッシュ関数
SHA-1はアメリカ国家安全保障局が考案し、1995年から米国政府の標準として使用されているハッシュ関数です。任意のデータから160ビットのハッシュ値を生成します。
SHA-1はこれまで広く使用されてきましたが、衝突に関する脆弱性が発見されたため、より安全なハッシュ関数を使うことが推奨されています。
Googleは「SHA-1衝突攻撃」に成功。脆弱性が完全に浮き彫りに
ハッシュ関数が生成する文字列は膨大なため、証明書の値が衝突する(重複する)可能性は極めて低いですが、あり得ないことはありません。もし、異なるデータから同じハッシュ値が生成されてしまうと、なりすましやデータの改ざんを防止することができません。
2017年、GoogleがSHA-1でハッシュ値が衝突する事例を発見したため、SHA-1で暗号化されたデータであっても悪意のある第三者がすり替えて攻撃できることが明らかになりました。
MicroSoftはSHA-1廃止ポリシーを発表
MicroSoftはSHA-1を使い続けることは危険であるとし、「SHA-1廃止ポリシー」を発表してSHA-2への移行を推進しています。「SHA-1廃止ポリシー」には、SHA-1によるSSLサーバ証明書の発行を停止する、SHA-1証明書の受け入れを中止するといったことが明記されています。
SHA-2とは
224、256、384、512ビットのハッシュ値を生成する関数
SHA-2はSHA-1の後継です。2010年からアメリカ国立標準技術研究所(NIST)により、SHA-1からSHA-2への移行が推奨されています。
SHA-224、SHA-256、SHA-384、SHA-512の4つのバリエーションが存在し、それぞれ224、256、384、512ビットのハッシュ値を生成することができます。SHA-1よりもビット数が多いため、より多くのハッシュ値を生成することができ、それだけ衝突の可能性が低くなります。
SHA-256がもっとも一般的なアルゴリズム
SHA-512はビット長が大きく安全性が高いですが、最も一般的なのはSHA-256です。SHA-256の有名な導入例はビットコインです。
SHA-2は今後も安全なのか
SHA-1はGoogleが脆弱性を発見したように、安全であるとは言えません。SHA-2はSHA-1の延長線上にあるため、今後コンピュータの計算速度が向上すると、安全性が低下する恐れがあると指摘されています。
ただ、現時点では、多くの企業がSHA-1からSHA-2への移行を進めている段階です。
2012年、次世代ハッシュ関数「SHA-3」が選定される
2012年、米国のNISTは次世代ハッシュ関数「SHA-3」にKeccakを選定しました。NISTは2007年から選定を開始し、約5年をかけて標準アルゴリズムを決定しました。
SHA-3はこれまでのSHAシリーズとは異なる内部構造を持っており、セキュリティの向上が期待されています。
2015年8月に正式リリース
2015年8月5日にKeccakの正式版が FIPS PUB 202 として公表されました。将来的にはSHA-2に代替する存在として普及が進むと考えられています。
まとめ
以上、SLL/TLS通信の仕組みと暗号方式、ハッシュ関数について解説してきました。
IPA(情報処理推進機構)がセキュリティの啓蒙を盛んに行っていることからもわかるように、これからの情報社会ではセキュリティが大変重要なものになってきます。
初めて暗号方式やハッシュ関数を知った方には少し難しかったかもしれませんが、これらはインターネットのセキュリティを支えるとても重要な技術なので、ぜひ理解を深めていきましょう。
はじめての転職、何から始めればいいか分からないなら
「そろそろ転職したいけれど、失敗はしたくない……」そんな方へ、テックキャンプでは読むだけでIT転職が有利になる限定資料を無料プレゼント中!
例えばこのような疑問はありませんか。
・未経験OKの求人へ応募するのは危ない?
・IT業界転職における“35歳限界説”は本当?
・手に職をつけて収入を安定させられる職種は?
資料では、転職でよくある疑問について丁寧に解説します。IT業界だけでなく、転職を考えている全ての方におすすめです。
「自分がIT業界に向いているかどうか」など、IT転職に興味がある方は無料カウンセリングにもお気軽にお申し込みください。