(反対派を防衛する)Part1:暗号技術の紹介

Categories
< Back
You are here:
Print

(反対派を防衛する)Part1:暗号技術の紹介

暗号化とは何か?

学ぶべきこと
1. 暗号化の基本要素:平文、暗号文、暗号(または暗号化プロトコル)、暗号鍵
2. 古典的な暗号化手法の仕組み
3. 暗号化が破られる可能性のある方法
4. 破られない暗号
ここでは、「紙とペンを使った暗号」という基本的なものから始めて、コンピュータを使ったより複雑な暗号化方法に進んでいきます。
暗号化とは、メッセージにスクランブルをかけて、意図した相手だけが解読(読み取り)できるようにするプロセスです。元のメッセージ(平文)をスクランブルする方法は、暗号または暗号化プロトコルと呼ばれます。ほとんどの場合、暗号は秘密にすることを意図していません。スクランブルされた読めない暗号化されたメッセージは暗号文と呼ばれ、安全に共有することができます。ほとんどの暗号は、メッセージの暗号化と復号化(スクランブルとアンスクランブル)のために、暗号鍵と呼ばれる追加の情報を必要とします。

シンプルな暗号。シーザー暗号

まず,最も単純な暗号として,シーザー暗号を考えてみましょう。この暗号では,メッセージの各文字を,申し合わせておいた数だけアルファベットをシフトさせます。例えば,次のような平文を暗号化したいとします。
IF VOTING CHANGED ANYTHING IT WOULD BE ILLEGAL

という平文を暗号化しようとした場合、メッセージの各文字をアルファベットの3つ分後にずらし、AをD、BをE、そしてZをアルファベットの最初に折り返してCにします。この平文を暗号化すると、次のような暗号文になります。
li yrwlqj fkdqjhg dqbwklqj lw zrxog eh loohjdo
このメッセージを復号するには、受信者が逆の操作をします。メッセージの各文字をアルファベットの3つ前に戻して、ZをWに、Aをアルファベットの最後からさかのぼってXにします。シーザー暗号では、各文字をアルファベットの何番目に移動させるかを表しており、この例では「3」となっている。シーザー暗号の鍵は、Aからの変換結果に対応するアルファベットで表すこともできる。例えば、3のシフトはDの鍵、23のシフトはZの鍵、そしてゼロのシフト(同一性のシフト)はAの鍵となるでしょう。

用語のおさらいをしておきましょう。この例では、暗号(または暗号化プロトコル)を適用するには、次の指示に従うだけでよい。”暗号化するには、平文メッセージの各文字をアルファベットの後方にn文字ずつシフトシフトする。復号化するには,メッセージである暗号文の各文字を,アルファベットの前方にn文字ずつシフトする」.鍵となるのはシフト量のnです。

もちろん,シーザー暗号は強力な暗号ではありませんし,自分の計画を秘密にしておくためにシーザー暗号を信頼すべきではありません。敵対者があなたの秘密のコード(暗号文)を解読するために必要なことは、アルファベットを後方にシフトする可能性をすべて試すことです。鍵Aは暗号文と平文を等しくするものなので、25個の鍵しかありません。このような攻撃はブルートフォース攻撃と呼ばれ、可能な鍵をすべて試して暗号化されたメッセージを解読しようとする攻撃です。シーザー暗号の場合,可能な鍵が非常に少ないため,この攻撃が可能です。

少しだけ複雑な暗号。ヴィジュネル暗号

ヴィジュネル暗号は,複数のシーザー暗号を組み合わせたもので,それぞれに鍵があります.通常、鍵は単語として与えられ、その単語のアルファベットの位置によって、シーザー暗号のようにAの文字をどのようにずらすかが決まります。これは、例を挙げて説明するのが一番わかりやすい。例えば、次の平文を暗号化したいとします。

RESPECT EXISTENCE OR EXPECT RESISTANCE
(存在を尊重せよ、さもなくば抵抗に遭う)

をACTという鍵で暗号化したいとします。

このばあい

・平文の1文字目から始めて2つおきに現れる文字(R, P, T …)は、ACT鍵の1文字目がAなのでAを鍵とするシーザー暗号で暗号化します。このシーザー暗号はAをAに、RをRに、PをPに変換します。この鍵は0とも表されます。
・平文の2文字目から始めて2つおきに現れる文字(E, E, E …)は、ACT鍵の2文字目がCなのでCを鍵とするシーザー暗号で暗号化します。このシーザー暗号はAをCに、EをGに変換します。この鍵は2とも表されます。
・平文の3文字目から始めて2つおきに現れる文字(S, C, X …)は、ACT鍵の3文字目がTなのでTを鍵とするシーザー暗号で暗号化します。このシーザー暗号はAをTに、SをLに変換します。この鍵は19とも表されます。

この3つのシーザー暗号を適用すると、暗号文ができあがります。

rglpgvt gqiumepve qk ezieem rgliumapve

この暗号を破るには、敵が鍵の長さを知っているとします。敵は、その長さの3文字の単語(一般的には3文字の文字列)をすべて使って暗号文を復号しようとします。この例では、最大で25 × 26 × 26 = 16,900回の試行が必要になります。これは、人の手では簡単にできない量ですが、コンピュータでは容易にできます。もし敵があなたの鍵の長さを知らなければ、ブルートフォース法で暗号を解読するためには、さらに多くの可能な鍵(25 + 25 × 26 + 25 × 26 × 26 + …)を試さなければなりません。鍵が長ければ長いほど、ブルートフォース法は難しくなり、敵対者は暗号を破るために苦労しなければならないことに注意してください。

コンテクスト:破れないワンタイムパッド

ヴィジュネル暗号は、ランダムに選択された文字列を鍵とし、平文メッセージと同じか、より長い鍵を使うことで、ワンタイムパッドonetime padと呼ばれる暗号に発展できます。歴史的には、鍵自体を紙に書いて通信相手に配布していました。暗号化にはヴィジュネル暗号を適用するのですが、暗号鍵としてワンタイムパッドから拾う文字はどれも一度だけ使い、平文の次の文字に対してはワンタイムパッドから次の文字を鍵として使います。復号化には、このワンタイム・パッドと鍵の開始位置が必要となります。鍵がなければ、この暗号を破ることはできません。つまり、時間と資源が無限にあっても、鍵を推測して暗号文を解読することができないのです。これは、ある長さの暗号文が同じ長さの任意の平文に対応しうるためです。例えば、ランダムキーを知らない場合、ワンタイムパッドで暗号化された暗号文SOU DUCYFUK RXL HQKPJは、ALL ANIMALS ARE EQUALという平文にも、FEW ANIMALS ARE HAPPYという平文にも、同じ確率で対応しうるのです。鍵がなければ、意図した(平文の)メッセージを知る手立てがまるでないのです。単語間のスペースを省略したり、単語間のスペースを暗号化したりすれば(27文字のアルファベットABCDEFGHIJKLMNOPQRSTUVWXYZ_(_はスペース)を使用)、単語の文字数のパターンにあてはまる平文をいくつも推測することさえはるかに困難になります。

もちろん、ワンタイムパッドには、鍵(onetime pad自体)をどのように通信相手と交換するかという実用上の問題があります。その鍵は、メッセージの長さと同じか、将来起こりうるすべてのメッセージの合計の長さと同じです。それにもかかわらず、歴史的には、グループでワンタイムパッドを直接共有して、安全でないチャンネルでメッセージを送信するという方法が使われてきました。1980年代後半、南アフリカでアパルトヘイトと闘っていたアフリカ民族会議(ANC)は、海外の支持者と国内の工作員との間のメッセージを暗号化するためにワンタイムパッドを使用していました。ワンタイムパッド(鍵)は、アムステルダムからヨハネスブルグまでの路線を担当していた信頼できる航空スチュワードが物理的に輸送していました。ちなみに、ANCでは暗号化と復号化をコンピュータ化しており、暗号化されたメッセージを電話回線で送信し、留守番電話に録音したり、留守番電話から受信したりすることで、”非同期通信(訳註)”を可能にしていました。

