暗号化の話

公開日:

更新日:

サイバー攻撃対策
   

目次

暗号とは

ビジネスにおいて、提案書、見積書、契約書といった機密書類をメールでやり取りする際は、関係者外への情報漏えいや改ざんを防ぐために、暗号化が使われます。似たような技術でハッシュ化というのもあり、例えばITシステムを利用するための認証時にパスワードなどを入力しますが、この認証情報などはハッシュ化してコンピュータが記憶するのに使われます。

今回のBlogでは、暗号化について取り上げますが、ますは暗号化とハッシュ化の違いについてお話します。

暗号化の目的は情報漏えいを防ぐことです。そのうえで、受信者が暗号化された情報を見られるよう、暗号化する前の平文に戻すこと(複合化)が出来なければなりません。

一方でハッシュ化は、「資料が改ざんされていないこと」つまり「同一性」確認が目的となり、情報漏えいを防ぐことを目的としません。また、現代ビジネスにおいてはこの同一性が簡単に、かつ迅速に確認できなければなりません。両技術において、「平文に復号できる」こと、「簡単かつ迅速に同一性の確認ができる」ことが、暗号化とハッシュ化の大きな違いです。

次に、暗号化の方式について歴史に触れつつ、解説します。

暗号は、有名なもので第二次大戦でドイツが利用したエニグマ暗号機というものがあり、映画にも取り上げられていました。暗号は紀元前から通信に使われていたと言われていますが、当時は暗号化のアルゴリズムを組み込んだ機械自体が重要であり、複雑な計算も不要でした。

そのために暗号化を行うエニグマ暗号機の保護が重要でした。

しかし、現在はそうした場面で使われたエニグマ暗号と呼ばれる暗号化のアルゴリズムや方式の保護は脆弱(時間をかければ解析される、事実解析されていました)あったことから、暗号を行う際に鍵(暗号鍵)も併せて利用するようになりました。また、現在は鍵の長さや複雑性に焦点が当てられています。

現在、主流として使われている暗号化技術は、素因数分解の困難性を利用したアルゴリズムである「RSAアルゴリズム」と、通信データで使われる、データを区切ること、置き換えること、並び替えることを複数回繰り返すアルゴリズムである「AESアルゴリズム」です。

そしてこれら現代の暗号化はGitHubなどでもアルゴリズムは開示(解読)されているため、暗号鍵の取扱いが重要であり、パスワード(単語)ではなくパスフレーズ(文章)が安全であると言われています。

暗号化方式の違い

暗号のアルゴリズムは、暗号鍵の取扱いで大きく3つに分類されます。

  • 共通鍵方式:暗号化と復号化を同じ暗号鍵で行う方式です。

この方式では、暗号鍵を送信側、受信側の双方が持っている必要があり、鍵交換時の盗聴リスクが高くなります。暗号化、復号化に必要な計算が後述の公開鍵方式に比べ複雑ではなく、処理速度が速いというメリットがあります。

共通鍵方式

  • 公開鍵方式:公開鍵、あるいは秘密鍵の一方(一般的には公開鍵)を公開する方式です。

この方式では、復号化するための鍵は暗号化に利用していない鍵を使用します。例えば、暗号化に秘密鍵を使った場合、公開鍵でなければ復号化ができません。

また、公開鍵で復号できるという事は、暗号化を行い公開した本人であるため、認証要素としても使えます。共通鍵方式よりも計算が複雑であり、計算速度が遅くなるために、リアルタイムが求められる場合には向いていません。

公開鍵方式

  • ハイブリッド方式:共通鍵方式と公開鍵方式を組み合わせる方式です。

共通鍵方式では鍵交換時のリスクがあり、公開鍵方式では計算が複雑になる処理が遅くなってしまうデメリットがあります。そのため共通鍵方式と公開鍵方式を組み合わせることで、「計算が早い」「堅牢であり」「鍵交換リスクがない」というメリットを兼ね備えた方式です。一番身近ではTLShttps)通信で使われています。

ハイブリッド方式

暗号化処理の違い

暗号化には、処理の方法として、暗号化や復号化を一括(ブロック暗号化)で行うのか、逐次(ストリーム暗号化)で行うのかという違いがあります。当然、複雑なアルゴリズムであればある程、暗号化や復号化の処理のためのプロセッサへの負荷と時間が掛かります。

例えば、ストリーム暗号化は、ブロック暗号化と比べ計算の負荷と時間は短くなりますが、暗号としては脆弱になってしまいます。

そのため利用目的により、ブロック暗号化とストリーム暗号化は使い分けられます。ストリーム暗号化は、通信などの受信と同時に復号化を行うケース、つまりリアルタイム性が求められることに向いています。

しかし、複雑な計算をせず負荷が低い分、比較的解読されやすいアルゴリズムになってしまうため目的によっては主客転倒になってしまいます。

先ほど解説したRSAアルゴリズムとAESアルゴリズムは、ブロック暗号化に当たります。公開鍵方式であるRSAアルゴリズムは、計算が複雑なので漏えいしても解読されず、改ざんされるリスクも非常に低くなります。

