安全にデータをやりとりする技術
安全にデータをやりとりする技術
データのやり取りに使われる技術
・下記は、安全なデータのやり取りを行う際に利用されている技術です
・順に詳しく見ていきましょう
- 共通鍵暗号方
- 公開鍵暗号方式(公開鍵/秘密鍵)
- 電子証明書
- 電子署名
- SSL/TSL
- SSH
前提知識:暗号化とは
暗号化とはある情報を第三者から見てよくわからない状態にするための方法を指します。
特にパスワードは、セキュリティ脅威になり得るので第三者から抜き取られた場合に備えて、
暗号化するのが一般的です。
暗号化を行うためには、暗号鍵と呼ばれるデータを用います。暗号化を行うと
全く違ったデータになり、暗号化したデータを元の状態(平文)に戻すことを復号化と呼びます。
共通鍵暗号方式
- 同じ鍵を使用して暗号化と復号化を行う方式です
- 秘密鍵暗号方式や、対称鍵暗号方式と呼ばれることもあります
- 共通鍵暗号方式では、データの送信者と受信者で同じ鍵を共有する必要があります
- 暗号化するための鍵を、インターネットでそのまま送ってしまっては意味がありません
公開鍵暗号方式
共通鍵暗号方式の課題を解決したものとして、公開鍵暗号方式という方式があります。
公開鍵暗号方式とは、暗号化の時と復号化のときで、秘密鍵と公開鍵といった異なる鍵を使う方式です。
秘密鍵は、名前の通り、自分以外の人に知られてはいけない鍵です。
一方、公開鍵は、その名の通り、公開されているため人に教えても良い鍵であり、秘密鍵によって生成されます。
また、公開鍵で暗号化されたデータは、対応する秘密鍵でしか復号化できず、反対に、秘密鍵で暗号化されたデータは、対応する公開鍵でしか復号化できません。
この方式で実際にデータを送信するときには、次の手順に従います。
- (データの) 受け手が、秘密鍵と公開鍵を用意し、
- 受け手は、送り手に公開鍵を渡します。
- 送り手は、受け取った公開鍵を使って、データを暗号化した上で、送ります。
- 送り手は 、秘密鍵を使って、受け取ったデータを復号化します。
データの受け手は、受け取ったデータを復号化するために、秘密鍵が必要ですが、秘密鍵も公開鍵も、受け手が用意したものなので、そのまま復号化することができます。
このように、この方式では、一般的に公開している公開鍵を送るだけで、復号化するための秘密鍵を送る必要はありません。
復号化に使う秘密鍵を送る必要がないため、鍵を盗まれてしまうリスクを減らすことができるのです。
- (データの)受け手が、秘密鍵と公開鍵を用意し、
- 受け手は、送り手に公開鍵を渡します。
- 送り手は、受け取った公開鍵を使って、データを暗号化した上で、送ります。
- 受け手は、秘密鍵を使って、受け取ったデータを復号化します。
データの受け手は、受け取ったデータを復号化するために、秘密鍵が必要ですが、秘密鍵も公開鍵も、受け手が用意したものなので、そのまま復号化することができます。
また、この一連の流れは、受け手と送り手の関係が、反対の場合でも、成立します。
その場合、データの送り手が秘密鍵を使ってデータを暗号化し、データの受け手が、公開鍵を使ってデータを復号化することになります。
公開鍵暗号方式のリスク
公開鍵暗号方式の主なリスクは、第三者が通信相手になりすますことにより、誤った相手とデータを送り合うことです。
通信相手になりすました第三者から公開鍵を受け取ると、第三者から受け取った公開鍵で、
データを暗号化(または復号化)することになります。
第三者から送られた公開鍵は、第三者が保有する秘密鍵に対応しているので、第三者にデータを送ると、
第三者は自分の秘密鍵でデータを復号化することができるのです。
そのため、公開鍵暗号方式を使う場合、公開鍵が本物であることを、確認する必要があります。
電子証明書
こういったなりすましを防止するために電子証明書を使用します。
電子証明書は、信頼できる第三者を介して本人であることを、電子的に証明するためのものです。
電子証明書において、本人であることを証明する機関を認証局と呼びます。
具体的には、電子証明書を認証局へ送り、認証局を介して公開鍵の所有者であることを確認することで、
なりすましを防止することができます。
また、電子証明書には、「公開鍵」、「電子証明書の所有者の情報」、「認証局の電子署名」が、含まれています。
では、実際に電子証明書を使った場合の、公開鍵暗号方式の流れを確認していきましょう。
-
所有者が認証局に申請する
まず、秘密鍵、公開鍵の所有者は、認証局に、公開鍵と所有者自身の情報を、送ります。 -
認証局が電子証明書を発行する
送った情報を元に、公開鍵の所有者を証明するための電子証明書を、発行されます。 -
公開鍵と電子証明書を送る
その上で、所有者は誰かと通信をするときには、通信相手に公開鍵と共に電子証明書を送ります。 -
証明書の有効性を確認する
通信相手は、認証局に証明書の有効性を確認することで、なりすましでないこと、公開鍵の所有者であることが確認できます。
- 所有者が認証局に申請する
- 認証局が電子証明書を発行する
- 公開鍵と電子証明書を送る
- 証明書の有効性を確認する
電子署名
-
今見てきた電子証明書は、本人を確認するために使っていましたが、
次は、改ざんが行われていないことを証明する「電子署名」について見ていきます - 電子署名は、私たちの身近なもので考えると、印鑑やサインのようなものです
電子署名の作成から、使用までの流れを、確認していきましょう。
-
送信データのハッシュ化
まず、電子署名を作成するために、送信者は送信するデータをハッシュ化します。
ハッシュ化とは、あるデータを不規則な文字列に変換することです。
生成された不規則な文字列を、ハッシュ値と呼び、変換に使われる関数をハッシュ関数と呼びます。 -
秘密鍵による暗号化(電子署名の生成)
次に、ハッシュ化した上で、秘密鍵で暗号化することで、電子署名が生成されます。 -
データの送信
その次に、電子署名が生成されたら、送信者は元のデータと電子署名を一緒に送ります。
1. 送信データのハッシュ化
2. 秘密鍵による暗号化(電子署名の生成)
3. データ(元データ+電子署名)の送信
データの改ざんの確認
データを受け取った受信者は、そのデータが改ざんされたものかを確認するために、
a) 受け取った電子署名を、公開鍵を使って復号化します。
復号化すると、送信者が、秘密鍵で暗号化する前の状態に戻るので、元のデータが、ハッシュ化した状態に戻ります。
b) そして、受け取った元のデータをハッシュ化します。
c) 両データを比較する
この時、改ざんされていなければ、ハッシュ化した元のデータと公開鍵を使って復号化したデータは、
同じデータになっているはずなので、このような流れで電子署名を使ってデータの改ざんを確認できます。
a) 受け取った電子署名を、公開鍵を使って復号化します。
b) そして、受け取った元のデータをハッシュ化します。
c) 両データを比較する
※補足
また、ハッシュ化されたデータは、元のデータに戻すことができません。
さらに、元のデータが少しでも異なると、ハッシュ化した時の値は全く異なる値になるので、
改ざんを検知する上で有効だということがわかります。
SSL/TSL
SSL(Secure Sockets Layer)とは、Webサイトを閲覧する時の通信を暗号化するための技術です。
つまりは、WebブラウザとWebサーバー間においてやり取りされるデータを暗号化する技術になります。
普段、ブラウザを使ってショッピングサイトやSNSなどを利用する際、パスワードやクレジットカードの情報など
個人情報を入力することがあると思いますが、
これらの情報を悪意ある第三者に知られてしまわないように、こういった技術が必要になります。
また、Webサーバとクライアント間の通信で、暗号化するための規格として、SSLと共に、TSL(Transport Layer Security)が紹介されますが、TSLは、SSLの次世代の規格を指します。
現在ではTSLが、普及しておりますが、まとめてSSLと呼ばれることが一般的です。
では、SSLやTSLを使って、どのような流れで通信が暗号化されるのでしょうか?
具体的には、公開鍵暗号方式と共通鍵暗号方式、両方を利用しています。
詳しくは、次のページから、一つずつ流れを確認していきましょう。
- クライアントがサーバに接続要求をすると、サーバは電子証明書を送ります
- 電子証明書には、サーバの公開鍵が含まれています
- クライアントは、共通鍵を生成します
- 生成した共通鍵は、サーバからもらった公開鍵を使って暗号化し、サーバに送ります
- サーバは、自分の秘密鍵を使って復号化し、クライアントの共通鍵を取り出します
- クライアントからデータを送信する際は、この共通鍵で暗号化し、サーバは共通鍵で復号化します
- どうように、サーバからクライアントにデータを送信する際も、共通鍵を使用します
- 公開鍵暗号方式のみを利用する場合より、速度が速くなるというメリットがあります
- クライアントとWebサーバーとのやりとりで、SSL/TLSを使った暗号化通信を行うための電子証明書のことを、SSLサーバ証明書と言います
- SSLサーバ証明書があるということは、サーバが実在すること、そしてサーバが本物であることが、第三者機関である認証局によって証明されている、ということになります
- 自分のブラウザから、WebサイトのSSLサーバ証明書を確認してみましょう
- まず、Chromeを立ち上げて、神田ITスクールのWebサイトにアクセスします
-
下記のURLにアクセスするか、検索エンジンから「神田ITスクール」と入力し、スクールのWebサイトにアクセスしてください
https://kanda-it-school-kensyu.com/
- Chromeで弊社のWebページにアクセスした際、URLのランをダブルクリックして、右記のようにURLが表示されていることを確認してください
- このとき、鍵のアイコンと、httpsという表示があることを確認してください
- httpsは、httpプロトコルの通信を、SSL/TSLを用いて暗号化していることを表しています
- 暗号化されていない場合、鍵マークが表示されないなど、表示に違いがありますので、このアイコンがあることを確認しておきましょう
- では、URLの横にある鍵のアイコンをクリックしてみましょう
- 「この接続は保護されています」という文言と共に、小さいウィンドウが表示されました
- 「証明書」と記載されている箇所をクリックすると、SSLサーバ証明書の詳細を確認することができます
- このウィンドウから、証明書の情報を確認することができます
- 証明書の発行先、発行者、有効期限などを確認することができました
SSH
SSH(Secure Shell)は、リモートにあるコンピューター(サーバ)に対して、遠隔操作を安全に行うためのプロトコルです。
SSHによって、リモートで通信する際に、通信内容を漏洩させないために、通信する情報を暗号化することで、安全な通信を実現します。
具体的には、Tera Termのようなターミナルソフト(CUIで遠隔操作するためのソフト)を使って、遠方のコンピュータを
遠隔操作したり、FTPのようなファイル転送する際に、SSHを使用します。
また、SSHには、パスワード認証方式と、公開鍵方式の2種類があります。
SSH(パスワード認証方式)
パスワードの認証方式
- まず、パスワード認証方式について見ていきます
- まず、クライアントはサーバに接続要求をします
- サーバの公開鍵がクライアントに対して送られます
- クライアントは共通鍵を生成し、サーバからもらった公開鍵で暗号化を行います
- クライアントは暗号化した共通鍵をサーバに送ります
- サーバは、受け取った共通鍵を、自身の秘密鍵で復号化を行い、クライアントの共有鍵を取り出します
- クライアントは、接続先アカウントのパスワードを共有鍵で暗号化し、サーバに送ります
- サーバは、受け取ったパスワードを共通鍵で復号化し、パスワードを取り出します
- サーバは、パスワードでユーザ認証を行います
- ユーザが認証されたら、クライアントとサーバはコマンドなどをやりとりします
- この認証方式は、サーバのユーザアカウントを使って接続するため、パスワードが流出してしまった場合、不正アクセスされてしまう恐れがあります
SSH(公開鍵認証方式)
公開鍵認証方式
- 続いて、公開鍵認証方式について見ていきます
- パスワード認証と違い、公開鍵認証の場合は、事前の準備が必要となります
- クライアントは、通信相手に対して事前に公開鍵を渡しておく必要があります
- サーバは、共通鍵を作成します
-
サーバーは、クライアントから事前に渡されて公開鍵を使って、共通鍵を暗号化します。
※暗号化することで安全に、クライアントへ共通鍵を送ることができます。 - サーバは、暗号化した共通鍵をクライアントに送ります
- クライアントは、自身の秘密鍵を使って、サーバの共通鍵を復号化します
- これで、コマンドなどの安全なやりとりができるようになりました
- 公開鍵認証方式では、事前の準備が必要ではありますが、パスワードの入力なしでログインすることができます