訳註:通信を行う機器間でデータや信号の送信と受信のタイミングを合わせる動作や仕組みを用いずに通信することを非同期通信という。(https://e-words.jp/w/%E9%9D%9E%E5%90%8C%E6%9C%9F.html)

次に学ぶべきこと

現代の暗号技術

外部リソース

Jenkin, Tim “Talking with Vula: The Story of the Secret Underground Communications Network of Operation Vula.” (英語) Mayibuye: Journal of the African National Congress, October 1995.

現代の暗号技術

この章を読む前に、「暗号化とは」の章を読んでおくことをお勧めします。

この章で学ぶこと

1. 安全性と鍵の長さの関係
2. オープンソースソフトウェアとは何か、なぜそれがセキュリティにとって重要なのか

現代の暗号技術は、人の手で行うものではありません。コンピュータが代わりにやってくれるのですが、そのアルゴリズムの詳細については本書では触れません。しかし、現代のデジタル・セキュリティ・ツールをよりよく理解し、評価するのに役立つ一定の原則があります。

ブルートフォース・アタックを必要とするセキュリティ

現代の暗号プロトコルは、(暗号鍵を持たない)敵に、暗号を解読するために可能な限りの鍵を試すのと同じだけの時間を(ほぼ)費やさせるように設計されています。可能な限りの鍵を試すことはブルートフォース攻撃として知られていることを思い出してください。暗号プロトコルのパラメータは、ブルートフォース攻撃が実用にならないほどその計算に長時間を要するように設定されています。通常、最も重要なパラメータは、鍵の長さです。古典的なヴィジュネル暗号と同様に、鍵が長いということは、正しい鍵を推測するために、より多くの可能性のある鍵を探さなければならないということです。時代が進み、コンピュータの処理が高速化・高性能化すると、ブルートフォース攻撃が不可能であることを保証するために、より長い鍵が必要になることがあります。そのため、多くの暗号プロトコルでは、鍵のサイズを「鍵を表現するのに必要なビット数」で表している。
コンピュータは、暗号鍵を含む情報を、0と1の2値で表現します。0から9までの数字が10進数の桁を表すように、0と1は2進数のビットを表します。3桁の10進数は何個あるでしょうか?10×10×10=103=1000、つまり0~999の数字です。同じように、4ビットの2進数は、2×2×2×2=24=16個あります。
例として、AES暗号プロトコルを128ビット、256ビットの暗号鍵で使用する場合、AES-128、AES-256と呼ぶことがある。AES-128では、2128=340282366920938463463374607431768211456個の鍵が考えられる。AES-256では、2256 = 115792089237316195423570985008687907853269984665640564039457584007913129639936個の鍵が考えられる。AES-256のすべての可能な鍵、あるいは可能な鍵のごく一部でも試してみることは、米国のような国民国家の計算能力をもってしても、計算上不可能である。

隠匿では安全性を確保できない

19世紀初頭から、数学者は「暗号方式は、その方式が秘密でなくても安全でなければならない」という基準を持っていた。これは、「安全性を確保するために方式を秘密にしなければならないのであれば、これまでにその方式で暗号化された、あるいはこれから暗号化されるすべてのメッセージは、その方式が明らかになってしまう危険性がある」という原理に基づくものです。一方、鍵を秘密にしておくことだけが必要な方法であれば、その鍵が漏洩した場合に、その鍵で暗号化されたメッセージが明らかになってしまうリスクがあるだけです。

透明性がもたらすセキュリティ

実際、暗号化方式の透明性が高ければ高いほど、その暗号化方式の安全性を信頼することができます。このことを理解するために、暗号化プログラム(あるいは他のコンピュータプログラム)がどのように作られるかを考えてみましょう。まず、暗号化を実行するためのアルゴリズムが作成されます。プログラマーは、このアルゴリズムをコンピュータのソースコードにします。コンピュータは、このソースコードをコンパイルして、あなたのコンピュータや携帯電話で動作するプログラムやアプリを作ります。

アルゴリズムからソースコード、コンパイルされたソースコードへ

優秀なプログラマーは、アルゴリズム(1)からソースコード(2)に変換し、さらに元に戻すことができるはずです。セキュリティの専門家であれば、アルゴリズムに基づいて暗号プロトコルの安全性を評価することができますが、同時にソースコードを評価して、その実装が忠実に行われているかどうか(意図的かどうかにかかわらず、間違いやバグがないかどうか)を確認する必要があります。しかし、ユーザーとしては、コンパイルされたプログラムにしかアクセスできません(3)。残念ながら、コンパイルされたコードしかない場合、誰もがソースコードを再現することはできません。そのため、ソースコードが入手できない限り、アプリのセキュリティに関する主張が正しいかどうかは誰にもわかりません。一方で、ハッカーがアプリのセキュリティを破ろうとするには、コンパイルされたプログラムだけあれば十分です。このようなソフトウェアはオープンソース・ソフトウェアと呼ばれ、Signal、Firefox、Linuxなど、セキュリティを含む多くの有名なプロジェクトが含まれています。もう一方はクローズドソースソフトウェアであり、Safari、Internet Explorer、Windows、Mac OSなど、プロプライエタリなソフトウェアの販売を通じて製品を収益化することを目的としたプロジェクトで採用されています。クローズド・ソース・ソフトウェアのセキュリティを評価することは可能ですが(例えば、社内や依託での監査など)、それを継続的に維持することははるかに困難です。オープンソース・プロジェクトは、誰でも自由に調査することができるため、セキュリティ上の(あるいはその他の)問題を発見する機会があるのです。

暗号化キーの保護によるセキュリティの確保

最近の暗号プロトコルでは、暗号化方式が一般的に公開されているため、セキュリティを確保するには、暗号化キーを保護する必要があります。これが実際にどのようなものかは、暗号鍵がどこにあるかによって異なります。安全なインスタントメッセージングアプリであるSignalの場合、暗号化キーは携帯電話のファイルに記録され、携帯電話の通信を保護しています。あなたのパスワードをクラウドと同期できるようなパスワード・マネージャーの場合、あなたのパスワードを全部保存しているファイルは、パスワード・マネージャーにログインするときのパスワードから導出する鍵で暗号化されるか、そのログイン・パスワード自体で保護されています。

インフラへの不信感がセキュリティにつながる

エンド・ツー・エンドの暗号化とは、メッセージをスクランブルすることで、会話のエンドポイントでしか読めないようにすることです。しかし、ここで混乱が生じています。エンドポイントとは何でしょうか?エンドポイントとは、あなたとあなたの友人だけでしょうか?それとも、サーバーもエンドポイントなのでしょうか?それは、アプリケーションによって異なります。例えば、https(あなたがアクセスしたウェブページをホストするサーバーとあなたとの間の通信を保護する)は、あなたとサーバーだけがウェブページの内容を解読できるように暗号化されています。Signalはメッセージを暗号化して、あなたとあなたがメッセージを送っている友人だけが読めるようにします。どちらの場合も、情報を知る必要のある人や団体だけが情報を復号化することができます。これがエンド・ツー・エンド暗号化の本質です。

ここでは、プライベートメッセージングにおいてエンド・ツー・エンドの暗号化が重要な理由を説明します。これについては、”The Man in the Middle “の章で詳しく説明しています。次の図では、アサタ(左)がインターネットを介してボビー(右)にメッセージ(アーシュラ・K・ル・グインの『The Dispossessed』)を届けようとしています。


ボビーにメッセージを送ろうとするアサタ

しかし、インフラにはJ.エドガー・フーバーの亡霊がつきまとっている。この中間者(MITM)は、二人の友人の間で送られる保護されていないメッセージを傍受し、読み、変更することができるのだ。こんな感じです。


間にいる者がメッセージを傍受して変更する(エドガーは、メッセージをそのまま読んで送ることもできる)

さらに悪いことに、アプリが「暗号化」を使用しているといっても(誰が鍵を持っているかを明確にせずに)、メッセージのプライバシーが守られ本物であることは保証されません。例えば、2人の同志の間にあるサーバーが暗号化キーを管理している場合、そのサーバーにアクセスできる人は、2人の間のすべてのメッセージを読み、変更することができます。しかし、アサタとボビーがメッセージを(下図の青い鍵で)暗号化している場合、エドガーはメッセージを読むことができず、青い鍵で復号できるメッセージに置き換えることもできないでしょう。


暗号化によって、間にいる者によるメッセージの変更をできなくする

アプリケーションがエンド・ツー・エンドの暗号化を使用しているかどうかは、どうすれば分かるのでしょうか?暗号化キーを確認する方法があるということが最も良い方法といえます。Signalでは安全番号safety numbersを使ってこれを簡単に行うことができます。これについては、”暗号署名による認証 “の章で詳しく説明します。

悪意ある第三者の影響を受けにくくするもう一つの方法は、ピア・ツー・ピアのメッセージングで、メッセージや連絡先の管理の間に「サーバーが存在しない」ことだと言われています。あなたとあなたの友人の間には、膨大な量のインターネットインフラが存在していますが、ほとんどのユーザーやアプリケーションからは見えません。上述したように、このインフラこそが、国家が、検知されず疑われることなく大量監視を行うために利用するものなのです。

イン・コンテクスト:エニグマ・マシン

最初の近代的な暗号化技術は、おそらく第二次世界大戦中に使用されたものです。現代のコンピュータに先駆けて、そのプロトコルは洗練された機械装置によって支えられていました。その中でも最も有名なのが、ナチスドイツが使用したエニグマ・マシンです。エニグマは電気機械式の装置で、特定の鍵を設定して平文を入力すると、暗号文が出力される仕組みになっていました。同じ鍵で、暗号文を入力すると、元の平文が出力される。


エニグマ・マシン(写真提供:Greg Goebel

ここでの鍵とは、ローターの順番と初期位置(上の写真)のことです。標準的な操作では、毎日新しい鍵を使わなければなりませんでした。エニグマ・マシンのオペレーターに配布されたハンドブックには、日々の鍵が記載されており、これは実質的にワンタイムパッドです。ちなみに、この手帳は水溶性のインクで印刷されているので、敵の手に渡る恐れがあるときはすぐに破棄することができました。

エニグマで暗号化されたメッセージを解読するには、多くの努力が必要でした。第二次世界大戦中にいくつかの機械が接収されましたが、機械を手に入れてもメッセージを解読することはほとんど不可能でした(方法が公開されている現代の暗号と同様です)。コンピュータ科学の創始者の一人であるアラン・チューリングは、第二次世界大戦中、英国の暗号解読者の中心地であるブレッチリー・パークで働いていました。チューリングが設計したボンベbombeは、エニグマのメッセージを解読するために特別に設計されたコンピュータの一種です。しかし、ボンベだけでは不十分でした。実際、鍵なしでエニグマのメッセージを解読することは、現代の計算能力をもってしても非常に困難であり、戦時中に傍受されたエニグマ暗号でまだ解読されていない有名なメッセージが少なくとも1件はあります。)。しかし、ボンベと、早朝のメッセージのほとんどが天気予報や「Keine besonderen Ereignisse」(「何も報告することはない」)というフレーズを含んでいたという事実とが相まって、連合国側はエニグマの暗号化されたメッセージを定期的に解読することができました。

戦時中のチューリングの功績は、戦争を2年以上も短縮したと言われています。しかし、ブレッチリー・パークでの仕事は機密扱いだったため、彼の仕事は生涯知られることはなく、実際、彼は戦争に貢献していないと批判されていました。さらに悲劇的なことに、同性愛者である彼は、政府から迫害され、1952年には同性愛の罪に問われました。有罪となった彼は、化学的な去勢手術か投獄かの選択を迫られました。懲役刑を選択した彼は、あと2年しか生きられず、青酸カリの毒で自らの命を絶ったと言われています。

次に学ぶこと

暗号化のための鍵の交換

外部リソース

Caraco, Jean-Claude, Rémi Géraud-Stewart, and David Naccache. “Kerckhoffs’ Legacy.” 2020.
メディア掲載情報

source-code © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
mitm-basic-1 © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
mitm-basic-2 © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
mitm-basic-3 © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
Four-rotor-enigma © Greg Goebel is licensed under a Public Domain license

暗号化のための鍵の交換

本章を読む前に、「現代の暗号」の章を読むことをお勧めします。

学ぶこと

1. 暗号化キーを事前に共有せずにメッセージを暗号化する方法
2. 現在オンラインで行われている主な鍵の交換方法

インターネットを介した通信の盗聴は、直接接続しているWi-Fiホットスポット、インターネットサービスプロバイダー、閲覧したWebページをホストしているサーバー、各国のゲートウェイ、そしてその間にある膨大な数のルーターやスイッチなど、多くのポイントで行われています。

暗号化されていなければ、これらの通信はすべて、ストーカーやハッカー、政府機関などの盗聴者に読まれてしまいます。しかし、通信を暗号化するためには、通信相手との間で鍵を取り交わす必要があります。Webサイトを閲覧する場合、そのWebサイトを運営するサーバーと安全に鍵を交換するにはどうすればよいのでしょうか。インターネットのような安全ではない経路でしか通信できない2つの当事者(2人、1人と1台、2台のサーバーなど)が、会うことなく効率的に鍵の合意をする方法が必要です。

物理的な例。鍵を交換せずにメッセージを交換する場合

まず、物理的な例を以下に示します。アサタがボビーに荷物を送りたいとします。彼女はその荷物を、複数のロックをかけた大きな留め具のついた丈夫な箱に入れます(1)。彼女は箱にロックをかけましたが、ボビーはこれを開ける鍵を持っていません。アサタはボビーに箱を郵送しますが、ボビーは箱を開けることができません(箱が輸送されている間は誰も開けられません)。ボビーは箱を自分でロックします(2)が、これを開ける鍵をアサタは持っていません。箱を受け取ったアサタは、自分の鍵を外してボビーに箱を送り返します(3)。これでボビーは箱を開けることができるようになります。箱を開けようとする他の者は、アサタの鍵、ボビーの鍵、またはその両方を破らなければなりません。

鍵を共有せずに安全なメッセージを交換する

このように、鍵を交換しなくても、何かを安全に送信することは可能です。しかし、暗号化キーを交換するために、物理的にロックされた箱を郵送するわけにはいきません。そこで必要になるのが、デジタル通信に使える数学的なバージョンです。

数学的な例。鍵を交換せずにメッセージを交換する方法

では、物理的な箱や鍵を使わずに、どのようにして暗号化を行うかを考えてみましょう。例えば、(いつものように)任意のテキストを暗号化することができ、(ここでもいつものように)複数の暗号化レイヤーを適用することができ、レイヤーの暗号化と復号化をどのような順序で行っても同じ結果が得られるような暗号化プロトコルがあるとします。この最後の性質を満たす数学的操作は、「可換commutative」と呼ばれます。暗号化とは何か」の章で説明した暗号化プロトコルはすべて可換です)。それでは、ヴィジュネル暗号を例にして説明します。

Assataは次のようなメッセージを暗号化します。

AT ONE TIME IN THE WORLD THERE WERE WOODS THAT NO ONE OWNED
(世界のある時代には、誰も所有していない森があった。)

というメッセージを、ヴィジュネル暗号と鍵ALDOで暗号化し、暗号文を得ます。

ae rbe elae tq hhp zcrwg hhpus wpus wzrrs ekot yr cnp rknpg

と入力し、その結果をBobbyに送ります。Bobbyは鍵を持っていません! しかし、Bobby はこの暗号文を Vigenère 暗号と LEOPOLD の鍵で暗号化し、二重に暗号化されたテキスト

li fqs poli hf vss kgflu skayg ldfv hdfgg pnzx mg qys cobeu

を得ます。

その結果を Assata に送り返します。AssataはBobbyからのメッセージを自分の鍵(ALDO)で “復号 “し、(暗号化されたままのメッセージ)

lx ccs elxi wc hsh hsfar ekpvs lsch hscsg eklx bd cyh zabtr

を取得し、その結果をBobbyに送ります。

最後に、Bobbyは自分の鍵(LEOPOLD)でこれを解読し、Assataが最初にBobbyに送りたかったメッセージを得ます。

AT ONE TIME IN THE WORLD THERE WERE WOODS THAT NO ONE OWNED
(世界のある時代には、誰も所有していない森があった。)

この例では、アサタは自分の鍵(ALDO)を誰とも共有しておらず、ボビーも自分の鍵(LEOPOLD)を誰とも共有していないことに注意してください。ヴィジュネル暗号は可換であるため、メッセージがアサタの鍵で暗号化され、次にボビーの鍵で暗号化され、次にアサタの鍵で復号化され、最後にボビーの鍵で復号化されても問題はありません。重要なのは、メッセージがそれぞれの鍵で一度ずつ暗号化され、復号されたということです。盗聴者は、3つある中間暗号文のいくつかを見ることしかできません。

物理的な例。安全でないチャンネルでの秘密の合意

現代の暗号システムでは、このようにメッセージ全体を何重かに暗号化してやり取りするのではなく、上記の例のように最初のやり取りを行い、目的の通信に使用する鍵を決定します。アサタは、「AT ONE TIME IN THE WORLD…」というメッセージを送信するのではなく、より長い通信に使用するための暗号化キーを送ったと考えてください。これからDiffie-Hellman鍵交換と呼ばれる、現代のほとんどすべての通信で使われている鍵交換の数学的基礎を説明します。

まず、数学の代わりに絵を使って、どのように行われるかを見てみましょう(下図)。ここでは、2色の絵の具を混合し、この二つの絵の具の混合を解除する[もとの二つの色に戻す]ことはできないと仮定します。具体的には、2色のうちの1色が何であるかを知っていても、それに何の色を混ぜて、結果的に混ざった色になったのかを知ることはできないと仮定します。

アサタとボビーは、まず絵の具の色(この例では黄色)と量(例えば10mL)に合意します(1)。これは安全ではない通信経路で行うことができ、盗聴者には色と量もわかってしまうことを想定します。次に、アサタは色(ここでは錆びたオレンジ)を選び、それを秘密にします(2)。彼女は黄色10mLと錆びたオレンジ10mLを混ぜて、珊瑚色のような色にします(3)。彼女はこれを、盗聴者に見られてしまうことを承知の上で、安全ではないチャンネルを使ってBobbyに送信します。Bobbyも同じように、自分の秘密の色を使います(4)。