一方、共通鍵方式のAESアルゴリズムは、計算が複雑でなくリアルタイム要件にも使われます。つまりこれらの方式は鍵の長さ、そしてアルゴリズムの違いにより、解読されやすさ(脆弱性)と処理の複雑さに違いがあります。

そのために、リアルタイム性が求められ、かつ解読リスクや漏えいリスクが大きいWebブラウジングでは、ストリーム暗号化ではなく、ブロック暗号化に当たる公開鍵方式のRSAアルゴリズム(Webサイトの正当性確認のため)と共通鍵方式のAESアルゴリズム(文書や資料の公開のため)を使ったハイブリッド方式が利用されます。

ハイブリッド方式によって、鍵交換による盗聴リスクを防ぎ、かつ計算負荷を小さくしてリアルタイム性を実現しています。

ブラウジングでhttps(TLS)は必須

ブラウジングするサイトが社内ネットワーク内やTLSを使ったSaaSのアプリケーションであれば大丈夫だと思いますが、インターネットで情報検索を行い初めてアクセスするサイトであれば、本当に正規のサイトであるのかを確認すべきです。特に、個人情報を記入した申請書などをサイトに送る際には当然暗号化されているかどうかも確認が必要です。

現在では、ネットワーク通信を行ううえでは、暗号化されていないhttpではなく、TLS通信で暗号化されているhttpsを利用するサイトが一般的になっています。

当然、現在のブラウザではTLSに対応しており、サーバ証明書を確認してからブラウジング出来るようになり、サーバ証明書(「サーバの所有者であること」、「サーバ所有者の公開鍵」「認証をした発行者のサイン」を記したもの)を確認することもできます。

これにより不明な、あるいは偽物のサイトアクセスが出来なくなっており、TLS通信が必須である大きな1つの理由です。

httpsを使った通信では以下の流れで通信が行われます*2。(クライアントはアクセスする側、サーバはアクセスされるWebサーバとして記載)

  • URLで指定されたサーバ(https://で始まる)にクライアントからサーバにTLSでの接続要求を送信

クライアント側で乱数を生成しTLSでの接続要求に含める

  • サーバから①の要求に基づき通信で利用するTLSのバージョンなどの通信を行う環境情報と共に、サ-バで生成した乱数を送信
  • サーバは認証局が発行したサーバ証明書と、サーバの公開鍵をクライアントに送信
  • クライアントが持っているルート証明書*3(PCが最初から保有しており、自動的にアップデートされる)と、送られてきたサーバ証明書を使って正しいサイトであることを検証
  • クライアントから共通鍵生成に使う種をサーバの公開鍵で暗号化して送信
  • サーバは秘密鍵で復号化し共通鍵の種を生成し保有
  • クライアントとサーバの両方で①と②で交換した各々の乱数を使い、クライアントとサーバでやり取りをする時に使う共通鍵を生成
  • クライアントとサーバで通信を行う

上記の様に鍵交換を行わなくても、クライアントとサーバの両方で共通鍵を生成することで、暗号化と復号化に必要な処理の負荷が低減できる共通鍵方式で情報のやり取りを行います。

TLSを利用する事のメリット

上記の様にブラウジングするクライアントは、③でWebサイト所有者からサーバ証明を受取り、ルート証明書でそのサーバ証明書を発行した認証局CAが正規なのか、サーバ保有者が正しいかの確認を行うためにフィッシングなどで期待していない相手との通信を行う際は警告が表示され、本当に接続するのか確認されます。

ただし、サーバ証明書には「オレオレ証明書」(認証局以外が署名した証明書)の場合がありますので、知らないサイトをブラウジングする際には必ずルート証明書での検証をする必要があります。(イントラネットのように認証局での認証が不要な場合、オレオレ証明書を使う場合があります)

TLSを利用することで、上記のように正しい送信者との通信であると検証できるだけでなく、鍵交換リスクがなく計算負荷が少ない共通鍵方式のAESアルゴリズムによって、強固な暗号化が実現できるので非常に良い方法です。

また、通信内容自体のハッシュ化も行うために改ざんを検知できるというメリットも同時に享受しています。つまり、ファイルを転送するときには 暗号化され送られてきたハッシュ値と、受信側で復号化したファイルのハッシュ値を比較することで改ざんされていないことの確認ができ、安全な通信を実現しています。

Wi-Fi通信の暗号化

無線を使うWi-Fi通信では盗聴や改ざんのリスクが非常に大きくなるために通常の暗号化以外にも様々な方式(暗号鍵の取扱いや認証など)が付加されています。Wi-Fi通信の大前提はアクセスポイントと接続する端末側で同じ規格をサポートしていないとなりません。

通常の通信では、WEPWPAWPA2WPA3などがありますが、暗号化以外にもTKIPPSKAESアルゴズムなどの規格を追加しています。

当然通信ですので暗号化も処理が早くなければなりませんので、暗号アルゴリズムとしてはストリーム暗号化で共通鍵方式のRC4Rivest’s Cipher 4)が多く利用されています。

