なぜ書いたか
IT業界に勤めると「新入社員は基本情報技術者(FE)の資格を取ろう!」って話になると思います。
この試験、もちろん情報セキュリティも試験範囲になっています。
しかも「午前・午後両方で出題があり、午後試験では必須回答」という結構ウェイト高めな項目。
その中でも基礎の基礎な暗号化を取り扱おう、ということにしました。
(ざっくり書いてみたので解釈の不一致があるかもしれないですね)
暗号化って何?
「情報を安全にやり取りするため、当事者以外には内容をわからないようにする」というのが暗号化です。
これとは逆に、「暗号化した内容を当事者が理解できる形に戻してあげる」必要もあります。これが復号(化)です。
暗号化と復号(化)はセットで覚えましょう。
*ここでの「当事者」は一人だけのパターン・複数人のパターンの双方があります。
一人だけのパターン:USBメモリにExcelファイルの住所録を保存した。紛失した時に備えてパスワードをつけて暗号化した。
複数人のパターン:Excelファイルの住所録を友人にメールで送った。個人情報が漏洩しないか心配だったのでパスワードを付けて暗号化した。
(今どきメール&Excelファイルで住所録をやり取りすることなんてあるのか?)
暗号化の種類について
共通鍵暗号方式
昔、学校の音楽室とかは普段生徒が入れないように施錠して管理されていたと思います。授業の時とか使うたびに鍵を開けていましたよね…。
その鍵はだいたい職員室の鍵箱で管理されていて、みんなが同じ鍵を使っていたんじゃないでしょうか?
この「複数人で同じ鍵を共有する」というのが共通鍵暗号方式の基本です。
共通鍵暗号方式は、情報をやり取りする2者間(送信側ー受信側)で共通の鍵を使用する暗号化方式のことです。
暗号化と復号化で同じ鍵を使用する、というわけですね。この場合、通信に先立って2者間で鍵を共有する必要があります。
鍵を共有(鍵の配送、といいます)するにあたっては、
・鍵を共有する相手が本当に情報をやり取りしたい相手か
・鍵の配送の過程で鍵の内容を第三者に盗み取られることがないか
十分注意する必要があります。
また、共有した鍵はどの鍵を使っているか第三者にバレてはいけません。通信の秘密が守られなくなってしまいます。
そのため、共通鍵暗号方式は「秘密鍵暗号方式」とも呼ばれます。
*まとめ
共通鍵暗号方式は鍵の管理が面倒(鍵の配送の手間・相手ごとに異なる共通鍵を用意しなければいけない)というデメリットがありますが、
復号(化)の処理が比較的高速に行えるというメリットがあります。
公開鍵暗号方式
今って南京錠って使うんでしょうか?
南京錠って鍵が開いている状態ではだれでも鍵をかけることができますよね?終わったらこの南京錠かけといてね、というアレです。
その代わり、南京錠を開けることができるのは鍵を持っている人だけ(当たり前ですが)。
この「誰でも鍵をかけられるけど、決まった人にしか鍵を開けられない」というのが公開鍵暗号方式のヒントです。
公開鍵暗号方式は、情報をやり取りするにあたって暗号化と復号化に別々の鍵を使用する暗号化方式のことです。
暗号化と復号化で別の鍵を使用する、というのが共通鍵暗号方式と大きく違う点です。
公開鍵暗号方式を使用する場合、情報を受信する側が「秘密鍵」と「公開鍵」の2つの鍵を作ります。
そして、情報を送信する側に対しては公開鍵のみを配布します。
情報を送信する側は公開鍵を使用して暗号化を実行し、受信側に向けて送付します。
受信側は秘密鍵を使用して復号化を行い、情報の中身を確認します。この際、情報を復号化できるのは受信者の持つ秘密鍵だけです。
受信者が秘密鍵を公開しない限り、第三者が暗号化された情報を復号化することができないため、安全に情報をやり取りすることができます。
*まとめ
公開鍵暗号方式は鍵の配布・管理が容易なのですが、復号化の処理に時間がかかってしまうデメリットがあります。
また、簡単に鍵が配布できるという特性から、配布されている公開鍵が本当に正しい人が発行したものか検証する必要があります。
この「公開鍵が正しい人が発行したものか」を検証できる仕組みが公開鍵暗号基盤(PKI)です。
公開鍵暗号基盤では、認証局(CA)が公開鍵証明書を発行し、公開鍵が本人のものであることを証明します。
ハイブリッド暗号
共通鍵暗号方式:復号(化)の処理は早いが、安全に鍵を配送するのが難しい。
公開鍵暗号方式:安全に鍵を配送できるが、復号(化)の処理に時間がかかる。
この2つの暗号化方式のいいとこどりをするのがハイブリッド暗号です。
1.鍵を安全に配送するところまでを公開鍵暗号方式で行う
2.その後のデータのやり取りは共通鍵暗号方式で行う
これにより、安全な鍵の配送と高速なデータのやり取りを両立しています。
暗号化とは違うけど・ハッシュ化
暗号化と混同されやすいものに「ハッシュ化」というものがあります。
結構似ているのですが、やっていることは全然違います。
ハッシュ化とは、元になるデータをハッシュ値と呼ばれる文字列に変換することをいいます。
(ちなみに、ハッシュ化を行う関数をハッシュ関数と呼びます。)
ハッシュ値には以下の特徴があります。
・少しでもデータが違えば全く違うハッシュ値になる。
・元のデータの大きさに関係なく、ハッシュ値の長さは同じ。
・ハッシュ値とハッシュ関数がわかっても、そこから元のデータを復元できない(一方向性)。
暗号化では暗号化に使用した秘密鍵と暗号化したデータがあれば元のデータを復元できましたが、ハッシュ関数ではそうはいきません。
ここが暗号化とハッシュ化の大きな違いです。
ハッシュ値の一方向性という特性を活かし、パスワードを保存する際は平文で保存するのではなくハッシュ化したパスワードの値を保存することで
パスワードのデータベースから不正に情報が抜き取られてもパスワードそのものを特定できないようにする、ということが行われているようです。
ただし、ただハッシュ化するだけでは「事前によく使われているパスワードをハッシュ化し、抜き取られたデータベースのハッシュ値を比較されてしまう」ことで
パスワードを知られてしまう、ということが起こるリスクがあります。
この対策として「ソルトと呼ばれるランダムな文字列をパスワードに付加し、付加した文字列をハッシュ化することによってハッシュ値の比較を難しくする」、
「パスワード+ソルトのハッシュ化を複数回繰り返してさらにハッシュ値の比較を難しくする」といったものがあります。
(ここでの「ハッシュ値の比較を難しくする」とは、「攻撃者がパスワードの候補とパスワードファイルのハッシュ値を比較する回数を増やす」という意味です。)
まとめ
・暗号化は『情報を安全にやり取りするため、当事者以外には内容をわからないようにする』仕組み。
・暗号化には、「鍵の管理が面倒だが、処理が高速な『共通鍵暗号方式』」と「復号化の処理に時間がかかってしまうが、鍵の配布・管理が簡単な『公開鍵暗号方式』」の2つの方式がある。
・2つの暗号化方式をいいとこどりして、「簡単な鍵の配送と高速なデータのやりとり」を可能にしたのが『ハイブリッド暗号』。
・暗号化と似ているが、仕組みは違う『ハッシュ化』。
少しでも理解につながれば幸いです。