次に、Bobbyから受け取った絵の具のサンプルを見てみましょう(5)。アサタは自分の秘密の色(6)を10mL混ぜて、濃い紫(7)にします。ボビーも同じことをします。黄色、彼女の秘密の色、そしてBobbyの秘密の色をそれぞれ10mLずつ混ぜると、Assataの不快な茶色っぽい暗い紫色が得られます。ボビーの絵の具の混合物は、黄色と彼の秘密の色とアサタの秘密の色を10mLずつ混ぜ合わせて得られます。つまり、Bobbyも同じように不快な茶色っぽい暗い紫(8)になってしまうのです! 盗聴者はこの暗い紫色を作ることができるのでしょうか?盗聴者は、黄色(1)、黄色とアサタの秘密の色の組み合わせ(3)、黄色とボビーの秘密の色の組み合わせ(5)を盗み見しています。しかし、不快な茶色を作るためには、盗聴者はアサタかボビーの秘密の色を得るために混合を解除する必要がありますが、それはできません。

ディフィー・ヘルマン鍵交換(Diffie-Hellman Key Exchange)

このプロセスを数学的に再検討してみましょう。ここでは、元に戻すことは不可能か困難で、しかも可換式の数学的操作を用います。逆転が困難な数学的演算や関数は一方向性関数と呼ばれます。この数学的操作を記号☆で表してみましょう。つまり、ある数a、b、cに対して、a ☆ b = cとなるとします。「可換」とは、a ☆ b = b ☆ aということです。実際には、ブルートフォースbrute-force攻撃(またはブルートフォースに近い攻撃)によってのみ、aに対してあらゆる可能性を試すことで、aが何であるかを知ることができるはずです。☆は乗算記号のようなものと考えてもよいでしょう。(なお普通の乗算は可換ですが一方通行ではありません。数学に興味のある方へ: 実際のDiffie-Hellmanでは、☆をべき剰余で実装できます。)

下の図は、アサタとボビーがある数字pに合意し、それを公開(1)します。アサタは秘密の数aを選び(2)、p ☆ aを計算し(3)、その結果をボビーに送ります。ボビーは秘密の数字bを選び(4)、p ☆ bを計算して、その結果をアサタに送ります(5)。アサタはボビーからのメッセージ(5)と自分の秘密番号(6)を使って、(p ☆ b) ☆ a (7)を計算します。ボビーは,アサタからのメッセージ(3)と自分の秘密の番号(4)を使って,(p ☆ a) ☆ b (8)を計算します.☆は可換なので、(p ☆ b) ☆ a = (p ☆ a) ☆ b となり、アサタとボビーがそれぞれ計算しても、同じ結果になるのです。盗聴者は p ☆ a, p ☆ b, それに p しか知らず、☆は一方通行なので、盗聴者はアサタとボビーの共有共通番号を計算する効率的な手段を持っていません。それはアサタとボビーの秘密です。アサタとボビーは、この共有する数を暗号鍵として使用することができます。

秘密鍵の合意

ディフィー・ヘルマン鍵交換の利用

ディフィー・ヘルマン鍵交換は、暗号鍵を合意するための手段としてあちこちで使用されています。この鍵交換は、皆さんが遭遇するほとんどの暗号化通信の基礎として使用されています。特に、httpsでWebサイトに接続する際の鍵交換の基本となっています。あなたがウェブサイトにアクセスするとき、URLは http:// または https:// で始まります。前者の場合、ウェブサイトのサーバーとの通信は一切暗号化されません。後者の場合、通信は暗号化され、その通信を暗号化するための鍵はDiffie-Hellman鍵交換で生成されます。

コンテクスト: 良いことが悪いことに

アサタとボビーが最初に行うことは、鍵交換の基礎となる数字pに合意することです。この数字は公開されていますが、私たちは数学の演算☆が一方通行であることを前提にしていたので、pが公開されていても問題ありませんでした。しかし、多くの計算資源を持っている人(裕福な国民国家など)は、2つの段階を経て(現実世界で☆に使われているべき剰余などの関数の)演算☆を反転させることができます。第1段階は、非常に長い時間をかけて、特定のpの値に対して行わなければなりません。第2段階は、第1段階が完了していると仮定して、同じpの値に対して非常に早く(リアルタイムで)行うことができます。つまり、同じ値pを使用するのではなく、異なる値pを使用し、頻繁に変更するべきなのです。

しかし、2015年に研究者が示したところによると、上位100万のhttpsドメインのうち18%が同じ値pを使用しているとのことです。ディフィー・ヘルマン鍵交換に依存している通信プロトコルには、他にもSSH(secure shell)とVPN(virtual private network)があります。同じ研究者は、SSHサーバーの26%とVPNサーバーの66%がディフィー・ヘルマン鍵交換に同じ値のpを使用していることを示しました。これは、強力な敵が暗号を解読するのにほとんど苦労しないことを意味します。

ディフィー・ヘルマンプロトコルは強力で信頼性の高いものですが、プロトコルを実装する側は、実際に安全であることを確認するために慎重に行う必要があることが浮き彫りになりました。

次に学ぶべきこと

中間者
公開鍵暗号方式

外部リソース

Adrian, David, Karthikeyan Bhargavan, Zakir Durumeric, Pierrick Gaudry, Matthew Green, J. Alex Halderman, Nadia Heninger, et al. “Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice.” In Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security, 5-17. デンバー。ACM, 2015.

メディアへの帰属

lockbox © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
diffie-hellman-concept © Lorddota adapted by OSU OERU is licensed under a CC BY-SA (Attribution ShareAlike) license
diffie-hellman © Lorddota adapted by OSU OERU is licensed under a CC BY-SA (Attribution ShareAlike) license

暗号化ハッシュ

(訳注:前項で「次に学ぶべきこと」として記載されている「中間者」はこの次に説明されています)

本章を読む前に、「現代の暗号」の章を読むことをお勧めします。

この章で学ぶこと

1. ハッシュ関数とは何か
2. 暗号ハッシュ関数とは何か、通常のハッシュ関数との違いは何か
3. 暗号化ハッシュ関数の使用例

ハッシュ関数とは、任意の大きさのデータ(名前、文書、コンピュータプログラムなど)を、固定の大きさのデータ(3桁の数字、16ビットの数字など)に変換する(コンピュータの)関数のことです。ハッシュ関数の出力は、(入力メッセージの)ダイジェスト、フィンガープリント、ハッシュ値、またはハッシュと呼ばれます。

暗号化ハッシュ関数は、以下のような特性を持ち、暗号化アプリケーションにとって有用なものです。

1. 同じメッセージは常に同じ出力ハッシュになる。
2. 入力メッセージから出力ハッシュ値を生成することは、総当り(可能な入力メッセージをすべて試す)以外では不可能である。
3. 同じ出力ハッシュ値になる2つの異なる入力メッセージを見つけることは不可能である。
4. 入力メッセージへの小さな変更は、新しいハッシュ値が元のハッシュ値と無相関に見えるほど、出力ハッシュ値が大きく変化する。

これらの特性のうち、最初の2つはほとんどの暗号化プロトコルと同じ性質のものです。同じメッセージを2回別々に暗号化した場合、同じ暗号鍵を使用していると仮定すれば、同じ結果が得られるはずです。暗号文だけしかなければ、(復号鍵なしで)平文を生成することは不可能なはずです。しかし、暗号化は、復号鍵を使って、暗号文から平文へと遡ることができます。ハッシュ関数は本質的に一方通行であり、逆のことができるための鍵はありません。暗号ハッシュ関数の出力は、(暗号文のように)入力メッセージのすべての情報を暗号化しているわけではありませんが、入力を識別するのに十分な情報を暗号化しており(性質1と3に依存)、これを偽造することは極めて困難です(性質2)。

暗号ハッシュ関数の応用例は、「中間者」「パスワード」「公開鍵暗号」の章で紹介しますが、ここでは簡単な使い方として、コミットメント・スキームcommitment schemeを見てみましょう。

自分の頭の良さを証明する暗号化ハッシュ関数の使い方

アサタとボビーの二人が難しい数学の問題を解こうとしています。アサタは先に答え(S)を手に入れ、、ボビーに答えを漏らさずに、ボビーが解く前に自分が答えを持っていることを証明したいと考えています。そこで、アサタは解答Sの暗号化されたハッシュをhash(S)とし、ボビーにhash(S)を渡します。ハッシュは暗号化されているので、ボビーはhash(S)からSを知ることはできません(性質2)。ボビーが最終的に問題を解き、自分でSを見つけたとき、彼はhash(S)を計算し、その結果がアサタが彼に与えたものと同じであることを確認することができます。特性1と3により、ボビーはアサタのハッシュ関数への入力と自分のハッシュ関数への入力が同じに違いないことがわかり、アサタが先に問題を解決したことが証明されます。(特性4はここでは使われていませんが、この特性がないと、アサタが正解に近いが正解ではない解を得た場合、2つの出力は非常に似ていて、ざっと比較しただけでは違うことがわからない可能性があります)

ハッシュ関数はどのようなものか?

現在、様々な暗号化ハッシュ関数が使われていますが、それらを詳細に説明することは、本書の範囲を超えています。しかし、どのようなものかを知るために、暗号ハッシュ関数が持つ特性のすべてではないですが、いくつかの特性を満たす例を挙げてみよう。

ここでの例のハッシュ関数は、chunked XORと呼ばれるものです。排他的あるいはXORとは、一対の入力が与えられたときに、入力が異なる場合は真(または1)を出力し、そうでない場合は偽を出力する関数です。つまり、例えば、リンゴXORバナナ=1、リンゴXORリンゴ=0、0 XOR 1=1、1 XOR 1=0となります。2進数(0と1)のXORの連鎖を取ると、意味のある答えが得られる。すなわち、1 xor 1 xor 0 = 0, 1 xor 1 xor 0 xor 1 = 1です。2進数の列に対して、XORは、連鎖の中に奇数個の1があれば1を、そうでなければ0を返します。

chunked XORは、2進数の入力で動作します。(入力が2進数でない場合は、コンピュータと同じように、まず2進数で表現します)。入力をハッシュ関数の出力サイズと同じ大きさのチャンク(例えば8ビットのグループ)にグループ分けします。その塊を縦に並べて、各列の内容をXORすると、下図のようになります。

これは、入力の長さに関係なく、出力が常に同じ長さ(この例では8)になるという点で、ハッシュ関数です。chunked XORは、暗号ハッシュ関数の最初の特性を満たしていることがお分かりいただけると思います。しかし、残りの特性についてはうまくいっていません。例えば、入力メッセージ(必ずしもあなたの望むような入力メッセージだとは限りませんが)を所与の出力ハッシュで生成することは簡単です。例えばハッシュの結果に 11111111 11111111 を連結すると、そのハッシュとなる入力メッセージが作れるのです。
同じ理由から、同じ出力ハッシュとなるメッセージをいくつでも作ることができます。最後に、入力メッセージの1ビットだけ変更してみると、出力ハッシュは1ビットしか変化しません。

コンテクスト: 暗号化ハッシュは憲法修正第4条の権利を侵害する

2008年、米国の地方判事は、米国政府が個人のデータを暗号ハッシュ化したい場合は、まず令状が必要であるという判決を下しました。この事件では、ペンシルバニア州司法長官(the Pennsylvania Office of the Attorney General)事務所の特別捜査官が、容疑者のコンピュータのハードドライブをコピーしました。特別捜査官は、コピーの暗号ハッシュを計算しました(特性1と3を利用して、改ざんしていないことを証明するために、後からオリジナルと比較できるようにしたのです)。次に、フォレンジックツールを使って、コピーしたハードディスク上の個々のファイル(削除されたがまだ上書きされていないファイルを含む)の暗号ハッシュを計算し、これらのハッシュを、禁制品ファイルのデータベースにあるファイルのハッシュと比較しました。捜査官は、ハードドライブ上のファイルのハッシュと禁制品ファイルのハッシュの間に3つのマッチを発見しました。プロパティ1と3により、ハードドライブには少なくとも3つの違法ファイルが含まれていることになります。この事件を担当した裁判官は、この行為(ファイルをハッシュ化して既知のハッシュと比較すること)がハードドライブの捜索にあたると判断し、違法な捜索や押収からの保護に関する被告人の憲法修正第4条の権利を侵害したとしました。その結果、この証拠は裁判で使用することができませんでした。

私たちは、児童ポルノの所持に関わるこの事件の詳細を開示すべきだと考えています。私たちは、児童ポルノの所持(または作成や配布)の権利を擁護することはありませんが、権力(この場合は、コンピュータ上の特定のファイルの存在を決定する権力)が、例えば、友人があなたと共有していた音楽、原油流出の画像、#blacklivesmatterデモの画像、Earth First! ジャーナル記事とか、利用されたくないやり方でで利用する場合のことを想定することは重要です。