しかし、RC4は簡単に解読されてしまう恐れがあり、またプロセッサの高速化にともない、同じく共通鍵方式のAESアルゴリズムが多く利用されています。因みに、WEPは解読ツールが出回っていることからも、現在ではWEP以外を利用することが勧告されています。

Wi-Fi通信の暗号化

前記の様にWEPWPAというのはWi-Fiの暗号方式として、初期ベクトル生成方法(生成方式やアクセスポイントとの通信形態)、鍵を変更する頻度や方式(TKIP)、暗号化アルゴリズム(RC4AES)、認証方式(PSK)などの組合せにより通信を行う方式およびアクセスポイントと端末側の通信方式(ハンドシェイク)などを規定しています。

長い間使われてきたWPA2ですが、KRACKs攻撃(アクセスポイントとクライアントの双方を騙すことで行う中間者攻撃)を受けると脆弱であると2017年に発表されたため、新たにWPA3が生まれました。

しかし、個人用のWPA3も脆弱(送信側の接続範囲にいる攻撃者はパスワードを復元可能)であると言われています。

WPA3には対KRACKs攻撃以外の機能も追加されたのですが、多くのWi-FiアクセスポイントではWPA2までしかサポートされていないケースが散見されており、今でもWPA2で通信を行うことが多いのが実情です。(私が自宅で使っているWi-Fi機器もそうです)

ただ、最近のサイバー攻撃の被害状況を見ると、以下の方法で被害に遭うリスクを軽減することができます。

  • アクセスポイント(Wi-Fi機器)のユーザ名/パスワードを初期導入時点に必ず変更する
  • Wi-Fi機器のファームウェアを最新のものにアップデートする
  • 個人でない場合はRadiusなどの認証サーバを入れる
  • MACアドレスによる接続制限をする(あまり強固ではありませんが、使わないより良いです)
  • SSIDをステルスモードにする(あまり強固ではありませんが、使わないより良いです)

こうした方法で、少しでもリスクを減らすことをお勧めします。一番は、フリーWi-Fiを使わないことと、例え自宅のWi-Fiでも少なくとも暗号化アルゴリズムにAESを利用し、認証PSKを行うWPA2あるいはWPA3の利用をお勧めします。

暗号化だけでは解決しないこと

送受信されるファイルにおいて、漏えいや改ざんは暗号化で解決できると思います。しかし、暗号化されているからといって、その送信元やファイル自体の信頼性が担保できるわけではありません。

暗号化されているから、というだけでは安心はできません。例えばその文書内にフィッシングサイトへ繋がるURLやハイパーリンクが含まれている場合も考えられます。

通常は便利なハイパーリンクですが、表示されているURLと違うフィッシングサイト用のURLがハイパーリンクに設定する、といったことも攻撃者は行ってきます。

TLS通信であればサーバの所有者や認証局の確認ができますが、通信が非暗号化のhttpで行われている場合は、攻撃者による罠かもしれません。そのリスクを回避するためには、

  • ハイパーリンク先を確認する(カーソルをハイパーリンク付加した文字列に合わせると表示されます)
  • ハイパーリンク先と文字列で書かれているURLが同じであることを確認する

ことが必要になります。とは言え数十~数百ページの報告書のような通信内容を全て確認することは殆ど不可能です。また電子透かしなどで使われるステガノグラフィ(見えない様に本来持つべきでないデータを埋め込む技術)を使うと、写真などの画像や映像に意図しないマルウェアを実行してしまうリスクがあります。

攻撃者はターゲット組織への侵入や攻撃のためには色々な手段を使いますので、セキュリティ対策も多岐にわたってしまいます。

Blogランサムウェア対策とサイバーレジリエンス」などでも取り上げました、ファイル無害化製品Resecであれば多重暗号化ファイルであっても、すべての暗号化されたファイルを平文に戻してから、ファイルの無害化とURLのチェックなどを行うことが可能です。是非、ご質問などあればご連絡をお待ちしています。

時代とともに変化する暗号化方式

プロセッサの処理能力の向上には目を見張るものがあります。特に、現在研究されている量子コンピュータでは、今までのコンピュータと全く違う方式で、量子(光子)を使っており、暗号を解凍するために必要な計算時間を飛躍的に短縮できると言われています。

現時点では安定性に問題があると言われていますが、技術の進歩で解決される日も遠くないと思います。そうなると量子暗号も規格化され普通に使われるようになり、現在強度が強いと言われている主流暗号アルゴリズムであるAESRASよりも使われるようになるのではないでしょうか。

出典 (参考文献一覧)

※1 Wikipedia|エニグマ (暗号機)(参照日:2022-10-05)
※2 SSL/TLS session negotiation|SSL/TLSセッションのハンドシェイク (参照日:2022-10-05)
※3 @ITatmarkIT|SSL/TLS(Part.3)(参照日:2022-10-05)
※4 Microsoft|ルート証明書更新プログラムの仕組みについて (参照日:2022-10-05)