次に学ぶべきこと

パスワードについて
中間者
暗号化された署名による真正性
外部リソース

アメリカ合衆国 v. ロバート・エルズワース・クリスト(III)、被告。刑事訴訟番号1:07-cr-211。627 F.Supp.2d 575 (2008).

中間者
本章をお読みになる前に、「暗号化のための鍵の交換」および「暗号化ハッシュ」の章をお読みになることをお勧めします。
学ぶべきこと

中間者

本章をお読みになる前に、「暗号化のための鍵の交換」および「暗号化ハッシュ」の章をお読みになることを勧めします。
学ぶべきこと
1. なりすまし攻撃とは何か
2. 中間者攻撃とは何か
3. 受動的中間者攻撃と能動的中間者攻撃の違い
4. フィンガープリンティングを使って、鍵交換時にけた中間者攻撃を発見する方法
「暗号化のための鍵の交換」の章では、2人の人間が会わなくても、暗号化の鍵に合意する方法を学びました。これは堅牢な方法ですが、インターネット上では、通信しようとしている相手(インスタントメッセージや電子メールを送っている友人や、Webページを読み込もうとしているサーバーなど)が本当に当の本人かどうかを確認するのが難しいという問題があります。ここでは、「暗号化のための鍵の交換」の章で紹介した鍵をかけた箱の例を用いて、盗聴者がどのように通信を傍受するかを説明し、次にディフィー・ヘルマン鍵交換でこのことがどのようになされるのかを説明します。このような通信の傍受は「攻撃」と呼ばれます。
 

物理的な中間者攻撃

アサタは、鍵のかかった箱を3回やりとりすることで、ボビー安全パッケージを送ることができました。1回目は彼女が施錠した状態、2回目はボビーが施錠した状態、3回目は彼女が自分の施錠を外してボビーの施錠だけにした状態です。しかし、この荷物を受け取るのがボビーだということを、彼女はどうやって知るのでしょうか?そして、その箱が彼女に送り返されてきたときに、それがボビーの施錠であることをどうやって知ることができるのでしょうか?
下の図のように、アサタが施錠してボビーに送られる箱をエドガーが横取り(傍受)したとします(1)。エドガーは、自分の施錠した箱をアサタに送り返すことができます(2)。アサタはエドガーの施錠とボビーの施錠の違いを見分けられない限り、アサタは施錠がボビーによるものであると仮定して、自分の施錠を外して、ボビーに箱を送るでしょう(3)。もしエドガーが再び荷物を横取りしたら、今度は自分の施錠だけなので、箱を開けて荷物の中身を調べることができます(4)。こうするためには、エドガーはアサタからボビーに送られてくる荷物をすべて傍受しなければなりません。このような方法でアサタとボビーのコミュニケーションを攻撃することを「なりすまし攻撃」といいます。エドガーはボビーになりすましているということです。(これは、一般的には中間者攻撃とはみなされません)。
なりすまし攻撃
このような状況では、ボビーは箱をまったく受け取っていません。しかし、エドガーはさらに先を行くことができます(下図)。エドガーは、アサタからの施錠された箱を開封した後(4)、同じ3つの交換方法のミラーイメージを使ってボビーに送信し、ボビーがアサタから施錠された箱を受け取ったと思い込ませることができます(5)-(8)。
中間者攻撃
エドガーがアサタのオリジナルのメッセージを(メッセージの内容を確認しただけで)渡した場合、これを受動的な中間者攻撃と呼びます。エドガーが全く別の箱にとりかえた場合は能動的な中間者攻撃です。いずれの場合も、エドガーはボビーとアサタの間のすべての箱を傍受する必要があります。なぜなら、箱の宛先はボビーかアサタであって、エドガーではないからです。
このような攻撃は、エドガーがアサタとボビーの通信の中間にいる者the man in the middleであることから、中間者攻撃と呼ばれています。(J.エドガー・フーバーの場合は、文字通り「その男the man」と言われました)。

ディフィー・ヘルマン鍵交換に対する中間者攻撃

「暗号化のための鍵の交換」の章で紹介した表記法を使って、Diffie-Hellman鍵交換がどのように行われるか見てみましょう。アサタとボビーが鍵を生成するためには、最初に二人はある数値pに合意していなければなりません。アサタは数字 a を選び、p☆a を計算し、その結果を ボビーに送ります。ボビーは数字 b を選び、p☆bを計算して、その結果をアサタに送ります。これで アサタとボビーは p☆a☆bを計算することができるようになり(彼ら以外誰も計算できません)、これを暗号化された通信のための暗号鍵として使用します。
さて、ここでエドガーがアサタとボビーの通信を傍受できたとします。このとき、エドガーはアサタとディフィー・ヘルマン鍵交換を1回、またボビーともディフィー・ヘルマン鍵交換を1回行うことができます(下図)。アサタはボビーとディフィー・ヘルマン鍵交換をしていると思っていますが、実際にはエドガーと鍵交換をしており、ベージュ色の鍵p☆a☆eができます。ボビーはアサタとディフィー・ヘルマン鍵交換をしていると思っていますが、実際にはエドガーと鍵交換をしており、青色の鍵p☆b☆eができます。結局、アサタとエドガー左の共有鍵を、エドガーとボビーは右の共有鍵を持っていることになります。しかし、アサタとボビーはお互い共有キーを持っていると思っています。
ディフィー・ヘルマン鍵交換に対する中間者攻撃
アサタとボビーが共有鍵だと思っているもの(実はエドガーによってすり替えられた偽物)を使い始めたあとも、エドガーはバレないように策略を続けなければなりません。つまり、アサタは自分が持っている鍵でメッセージを暗号化します。このメッセージがボビーに届いたとしても、ボビーは同じ鍵を持っていないので、メッセージを解読することはできません。エドガーがすべきことは、暗号化されたメッセージを傍受し、アサタと共有している鍵で復号することです。ここでエドガーには2つの選択肢があります。エドガーは単純にメッセージを読み、ボビーと共有している鍵で暗号化し、ボビーに送信する。これは、受動的な中間者攻撃す。つまり、エドガーはアサタとボビーの間のメッセージを読んでいますが、アサタとボビーは誰にも読まれていないと思っています。エドガーのもう一つの方法は、アサタからのメッセージを変更し、ボビーと共有している鍵で暗号化し、ボビーに送信することです。これは能動的な中間者攻撃す。いずれの場合も、エドガーはアサタとボビーの間の通信を継続的に傍受しなければなりません。そうしないと、どちらかが自分の持っていない鍵で暗号化されたメッセージを受け取ってしまい、中間者の存在が知られてしまうからです。

暗号ハッシュによる中間者攻撃の発見 フィンガープリンティング

アサタとボビーがディフィー・ヘルマン鍵交換を行った後、2人の鍵を比較して同じ鍵であることが確認できれば、盗聴者が中間者攻撃を行っておらず、2人だけが暗号化された通信を見ていることが確認できます。この理由は、ディフィー・ヘルマン鍵交換の一部を盗聴者が見ても、アサタとボビーがそれぞれ選択した鍵の隠された部分(上の図のaとb)を作ることはできないからだということを思い出しましょう。実際、中間者攻撃を発見する最も基本的な方法は、アサタとボビーがそれぞれの鍵を比較することです。
この方法にも、問題があることにお気づきでしょう。
つまり、アサタとボビーが鍵を比較しようとした場合、エドガーが通信を操作して、鍵が同じであるかように見せかけたりしないでしょうか?
もちろんこれは可能です。そこで、アサタとボビーは別の通信手段で鍵を比較すべきだということになります。たとえば、もともとインターネットで通信していたのであれば、電話でキーを比較するのです。これは、鍵を比較するためのアサタとボビーのあらゆる通信をエドガーが傍受するのは極めて困難だという前提に立っています。理想的には、アサタとボビーが直接会ってキーを比較することです。いずれにしても、これは帯域外比較out-of-band comparisonと呼ばれます。帯域bandとは通信チャネルのことで、鍵の比較は、鍵が交換される通信の帯域とは別に行われるべきなのです。
しかし、ちょっと待ってください。もしアサタとボビーが別の通信手段を持っているのなら、複雑な計算をせずに昔ながらの方法で、鍵を交換すればいいのではないでしょうか?
そうなのですが、最近の暗号方式の鍵は、数百文字から数千文字という非常に長いものになっています。コンピュータを使わずに鍵の交換をするのは面倒です。もし、安全な通信手段の設計者が、別の通信チャネルで鍵の交換を自動化しようとすると、その別の通信チャネルを指定しなければならず、安全な通信システム全体が煩雑になってしまいます。(Webサイトにアクセスするために電話をかけなければならないことを想像してみてください。)また、エドガーはどのチャネルで鍵が交換されているかを察知すれば、そのチャネルで中間者を演じることができます。
それにしたって、そんなに長い鍵を比較するのは面倒でしょう?
そうですね。そこで、アサタとボビーは、鍵全体を比較するのではなく、「暗号化ハッシュ」の章で説明したように、鍵の暗号化ハッシュを比較します。以下の暗号化ハッシュの性質を思い出してください。(1)入力(ここでは鍵)が長くてもハッシュは非常に短くなる(例えば数十文字程度)。(2)出力ハッシュが同じになるような2つの異なる入力(ここでは2つのキー)を見つけることはほとんど不可能ですから、エドガーは、ハッシュが同じになるようにアサタとボビーとの間でディフィー・ヘルマン鍵交換を操作することはできません。(3) もし誰かがハッシュを傍受しても、そこから入力(この場合は鍵)を再度生成するといったリバースはできません。
なお、暗号化ハッシュをフィンガープリント(指紋)と呼ぶことがあるので、鍵の暗号化ハッシュを比較することをフィンガープリンティングと呼ぶことも思い出してください。フィンガープリンティングは安全番号(safety numbers)、検証(verification)、認証(authentication)など、アプリによって違う用語が使われている場合があります。

帯域内フィンガープリンティング

帯域内で鍵を比較する方法には、一般的にはあまり使用されていないけれど巧妙な方法が2つあり、どちらも前述の帯域外フィンガープリンティングのバリエーションす。
1つ目の方法は、弱いパスワードを使用するものです。アサタの最初のペットの名前やボビーの生家の地名(例えば「ゴールドマン通り」)など、敵が知らないことをアサタとボビーが知っていれば、アサタとボビーはこれを弱いパスワードとして使うことができます。アサタは自分の鍵と弱いパスワード(”ゴールドマン通り”)を組み合わせて、その結果の暗号化ハッシュを計算します。ボビーは自分の鍵で同じ計算をする。アサタとボビーは、その結果を既に通信している通信チャネルで比較します。暗号化ハッシュの性質上、アサタとボビーは同じ鍵と同じパスワードを持っている場合にのみ、同じ結果になります。
フィンガープリンティング
エドガーが中間者を演じている場合、エドガーはアサタと鍵を共有し、ボビーとは別の鍵を共有しています。エドガーはバレるリスクを承知でアサタのハッシュをそのままボビーに渡すか、または、アサタが計算する結果とボビーが計算する結果を同じにするためにその弱いパスワードを推測しなければなりません(下図)。アサタとボビーの間では、パスワードが強固である必要はありません。エドガーが推測を一度でも失敗すると(例:”panther”)中間者攻撃の存在がわかってしまうので、エドガーはブルートフォース攻撃でパスワードを推測するわけにいかないのです。
中間者攻撃を発見するためのフィンガープリンティング
2つ目の方法は、音声通話やビデオ通話を使った鍵の比較に用いられます。ここでは、アサタは自分の鍵を、(これまで見てきたような数字や文字の羅列ではなく)人間が読める2つの単語にハッシュ化します。ボビーも同じことをします。アサタとボビーが同じ鍵を持っていれば(つまり、中間者がいなければ)、2人は同じ単語を共有することになります。アサタは最初の単語を読んでボビーへ伝え、ボビーは2番目の単語を読んでアサタへ伝え、それぞれがハッシュの結果を比較できます。もしエドガーが中間者を演じていれば、アサタとボビーは2つとも別々の単語を持つことになります。エドガーが策略を続けるためには、エドガーはアサタとボビーが共有している2つの単語を話すために、アサタとボビーの声(場合によってはビデオも)を合成しなければなりません。

フィンガープリント認証は、全員がやらなくても保護になる

安全な通信手段があっても、鍵の比較(フィンガープリント)ができなければ、エンド・ツー・エンドの暗号化を使用するメリットはほとんどありません。中間者攻撃は世界的な監視システムでは自動化されているので、中間者攻撃の実態を(フィンガープリントによって)見抜けないのであれば、いつでも中間者攻撃が実行されていると見なすべきです。ところが、フィンガープリントが可能な場合、特に攻撃が自動化され広く行われている場合には、中間者は発見されてしまうリスクがあります。一部のユーザーがフィンガープリントのプロセスを経ていれば、全員がフィンガープリントを行わなくても中間者攻撃の広がりを防ぐことができるのです。
もちろん、対象を限定して監視されるリスクがあるユーザーにとっては、通信の安全性を確保するためにフィンガープリントは不可欠です。

フィンガープリントができないときの対処法

フィンガープリンティングができない通信手段もたくさんあります。例えば、ウェブサイトにhttpsでアクセスする場合です。httpsでは、ブラウザとWebサイトのサーバーとがディフィー・ヘルマン鍵交換によって暗号鍵を生成します。しかし、ユーザーがWebページのコンテンツにアクセスする前に、別の通信手段でWebサイトのサーバーに連絡を取り、鍵のフィンガープリントを取得することは現実的ではありません。というのもWebサーバの電話オペレータの声を知っているわけでもないし、帯域内比較を使うための知識をもっているわけでもありませんから。このような場合には、公開鍵暗号方式や認証局を利用した別の鍵の検証方法が用いられます。公開鍵暗号方式については、「公開鍵暗号方式」の章で説明します。

コンテクスト:中国のグレート・ファイア・ウォール

中国では、”グレート・ファイア・ウォール”によってインターネットが厳しく検閲されていることは多くの人が知っています。2013年1月中旬から、主にコンピュータのプログラミングコードのホスティングに使用され、さらに一般的な情報共有にも使用されているサイト、GitHubの一部が中国でブロックされました。2013年1月21日には、ドメイン全体がブロックされました。しかし、GitHubがコンピュータの開発やビジネスで中心的な役割を果たしていることや、この分野が中国経済にとって重要であることを考慮し、世論の反発を受けて、2013年1月23日までにGitHubのブロック解除されました。1月25日には、WhiteHouse.govで、グレート・ファイア・ウォールの構築に関与した人々の米国入国を拒否するよう求める請願書が作成されました。この請願書は、同じ日に作成された、中国の検閲インフラに貢献したとされる中国人のリストをアップしたGitHubページにリンクされていました。その翌日には、GitHubにアクセスするユーザーが中間者攻撃を受け、https経由でWebサイトにアクセスする際のフィンガープリント認証に相当するチェックが失敗したという報告がソーシャルメディアに掲載されました。中国政府は、GitHubをブロックできないことを知っていました。またグレート・ファイア・ウォールでは、キーワードの一致などを利用しても、GitHub内の特定のページへのアクセスだけをブロックできないのです。というのもGitHubがhttpsに対応しているため、httpsで暗号化して盗聴者から守っているからです。そこで次の方法が、中間者攻撃です。ユーザーが攻撃の警告サインを無視すると、どのページにアクセスしているのか、あるいは編集しているのかを政府に知られてしまう危険性があります。中国政府は、中国国内のユーザーと、Outlook、AppleのiCloud、Googleなどの主要なインターネットサービスとの間で広範な中間者攻撃を展開していると推定されています。
中間者攻撃を行っているのは中国だけではありません。シリアやイランでも同様の攻撃が見つかっています。

次に学ぶこと

コミュニケーションを守るために

外部リソース

・GreatFireは、中国の無検閲インターネットにアクセスするためのツールを提供し、中国のインターネット検閲や監視を報告・検証しています。特にGreatFireは、Outlook、AppleのiCloud、Google、GitHubに対する、中国政府によるものと思われる中間者攻撃を報告・検証しています。
・Eckersley, Peter. “A Syrian Man-in-the-Middle Attack against Facebook.” Electronic Frontier Foundation, May 5, 2011.
・電子フロンティア財団. “Iranian Man-in-the-Middle Attack against Google Demonstrates Dangerous Weakness of Certificate Authorities.”. August 29, 2011.

図版の出典

なりすまし攻撃 mitm-impersonation © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
中間者攻撃 mitm © OSU OERU は CC BY-NC (Attribution NonCommercial) ライセンスの下に提供されています。
ディフィー・ヘルマン鍵交換に対する中間者攻撃 dhe-mitm © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
フィンガープリンティング fingerprinting © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
中間者攻撃を発見するためのフィンガープリンティング fingerprinting-mitm © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license

​ パスワードについて

この章を読む前に、「暗号化ハッシュ」の章を読むことをお勧めします。
この章で学ぶこと
1. 「パスワード保護」が暗号化を意味する場合とそうでない場合
2. パスワードはどのように破られるのか
3. パスワードのリスクを最小限に抑えるためのパスワードの使い方
4. パスワードから暗号化キーを生成する方法

「パスワード保護」が暗号化を意味しない場合

パスワードはアクセスを制御するために使用されます。例えば、オンラインアカウントへのアクセスを許可するためにアカウントパスワードが使われます。しかし、そのアカウント内の情報が自分の管理する鍵で暗号化されているのは稀であり、情報がまったく暗号化されていないこともあります。その場合、プロバイダー(GoogleやDropboxなど)はその情報を読み取ることができます。その他のパスワードは、暗号化されたファイルや文書のロックを解除するために使用され、これらを暗号化パスワードと呼ぶことにします。アカウントのパスワードは、予約制の店に入るときに、入口のに自分の名前を伝えて、その名前予約客リストの名前と一致させるようなものですが、暗号化パスワードの使用は、金庫のを開けるために鍵を使うようなものです。前者の場合は、入口の係(あなたが契約しているプロバイダーのたとえ)があなたのアクセスを許可するかどうかに関係しています。後者の場合、金庫暗号文を表し、金庫の中身平文です。平文にアクセスするには、鍵やパスワードがなければ不可能です(少なくとも現実的ではありません)。後述するように、暗号鍵はパスワードから生成される場合もあります。
つまり、あなたの情報がアカウントパスワードで暗号化されていなくても、あなたの情報にアクセスできる人数を最小限にすべきなのです。しかし、私たちがなぜこのようなパスワードの使い方を推奨しているかを理解するには、パスワードがどのようにして侵害されるのかを理解する必要があります。

パスワードのクラッキング

パスワードは侵害されることがあります(クラックされる、ともいいます)。あるシステムにあるすべてのアカウントのパスワードが一括して侵害されることもあれば、1つずつ侵害されることもあります。パスワードは人気商品にも似たところがあって、同じパスワードをあちこちのアカウントで使ている人も多いし、「人気のある」パスワード(ひどいパスワードともいいますが多くの人々に利用されています。(たとえば 123456、password、qwerty、admin、welcome など)。もしあるサービスで使われているパスワードが露見してしまうと、別のサービスや別の人のアカウントが侵害される可能性があるのです。
パスワードがどのように侵害されるかを考えてみましょう。
パスワードをひとつ解読するために敵が使う手段あなたがパスワードを入力するときと同じです。例えばウェブサイトを介してパスワードを破ることができます。この場合、ウェブサイトの管理者は、比較的簡単にパスワードを保護することができます。例えば、数回パスワードを間違えたアカウントをロックしたり、パスワードを入力した後はサーバーの反応を強制的に遅、繰り返して入力することによる推測を防いだりします。アカウントの管理者ができるもう一つの方法は、二要素認証を可能にすることです。二要素認証とは、アカウントにアクセスするためにパスワードを入力することに加えて、SMSやスマートフォンのアプリ、または物理的な認証キー(YubiKeyなど)へ送られてくる認証コード入力を必要するものです。アカウントを侵害するために敵はパスワードだけでなく、認証コードを受け取デバイスも必要になるのです。
敵は、あなたがパスワードを入力したデバイス(携帯電話やコンピュータ)に物理的にアクセスすることもできます。でも、より可能性が高いのは、ニュースでよく報道されているように、あなたのパスワードが保存されているサーバーが侵害されたり、ハッキングされたりすることです。この場合、あなたのユーザー名とパスワードだけでなく、そのシステムにアカウントを持つすべての人が危険にさらされることになります。サーバー上のパスワードデータベースにアクセスした敵は、あなたのアカウント情報にもアクセスできる可能性がありますが、上述したように、ハッキングの目的は、ハッキングされたサービスではなく、もっぱら別のサービスへのアクセスを得るのが目的かもしれません。
責任あるウェブサービスプロバイダーは、パスワードを平文でサーバーに保存せず、パスワードの暗号化ハッシュを保存します。こうしておくと、1個のパスワード(またはすべてのパスワード)を発見するために、敵はパスワードを推測し、その暗号ハッシュを計算し、これを盗んだパスワードのデータベースと比較します。実際には、パスワード推測ツール(John the Ripperなど)は以下の3つの手法を使います。
1. 辞書攻撃:辞書の単語、少しひねった辞書の単語(例:pa55w0rd、fr33d0m)(訳注)、および以前にクラックされたパスワードを試す。
訳注:原文では salt と表記。ソルトには次段の説明にもあるように認証システムがパスワードなどを保存する際に付け加えるランダムな符号列の意味あるhttps://e-words.jp/w/%E3%82%BD%E3%83%AB%E3%83%88.html
2. ブルートフォース:ありうる限りの文字や記号の組み合わせを全部試す(実用上の理由から、この方法は比較的短いパスワードにしか使えない)。
3. 事前に計算されたハッシュ:あらかじめパスワード候補暗号ハッシュの表を作っておいて、それと比較する。
ユーザーは、後述する適切なパスワード管理を行うことで、最初の 2つの手法を回避することができます。サービスプロバイダーは、計算に時間がかかる、あるいは大量のメモリを使用する暗号ハッシュ関数を使用することで、パスワードクラッキングを実用的でないものにすることができます。この手法は、ログイン時などで単一のパスワードについて行なわれるとき気にならないかもしれませんが、クラッキング時にはハッシュの計算が遅くなります。
サービスプロバイダーは、ログイン時パスワードに長いランダムな文字列(ソルト)を追加することで、事前に計算されたハッシュの使用をさらに妨げることができます。このソルトは、ユーザー名と一緒に平文で保存されることもあるため、敵はこの情報も把握するかもしれませんが、事前計算ハッシュの表作成する時点ではソルトを持っていなかったことでしょう。さらに、2人のユーザーが同じパスワードを使っている場合でもソルトが異なるため、それぞれのソルトを使えばパスワードの暗号ハッシュも異なります。このため、攻撃者はそれぞれのパスワードを個別に暴かなければなりません。
あなたはオンラインサービスの管理者が責任を持ってあなたのユーザー情報を保管し、ときには暗号化ハッシュも用い、このような攻撃から保護していると信頼することにします。はあなたの番です。

パスワードのベストプラクティス

パスワードクラッキングの手法に対抗するためには、パスワードは十分な長さ(ブルートフォース攻撃を防ぐため)、一般的単語でな(辞書攻撃を防ぐため)、しかも再利用されていないもの(1つのアカウントが侵害されても、のアカウントが侵害されないため)が必要です。
これを実現するには、手動で入力しなくてもよいところでは、パスワードマネージャーを使ってパスワードを生成し保存します。パスワードマネージャーは、bdY,Fsc_7\&*Q+cFPのような強力なランダムパスワードを生成することができるはずです。これは、手動で入力しなくてもよいとき、つまり、パスワードマネージャーがあなたにって入力してくれるパスワードとしては最適です。
必ず入力しなければならないパスワード(携帯電話で入力するパスワード、パスワードマネージャーを保護するためのパスワード、コンピュータの暗号化やロック解除に使用するパスワードなど)には、次のようなランダムな単語の羅列である「ダイスウェアパスワード」(パスフレーズ)(訳注)を使用してください。
remake.catfight.dwelled.lantern.unmasking.postnasal
(訳注) 「ダイスウェア (Diceware) とは、ダイス(さいころ)を使って「ダイスウェア単語一覧」と呼ばれる単語一覧から単語をランダムに選び、パスフレーズを作る方法のことである。」https://www.hyuki.com/diceware/ あるいは、https://www.rempe.us/diceware/#eff
このパスワードは、サイコロと単語リストを使って手動で生成することができます。おおかたのパスワードマネージャー生成できますが、どちらにせよこのパスワードはそれほどたくさん必要とものでありません
上の2つの例でパスワードはランダムに生成されていることに注意してください。これは重要なことです。自分で作ったパスワードが素晴らしく強力だと思ても、あなたの脳で考えたものなら、おそらく他の誰かの脳でも考えることができるでしょうから、辞書攻撃の影響を受けやすいのです。
人間には覚えにくくて、コンピュータなら簡単に当てられるようなパスワードを、かれこれ20年もかけて宣伝してきたわけです。
XKCDのパスワード強度

パスワードから暗号化キーを生成する

暗号化されたファイルやデバイスを解除するため使うパスワードがあります。実際にこの場合暗号化キーが鍵導出関数という暗号化ハッシュ関数を使用して、パスワードまたはパスフレーズから生成されます。暗号ハッシュ関数の入力はパスワードであり、出力は暗号鍵です。なぜこのようなことができるのでしょうか?暗号ハッシュ関数の特性を再確認してみましょう。
1. 入力の長さにかかわらず、出力は常に同じ大きさです。つまり、どんなに短い(そして弱い!)パスワードでも、適切なサイズの暗号鍵を得ることができます。(ただし、短くて弱いパスワードは、上で説明したパスワードクラッキングの手法で破られやすい)
2. 同じ入力は、常に同じ出力になります。つまり、あなたのパスワードは常にあなたが必要とする対応する暗号鍵を生成します。
3. 出力から入力を生成することは不可能です。ですから、もし誰かがあなたの鍵を手に入れたとしても、少なくともあなたのパスワードを再現することはできません。
4. 同じ出力になる2つの異なる入力を見つけることはできません。そのため、あなたのパスワードを解読しようとする人は、あなたのパスワードと同じ暗号鍵を生成する別のパスワードを見つけることさえできないでしょう。
5. 入力を少し変えると出力が大きく変わり、新しいハッシュ値が古いハッシュ値と無相関に見えること。まあ、この性質は暗号鍵の生成にはあまり役立ちませんが…。

コンテクスト: 対策が破られるとき

2016年、長年の活動家であるデレイ・マッケソンは、2要素認証を設定していたにもかかわらず、標的攻撃を受けて自分のTwitterアカウントと2つのメールアドレスが侵害されました。敵は、ベライゾンに電話して新しいSIMカードを要求することで彼の携帯電話をコントロールすることができました。敵は、ベライゾンを説得できるほどマッケソンのことを知っていたのです。敵はマッケソンの電話番号でサイトにアクセスすると、パスワード再設定コードを受け取り、マッケソンのパスワードを変更して、マッケソンのアカウントにアクセスできるようになりました。これは、完璧なセキュリティ対策は存在しないこと、従って、標的となりうる人(今回の場合、マッケソンはBlack Lives Matterを支持していたために標的となった)には、特別な警戒が必要であることを示しています。マッケソンの電話番号を使ってパスワードをリセットすると2要素は解除されて、アカウントの保護1要素だけになりました。マッケソンのアカウントを敵から守っていたのはパスワード電話による認証ではなく、電話だけだったのです

次に学ぶこと

・デバイスの保護

外部リソース

Dreyfuss, Emily. “@Deray’s Twitter Hack Remind Us Even Two-Factor Isn’t Enough.” (@Deray’s Twitter Hack Remind Us Even Two-Factor Isn’t Enough. Wired, June 10, 2016.
ウィキペディア。”ジョン・ザ・リッパー(英語)” 2020年12月29日
TeamPassword. “2019年のワーストパスワードトップ50(英語)” 2019年12月18日

図版の出典

XKCDのパスワード強度 password_strength © Randall Munroe is licensed under a CC BY-NC (Attribution NonCommercial) license

公開鍵暗号方式

この章を読む前に、「暗号化のための鍵の交換」の章を読むことをお勧めします。
この章で学ぶこと
1. 対称鍵暗号方式と非対称暗号の違い
2. 公開鍵暗号方式のメカニズム
暗号化方式は大きく2つ別けられます。一方の対称鍵暗号では暗号化の鍵と復号する鍵とが同一か、または容易に変換できます。「暗号化とは何か?」の章で紹介した基本的な暗号(シーザー、ヴィジュネル、ワンタイムパッド)がこの仲間です。さらに最新の共通鍵暗号もこれに含まれていて、携帯電話やパソコンのデータの暗号化に使用されています。しかし、これらの暗号では通信相手と秘密裏に鍵を共有する必要があるため、通信で使用するのはやや難しいのです。ディフィー・ヘルマン鍵交換は、2人の人間がインターネットなどの安全ではない経路でのみ通信しながらも、共有の鍵を生成して共通鍵暗号化方式を使えるようにする方法です。
他方の非対称鍵暗号方式(公開鍵暗号方式)は、鍵の共有問題を別の方法で解決しています。公開鍵暗号方式では、1つの鍵を暗号化と復号の両方に使うのではなく、暗号化の鍵(公開鍵と呼ばれる)と復号の鍵(秘密鍵と呼ばれる)の2つの鍵を使用します。この2つの鍵は次のような性質を持っています。
1. 公開鍵から秘密鍵を生成することは不可能であり、2つの鍵はあらかじめ生成しておく必要がある。
2. 公開鍵で暗号化されたメッセージの復号は、現実的には対応する秘密鍵でのみ可能である。
ボビーからアサタへ暗号化してメッセージを送りたいとします。アサタはあらかじめ秘密鍵と公開鍵をペアで作成し、ボビーに公開鍵の方を(安全ではない経路で)送信します。ボビーはその公開鍵を使って暗号化し、暗号文をアサタに送信します。この暗号文はアサタの秘密鍵を使ってのみ復号できるものです。アサタの公開鍵は誰もが持っているにもかかわらず、この公開鍵で、アサタの秘密鍵でしか復号できないような暗号文を作れるのです。したがって、秘密鍵を秘密にして保管しておけば、セキュリティが確保されます。
公開鍵暗号: 鍵ペアの生成と公開鍵配布
公開鍵と秘密鍵をペアで生成し、公開鍵を共有する。公開鍵で暗号化する、秘密鍵で復号する
この方式なら実際に誰でも自分の公開鍵を公開しておくことができます。例えば、アサタは自分の公開鍵をオンラインで公開し、アサタへ暗号文を送りたい人は、送るメッセージを彼女の公開鍵で暗号化します。同様に、ボビーは自分の公開鍵と秘密鍵のペアを作って彼の公開鍵をオンラインで公開しておけば、他の人がボビーに暗号化されたメッセージを送ることができ、ボビーだけが自分の(安全に保管された)秘密鍵で復号できるようになります。

ディフィー・ヘルマン鍵交換の再検討。公開鍵暗号方式か対称鍵暗号方式か?

ディフィー・ヘルマン鍵交換について、対称鍵暗号と公開鍵暗号の観点から再度考えてみましょう。アサタボビーは、ある数pについて(暗号でなく公開で)合意していることを思い出してください。アサタは(秘密)の数字aを選び、p☆aを計算してボビーに(暗号でなく公開で)送信します。この場合、aをアサタの秘密鍵、p☆aをアサタの公開鍵、そしてこの方式を公開鍵プロトコルの一部とみなすことができます。ここでボビーは自分の秘密の数字bを選び、それをアサタの公開鍵と組み合わせて、p ☆ a ☆ bを得ます。同様に、アサタはボビーの「公開鍵」p ☆ bと自分の秘密鍵を組み合わせてp ☆ b ☆ aを得ます。p ☆ a ☆ b = p ☆ b ☆ aなので、アサタとボビーは暗号化に使う共通の鍵を持ち、復号化にも同じ鍵を使います。このように、これは対称鍵プロトコルの一部です。以上の理由から、ディフィー・ヘルマン鍵交換は、公開鍵暗号と対称鍵暗号の中間に位置するものといえます。

公開鍵暗号方式と対称鍵暗号方式の組み合わせ

公開鍵暗号は通常、共通鍵暗号よりもコンピュータの負担が多くなります。ブルートフォース攻撃などに対して、共通鍵と同等のセキュリティを実現するには、公開鍵は対称鍵よりもはるかに長い鍵が必要になります。また、暗号化の実行自体も、公開鍵の方が共通鍵よりも時間がかかります。さらにある鍵を使って暗号化する期間が長ほど暗号文が増えていき、ブルートフォース以外の方法で暗号を破ろうとするときの材料を追加してしまうという問題もあり、鍵が「経年劣化」しやすいのです
このような理由から、通信セッションでは公開鍵は、対称鍵を暗号化するのに使用されるのが一般的です。例えば、ボビーがアサタに暗号化されたメッセージを送りたいとします。ボビーは対称暗号鍵を生成し、対称暗号を使ってメッセージを暗号化します。その後、アサタの公開鍵を使って対称鍵を暗号化します。そして,(対称鍵)暗号化されたメッセージと(公開鍵)暗号化された対称鍵をアサタに送ります
対称鍵暗号と公開鍵暗号の組み合わせ-暗号化
アサタは自分の秘密鍵を使って暗号化された鍵を復号化し、その結果を使って暗号化されたメッセージを復号化します。
対称鍵暗号と公開鍵暗号の組み合わせ-復号化
公開鍵は、鍵(一般的にはランダムに見える文字列)の暗号化にのみ使用されるため、人間の言葉の言い回しに頼った暗号化の解除方法では失敗するため、公開鍵が古くなることはありません。また、あるメッセージの解読に成功しても、別のメッセージの暗号を解くのには役立たないという利点もあります。なぜなら、それぞれのメッセージは異なる鍵で暗号化されているからです。

コンテクスト 反核活動とPretty Good Privacy

公開鍵暗号の中でも特に強固されているのがPGPです。これは、謙遜表現であるPretty Good Privacyの頭文字をとったものです。PGP相互運用可能なフリーのオープンソース版はGPG(GNU Privacy Guard)です。PGP暗号化の使用をサポートするいくつかのプラグインやメールクライアントを使用して、電子メール通信暗号化にPGPは最も一般的に使用されています。PGP公開鍵のオンライン・ディレクトリ(互いに同期されている)がいくつかあり、それぞれが電子メールアドレスと関連付けられているので、ボビーはアサタのPGPキーを調べて、暗号化された電子メールを送ることができます。
長年反核活動家でもあったフィル・ジマーマンが1991年にPGPを開発したのは、考えを共有する人たちが掲示板サービス(BBS、1980年代のReddit)を安全に利用し、メッセージを安全に保存できるようにするためでした。PGPは、オープンソースのプロジェクトとして開発され、非営利目的の使用にはライセンスは必要ありませんでした。当初は、平和運動を中心とした草の根の政治団体向けのニュースグループに投稿していましたが、ソースコードを配布するためのニュースグループにも投稿され、瞬く間に米国外にも広がりました。ユーザーや支持者には、全体主義国の反体制派、市民的リバタリアン、サイファーパンクなどがいました。しかし、当時、41ビット以上の鍵を使った暗号システムは、米国の輸出規制の定義では軍需品とみなされていました。PGPは当初、128ビットの鍵をサポートするように設計されていました。1993年2月、ジマーマンは “無許可の軍需品輸出 “の容疑で、アメリカ政府の正式な捜査対象となりました。これに対してジマーマンは、PGPのソースコードをすべて本にして公開し、広く配布・販売しました。PGPを自作したい人は、表紙を外しページを切り離し、OCRプログラムでスキャンすると、ソースコードのテキストファイル一式ができあがります。軍需品(銃、爆弾、飛行機、ソフトウェア)の輸出は制限されていましたが、書籍の輸出は米国憲法修正第1条によって保護されています。数年後、ジマーマンの捜査は、彼や他の誰に対しても刑事責任を問うことなく終了しました。
米国の暗号技術に関する輸出規制は、現在も有効ですが、1990年代後半に大幅に緩和されています。PGP暗号は、もはや輸出できない武器の定義には当てはまりません。

次に学ぶこと

暗号化署名による真正性の確認

外部リソース

電子フロンティア財団 “A Deep Dive on End-to-End Encryption: 公開鍵暗号化システムの仕組みとは?” Surveillance Self-Defense, September 29, 2014.
Zimmermann, Phil. “Why I Wrote PGP.” 1999.

図版の出典

公開鍵暗号: 鍵ペアの生成と公開鍵配布 pubkeycrypto-key-gen-share © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
対称鍵暗号と公開鍵暗号の組み合わせ- pubkeycrypto-split1-encrypt © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
対称鍵暗号と公開鍵暗号の組み合わせ-復号化 pubkeycrypto-split2-decrypt © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license

暗号化された署名による真正性

本章をお読みになる前に、「暗号ハッシュ」と「公開鍵暗号方式」の章を読まれることをお勧めします。
この章で学こと
1. デジタル署名と同等の機能を実現する方法
2. 暗号化された署名、どのように真正性保証され
3. 電子的な真正性とは何か
4. 暗号化された署名を使用すると、どのように信頼を広めることができる
公開鍵暗号システムは、しばしば真正性の確認に使用されます。PGPでは、公開鍵と秘密鍵の相補的な性質を利用してこれが可能になります。最初に2つの暗号鍵が作成され、どちらかを公開鍵として使用できます。つまり、2つのうちどちらの鍵を使っても、一方の鍵が復号化に使われるなら他方の鍵を暗号化に使用できます(復号化に使鍵を秘密にしておきます)。
一方の暗号鍵を公開鍵、もう一方の暗号鍵を秘密鍵として使うことに決めたも、秘密鍵でメッセージを暗号化することは可能です。しかしの場合、あなたの公開鍵を持っていれば誰もがメッセージを解読できます。公開鍵はその名のとおり公開してあるので誰でも(あなたの秘密鍵で暗号化された)メッセージを解読できてしまい、この暗号化ではメッセージのプライバシーをまったくれません
ところで、あなたの公開鍵で解読できたメッセージを暗号化しうる唯一の人物は、あなた、つまり、秘密鍵を持っているあなただけだ、ということにお気づきでしょう。メッセージを秘密鍵で暗号化することは、デジタル技術で署名したことに相当し、暗号化された署名、デジタル署名、電子署名などと呼ばれます。実際、暗号化された署名は、真正性に関する2つの特性を実現できます。
1. 帰属性。メッセージを書いたのは(他の人ではなく)あなたであること。
2. 完全性。メッセージが書かれた通りに受け取られること、つまり改ざんされていないこと。
2つ目の特性は、改ざん者が目的を達するためには、あなたの公開鍵復号したときに望むよう平文生成されるように暗号文を改ざんする必要がある、という事実に基くものです。しかし、これは全く実現不可能なのです。
これらの特性は、あなただけが自分の秘密鍵を管理しているという場合にのみ意味を持ちます。なぜなら、誰か他の人があなたの秘密鍵をもっていればテキストを変更して暗号署名することがでてしまうからです。

暗号化ハッシュへのデジタル署名

実際には、メッセージ全体を暗号化するのではなく、メッセージの暗号ハッシュ(ダイジェストまたはフィンガープリント)を暗号化して、デジタル署名を行います。これは、効率性のためです。ここでは、アサタがメッセージに署名し、ボビーがその署名を検証するプロトコルを考えてみましょう(下図参照)。
アサタは、自分のメッセージの暗号ハッシュを計算し、その結果を自分の秘密鍵で暗号化することでデジタル署名を作成し、メッセージに添付します。
署名の作成
ボビーはこの署名を受け取り、アサタの公開鍵を使って復号化すると、アサタが生成したものと同じ暗号化ハッシュられます。次に、ボビーは受け取っているメッセージの暗号ハッシュを作成し、その結果をアサタから受け取っ復号化された暗号化ハッシュと比較します。
暗号化ハッシュを偽造することは不可能である
暗号ハッシュは偽造できないことを思い出してください。もし、ボビーが生成した2つのハッシュ(アサタのメッセージから直接生成したものと、アサタの署名から復号して生成したもの)が同じであれば、次の2つのことがわかります。
1. アサタだけが署名を生成できた。秘密鍵を持っているのはアサタだけなので、アサタの公開鍵で復号できるものを暗号化できる。
2. アサタがメッセージを書いてから、そのメッセージは変更されていない。もし誰かがメッセージを変更した場合、メッセージの暗号化ハッシュは、署名に含まれる暗号化ハッシュとは異なるはずです。それでは偽造がわかってしまうため偽造者は新しい署名を作成しなければなりませんが、アサタの秘密鍵がなければ署名を作成することはできません。
つまり、真正性暗号技術確認できたのです。
なお、エドガーは、中間者攻撃によって、単に署名を削除することができます。つまり、暗号化された署名果的であるためには、暗号化された署名いつでも使うことに決めておく必要があります。最近のエンド・ツー・エンドの暗号化メッセージングアプリには、一般的にデフォルトで署名が組み込まれていますが、これは一般のユーザーからはわからないことが多いのです。

暗号化された署名の用途

上記の例のように、暗号化された署名は、伝統的な手書きの署名や蝋印と同様に、メッセージに信頼性を与えることができます。しかし、デジタル署名が可能なのは、電子メールなどのメッセージ限りません。

ソフトウェアの検証

あまり意識されないかもしれませんが、デジタル署名の最も明確で一般的な利用方法は、ソフトウェアの検証でしょう。アプリなどのソフトウェアは、開発者からあなたのコンピュータや携帯電話に届くまでの間に誰かが手が加えなければ、開発者が望んだ通りの動作をします。責任ある開発者は、メッセージへの署名と同じように、製品に署名します。プログラムやアプリは、実際には単なるコンピュータファイル(または一連のファイル)であり、単なる文字の羅列メッセージの種にすぎません。開発者が公開鍵暗号方式でソフトウェアに署名している場合、注意深いユーザーは、開発者の公開鍵を入手して上記のような検証を行うことで、署名を確認することができます。(開発者は、あなたがソフトウェアをダウンロードした経路とは別の経路で公開鍵を提供しているはずです。これにより、「中間者」の章で説明したように、帯域外比較が可能になります。帯域外とは、検証に使用する公開鍵、メッセージソフトウェアのダウンロードとは違う通信経路(帯域)で取得したことに基づいています。)

フィンガープリント認証と信頼の輪の管理

アサタの公開鍵を信頼するために、ボビーはこれまで説明してきたように、鍵のフィンガープリントを確認することで、本当に彼女の公開鍵かどうかを検証しなければなりません。そうしないと、侵入者であるエドガーが自分の秘密鍵に対応する公開鍵をボビーに渡してしまう可能性があるからです。しかし、アサタの公開鍵が本当に彼女のものであることをボビーが確認した場合、ボビーはアサタの公開鍵に(自分の秘密鍵で)デジタル署名することができます。こうしておけば、ボビーは自分がすでに検証した公開鍵を確実に管理することができ、以下のようにすればアサタの公開鍵を他の人に知らせることができるのです
クリーヴァーアサタに暗号化メッセージを送信しようとしいて、エドガーが中間者を演じていないことを確認したいとします。しかし、クリーヴァーはアサタの公開鍵を検証できるような別の通信経路がありません。ところがうまい具合にクリーヴァーはボビーの公開鍵を受け取ってそれを検証できています。そうなると、ボビーは自分の署名とともにアサタの公開鍵をクリーヴァーに送ることができます。クリーヴァーがボビーを信し、ボビーの公開鍵を検証しているので、クリーヴァーはアサタの公開鍵についてのボビーのデジタル署名を検証し、アサタの公開鍵が本物であることを確信することができます。
これが「信頼の輪」の基本です。鍵のフィンガープリント直接検証されていなくても、自分と目的の通信相手との間に信頼の道筋があればそれを通して間接的に検証することができるのです。

コンテクスト:令状のカナリア

令状のカナリア(またはカナリア声明)は、公開された日付までにプロバイダが、データ漏洩、暗号鍵の開示、システムへのバックドアの提供など、ユーザを危険にさらす可能性のある手続き(合法・触法をとわず)の対象となっていなかったことをユーザに通知するものです。公表されたスケジュールどおりに声明が更新されない場合、ユーザーは、過去または将来のデータを危険にさらす可能性のある問題が発生したと推測することができます。例えば、Riseup.netでは、四半期ごとにカナリア声明を発行しています。この声明には暗号化された署名が付されており、その真正性、つまり、このステートメントを書いたのがRiseup.netの人間であることを確認することができます。また、公表日当日のニュース記事へのリンクを声明に掲載することで、声明がその以前に発表されたものではないことを証明しています。
米国では、米国政府が誰かに言論を差し控えることを強要する法的手続きがあり、それを回避するための手段として令状のカナリアが使われるようになりました。一方、米国政府は誰かに何か、特に真実ではないことを語らせることはできないので、ユーザを危険に晒すような出来事は何もなかったとするカナリア声明をプロバイダに強要することはできませんでした。
この言葉は、もともと炭鉱で毒ガスを検知するためにカナリが使われていたことに由来するものです。
 

次に学ぶこと

メタデータ

外部リソース

Riseup. “Canary Statement” (英語) Accessed February 9, 2021.
Torプロジェクト. “How Can I Verify Tor Browser’s Signature?” (英語) Accessed February 9, 2021.

図版の出典

署名の作成 pgpsigning1 © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
暗号化ハッシュの偽造は不可能 pgpsigning2 © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license

メタデータ

この章で学ぶこと
1. メタデータとは何か
2. メタデータでわかってしまうこと
3. メタデータの保護が難しい理由

メタデータとは何か?

メタデータとは、データそのものではなく、データに付随するあらゆる情報のことす。いくつかの例を挙げて説明します。
1. 電話の場合、メタデータには、自分や相手の電話番号、通話の開始時刻、通話時間などあります。携帯電話の場合、メタデータには携帯電話の位置(GPS座標)、接続されている基地、さらには使用している携帯電話の機種などが含まれるでしょう。電話のメタデータには伝送される音声そのものは含まれず、音声は「データ」す。電話のメタデータは、かつては通話料金の請求書作成のために必要とされました。
2. 最近のデジタル写真には、撮影した時間や場所、使用したカメラの種類や設定などの情報が含まれていることが多くみられます。この場合、写真そのものがデータとなります。Facebook、Twitter、Instagramなどの多くのウェブサイトでは、あなたが写真やビデオをアップロードする際に、プライバシー保護のためにこのメタデータを削除しています。また、Google、Flickr、YouTubeなど、そうした措置をとっていないサイトもあります。
3. 最近のほぼすべてのカラープリンターは、米国政府が貨幣の偽造に使用される恐れがあるとしてプリンターメーカーに要請した結果、フォレンジックコードを各ページに印刷するようになっています。フォレンジックコードは目で見えるものも見えないものもあります。この場合、ユーザーが意図して印刷した情報(フォレンジックコードを除いたもの)がデータ、フォレンジックコードによってエンコードされた情報がメタデータとなります。フォレンジックコードには、印刷日時、プリンターのシリアル番号などが含まれます。
エドワード・スノーデン最初公開した情報で、NSAベライゾンの顧客がかけた電話のメタデータをすべて収集していたことが明らかになり、メタデータに関する議論が世間に広まりました。これをきっかけにしてどのようプライバシーが侵害されているのか、という議論が続いたのです。この年の初め、AP通信社は、司法省からメタデータの提出命令を受けていましたが、APは「これらの記録は、2ヶ月間にAP通信社が行ったすべてのニュース収集活動における機密情報源とのコミュニケーションが明らかにされる可能性があり、AP通信社のニュース収集活動拠点も漏洩し、AP通信社の活動と運営に関する情報を開示するものであるが、それら関して政府には知る権利がない」との理由で命令を無効にするように訴えました。裁判所の判決理由では、このようメタデータを使って集めたGPSデータから「毎週教会に通っているのか、大酒飲みなのか、ジムの常連なのか、浮気をしている夫なのか、治療を受けている外来患者なのか、特定の個人や政治団体の仲間なのかを推測することができる 」と指摘ています。
NSAは内部文書の中で、メタデータを同機関の 「最も有用なツール」の一つとしています。

メタデータとインターネット

あなたがウェブサイトにアクセスすると、あなたのコンピュータとウェブサイトのあるサーバーの間で、インターネットを通じて情報が送されます。基本的には、あなたのコンピュータからサーバーに向けてウェブサイトのコンテンツを要求するメッセージが送信され、その後、サーバーからあなたのコンピュータにウェブサイトのコンテンツが信されます。インターネット上で送信される情報は、しばしばトラフィックと呼ばれ、どこへ向かうにせよ伝達されるメッセージは、実際にはたくさんの短いパケットに分割されています。各パケットには主要部分が3つあります。
1. ヘッダーには、送信者と受信者(あなたのコンピューターとウェブサイトのサーバーなど)それぞれのインターネットアドレスと、送信されるデータの種類(HTMLなど)が記載されています。
2. データとは、メッセージの内容(例えば、そのウェブページ内容の全体一部)のことです。
3. トレーラーは、パケットの終わりを明示し、パケットが転送中に破損していないことを確認するものです(ハッシュ関数を使用)。
このようなパケットではヘッダとトレーラがメタデータです。ヘッダーは、パケットの送信先を示すものであるため、保護や隠蔽が難しいものです。手紙を送るのと同じように、配達には住所が必要です。インターネット上の住所(IPアドレス)は、あなたの物理的な位置に関連しており、実際、IPアドレスからあなたの物理的な位置が特定できることがよくあります。
この説明は、電子メール、ビデオストリーミング、VOIP通話、インスタントメッセージなど、インターネット上で送信されるあらゆる情報に当てはまります。

コンテクスト: 内部告発者の保護

2017年5月、リアリティ・ウィナーは、2016年の米国大統領選挙へのロシアの干渉について報告したNSAの文書を公開しました。この記事が公開される数日前に彼女が逮捕されたことで、なぜ彼女がすぐに内部告発者として特定されたのかについて多くの憶測を呼び、多くの人がこの記事の取り扱いについてウェブサイト「Intercept」の責任を指摘しました。リアリティ・ウィナーは、匿名で文書のカラープリントをインターセプトに郵送しました。インターセプトは通常のジャーナリズムのルールに則り、検証のために文書の写真をNSAに送り、同じ写真を再編集して報道しました。この記事が公開された直後、何人かの人が、写真の中にプリンタのフォレンジックコードが見え、文書が印刷された日時とプリンタのシリアル番号が判別できたと指摘しました。この情報からFBIがリアリティ・ウィナーを特定できた可能性もありますが(情報源を保護するために、Interceptは写真のフォレンジックコードを編集すべきでした)、彼女の仕事用コンピュータのファイルアクセスのログから身元が判明した可能性の方が高いと思われます。

次に学ぶこと

匿名ルーティング

外部リソース

CNN. “AP Blasts Feds for Phone Records Search.” May 14, 2013.
電子フロンティア財団. “Justice Department Subpoena of AP Journalists Shows Need to Protecting Calling Records.”. May 13, 2013.
電子フロンティア財団. “カラープリンターの秘密のコード、政府あなたを追跡できる。” October 16, 2005.
Snowden Archive-the SIDtoday Files. “The Rewards of Metadata.” Intercept, January 23, 2004.
New Yorker. “The Metadata Program in Eleven Documents”. 2013年12月31日
Intercept. “Top-Secret NSA Report Details Russian Hacking Effort Days before 2016 Election.” June 5, 2017.
Atlantic. “The Mysterious Printer Code That Could Have Led the FBI to Reality Winner.” June 6, 2017.

匿名ルーティング

この章を読む前に、「暗号化のための鍵の交換」と「メタデータ」の章を読むことをお勧めします。
この章で学ぶこと
1. インターネットで誰が何にアクセスできるのか
2. オンラインでの匿名コミュニケーションを可能にする技術
3. 匿名性とは何か、匿名性の落とし穴はどこにあるの
オンライン通信ではインスタントメッセージや電子メール、ウェブの閲覧など、さまざまな情報がコンピュータに送られてきます。このでは、主にウェブ閲覧について説明しますが、それ以外のほとんどの場面でも同じ考え方が適用できます。コンピュータのアドレス(IPアドレス)は、インターネット通信で情報パケットがコンピュータに到達するための手段であり、住所があれば封筒や荷物が郵便受けに届くのと同じです。そのため、コンピュータの現在のIPアドレス(インターネットに接続している場所によって変わります)は、あなたの物理的な位置に関連しています。その物理的な場所がどれほど精密にわかるかは、インターネットサービスプロバイダ(ISP)がどれだけの情報を公開し、誰に対して公開するのかによって決まります。ISPは、あなたがどのケーブルテレビ回線どの電話回線、またはどの携帯基地を通じてインターネットに接続しているのかを知っていますが、IP位置情報(ジオロケーション)検索サイトに郵便番号程度の情報を提供するだけかもしれません。あるいは家の位置情報までも提供する場合あります。
IPアドレスは、あなたのコンピュータに情報を送るために必要なメタデータの1つに過ぎません。しかしウェブを閲覧する際には、厳密に言えば必要ない他のメタデータがたくさん、「あなたの閲覧体験を最大限に高める」ために送信されます。このような情報の例としては、使用中のブラウザに組み込んだプラグインの名前、タイムゾーン(日本時間、など)コンピュータの画面サイズといった詳細があります。これらはあなたがインターネットに接続する際に使用するIPアドレスが変わった場合でもあなたを特定するための識別子となるのです。
では、このような個人を特定できるメタデータにアクセスできるのは誰なのでしょうか。もしhttpsのような暗号化がなければ、盗聴者はメタデータだけでなく、通信内容にもアクセスできてしまいます。暗号化されていればメタデータの一部はISPや盗聴者から保護されますが(どのブラウザを使用しているかなど)、IPアドレスやアクセスしているウェブサイトのドメイン情報は保護されません。また、閲覧しているウェブサイトのサーバーは、コンテンツだけでなく、メタデータにもアクセスできます。
ところで、あなたに情報を提供するために使用されるメタデータを保護する方法はないのでしょうか、また、誰から保護することができるのでしょうか。ここでは、ウェブ閲覧を匿名化する2つの方法について説明します。

中間者信じて使う仮想プライベートネットワーク

仮想プライベート・ネットワーク(VPN)技術は、大学や会社内のネットワークなどのローカル・ネットワークを、キャンパス外の住宅やホーム・オフィスなどのリモート地点拡張し、大学や会社の外にいても、ローカル・ネットワークにいるときと同じ資源(図書館の学内サービスやソフトウェアの社内契約など)を使えるようにするための手段として始まりました。VPNに接続している間、ウエッブページのホストは、ローカルネットワークのIPアドレスを、VPNによって拡張されているあなたのアドレス、つまりあなたの自宅のIPアドレスであるかのように認識します。このような理由から、VPNは位置情報を匿名化するために使用されています。
VPNは、無害であることが期待される中間者として動作します(下図参照)。アサタは、ウェブサーバーへのリクエストを直接送信するのではなく、リクエストはすべてをVPNに送信します。またVPNはインターネットからリクエストの応答を取得し、そをアサタに送信します。この方法の詳細は、VPNサービスによって異なりますが、一般的に、あなたとVPNの間の通信は暗号化されます。VPNの保護品質は、そのVPNにどれほど多くの人々接続しているか依存しています。VPNとの通信を監視している盗聴者は、VPNに接続している個人と、VPNとウェブサーバー間で通信されるリクエストを特定することができますが、VPNに出入りするリクエストが大量になれば、リクエストと対応するユーザーを完全には照合することができません。
仮想プライベート・ネットワーク(VPN)
もちろん、VPN プロバイダはあなたのインターネット上での行動をすべて把握していますし、VPN プロバイダの協力があれば敵も同様に把握することができます。つまり、あなたは自分の情報の保護についてのVPNプロバイダーを信頼いるということになります。しかし、VPN使用とは無関係にISP、同じ情報にアクセスすることができます。あなたは、ISPを信頼するのと同じように、VPNプロバイダーを信頼しているのです。違いは、あなたのISPはインターネット上の宛先サーバーに対してあなたのIPアドレスを隠蔽しないのに対し、VPNは隠蔽するということです。しかし、同じVPNを多くの接続場所(自宅、職場、喫茶店など)から使用すると、当のVPNという単一の組織に各接続場所のインターネット利用状況を完全に把握されてしまうため、ISPよりもプライバシーリスクが多少高くなります。

中間者を信用しなくてよい:Onion Router (オニオン・ルーター)

Onion Router(Tor)は、信頼性の問題を回避しながら匿名でインターネットにアクセスするための手段であり、その名前は暗号化の層(玉ねぎの層のような)を使用することに由来しています。すべての情報を信頼できる1つの仲介者を通すのではなく、何千ものボランティアサーバーからランダムに選ばれた(少なくとも)3つの仲介者を使います(下図)。この仲介者の経路を通るトラフィックは暗号化されていて、最初の(入口)ノードはあなたがTor経由でインターネットにアクセスしていることだけを知り、2番目の(中継)ノードは誰かがTor経由でインターネット上の何かにアクセスしていることだけを知り(ただし、具体的に誰が、具体的に何に、ということではな)、最後の(出口)ノードはある(例えば)ウェブページがTorユーザーによってリクエストされていることだけを知るのです(ただし、リクエストしたのがどのTorユーザーかはわからない)。
この方法は、以下のようなDiffie-Hellman鍵交換によって行われます(下の図を参照)。
(1) アサタは、入口ノードと共有している暗号鍵(赤で示したものを入口鍵と呼ぶ)を設定する。これにより、アサタと入口ノードの間に暗号化された通信チャネルが確立される。
(2) アサタはこの暗号化通信路を使って、入口ノードを介して中継ノードと通信する。入口ノードと中継ノードの間の通信は暗号化されていないが、入口ノード経由のチャネルを使って、アサタ中継ノードと共有する暗号鍵(青字の中継鍵)を確立する。中継ノードが知っているのは、あるTorユーザーと共有鍵を設定していることだけで、そのTorユーザーの身元は知りえない
(3)このプロセスをもう一度繰り返して、アサタは出口ノードと共有する暗号化キーを確立する(緑の部分が出口キー)。
(4) ここまでのプロセスにより、アサタと入口ノード、中継ノード、出口ノードとの間でそれぞれ暗号化を行うための一連の鍵(赤、青、緑)が作成されました。
TorがDiffie-Hellman鍵交換を使って鍵を確立する方法
アサタがdisruptj20.orgにリクエストを送る場合、彼女はdisruptj20.org宛てのリクエストを緑の鍵で暗号化してを出口ノードに送るのですが、これはさらに次のようにして暗号化されるのです。「緑暗号化」されているリクエスト中継ノード宛てのメッセージに組み立てて青の鍵で暗号化し、さらにこれを入口ノード宛てのメッセージに組み立てて赤の鍵で暗号化します。アサタがこの「赤暗号化」メッセージ赤の入口ノードに送信すると、入口ノードでは(アサタと共有している赤の鍵で)第1層の暗号を復号して中継ノード宛てのメッセージが得られますこれを受け取った中継ノードで第2層の暗号を復号するとこのときは中継ノードがアサタと共有している青色の鍵を使用)、出口ノード宛てのメッセージが得られます。これを受け取った出口ノードが暗号を解くと(出口ノードがアサタと共有している緑色の鍵を使います)、disruptj20.org宛てのメッセージが得られ、出口ノードはこのリクエストを転送します。これが下の図の①です
disruptj20.orgがアサタのリクエストに返信するとき、ウェブサーバは情報を出口ノードに送り返します。出口ノードは緑の鍵で暗号化し、それを中継ノードに送ります。中継ノードは青の鍵で暗号化し、それを入口ノードに送ります。入口ノードは赤の鍵で暗号化し、それをアサタに送ります。アサタは、必要な鍵をすべて持っているので、3つの暗号化層をすべて復号することができます。これは下ので②の部分です
データがTorネットワークを通過する仕組み
あなたの情報がTorネットワークを通過したときの経路を再現し、その結果あなたのウェブリクエストを見つけ出すためには、敵対者はあなたが入口中継出口として選択した3つのノードをすべて監視しなければなりません敵がたとえTorネットワークの80%を支配していも、あなたが選択した3つのノードすべて支配できる可能性は50%しかありません。Torのノードは何千もあり、誰でもボランティアで操作することができるので、これはあり得ないことといっていいしょう
これとは別の攻撃手段として、確認攻撃があります。このシナリオでは、敵対者はあなたが特定のウェブサービスを訪れたことを証明しようとします。もし敵対者が、(例えばISP を通している)あなたのウェブ・トラフィックと対象ウェブ・サービスのウェブ・トラフィックに(合法的あるいは法外な手段で)アクセスできれば、敵対者は、あなたが Tor を使用したタイミングと Tor からウェブ・サービスにアクセスしたタイミングに基づいて照合できるかもしれません。このような関係検出手段は、活動家集団「Anonymous」が行ったハッキング活動で有罪判決を受けたJeremy Hammond事件でも使用されました。
他にもTorへの攻撃は行われていますが、Torプロジェクトはその技術セキュリティをとても積極的に改善しています。匿名ブラウジングについてすぐ後に説明します。またーザーが陥る可能性のある落とし穴や、匿名でウェブにアクセスしようとする際のベストプラクティスについて後の方の「アイデンティティを保護するProtecting Your Identity」の章で説明します。

匿名ブラウジング技術の利用とそれへの妨害

中国やイランなど、インターネットがいつも検閲されている国では、多くの人がVPNやTorを利用して検閲を回避しながらウェブにアクセスしています。一方で、インターネット通信のメタデータからVPNトラフィックの証拠を得ることができるため、政府はこれを利用して、中国やシリアでの検閲のように、そのような通信をすべてブロックすることできます。また、イランのように、政府が認可していない特定のVPNプロバイダーへのアクセスを遮断する国もあります。
Torのノードは公開されているので、政府などはTorアクセスを一切使用できないようにすることができます。これは単純にTorノード宛の通信を全て遮断することで可能です。これを克服するには、ブリッジを使用します。ブリッジとは一群の非公開Torノードで、公開された入口ノードの代わりになるものです。ブリッジノードは少数しか運用されていないので、そこへアクセスするには、特定のメールアカウント(例:Google、Riseup!、Yahoo!)からTorプロジェクトにメールを送ってリクエストする必要があります。Torでの通信VPNトラフィックの場合と同様に、パケットインスペクション、つまり通信のメタデータを調べることでもブロックされてしまいます。Torプロジェクトは、インターネット上のTorトラフィックを難読化してTorのトラフィックであると見られないようにする方法を用いて、このような妨害を困難にしています。
また、VPNやTorは、ウェブホストが意図的に特定の地域からは利用できなくしているサイトにアクセスするためにも使用されます。これは、HuluやNetflixなどのメディアプラットフォームでよく見られます。そのため、コンテンツ企業既知のVPNサービス・プロバイダーやTorの出口ノードからのアクセスをブロックすることも、しばしば行われます

コンテクスト Disruptj20

2017年1月20日、米国第45代大統領の就任式の前後大規模な抗議活動が行われました。これらのイベント実行の多くは、disruptj20.orgというウェブサイトでコーディネートされていました。2017年8月には米国司法省がdisruptj20.orgのウェブホストであるDreamHostに対して、「すべてのHTTPリクエストおよびエラーログ」を要求する令状を発行したことが明らかになりました。このログには、ウェブサイトを訪れた130万人とも言われるすべての個人のIPアドレス、どのウェブページを訪れたか、その頻度、訪問者がウェブページに入力したテキストなどが含まれています。
もちろん、匿名ブラウジング技術を使っていたサイト訪問者のIPアドレスは保護されたことでしょう

次に学ぶこと

自分のアイデンティティを守るために

外部リソース

Great Firewall of China https://www.comparitech.com/privacy-security-tools/blockedinchina/ では、中国でどのサイトが何回、どのように検閲されたかを記録しています。

図版の著作権者

仮想プライベートネットワーク(VPN)anonymous-browsing-vpn © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
Tor anonymous-browsing-tor © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
TorがDiffie-Hellman鍵交換を使って鍵を確立する方法anonymous-browsing-TOR-1-keyexchange © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
データがTorネットワークを通過する仕組みanonymous-browsing-TOR-2-data-transfer © OSU OERU is licensed under a CC BY-NC (Attribution NonCommercial) license
Table of Contents