ITの知識が裁判を左右する?

時は約15年前に遡ります。2005年、オーストラリアの交通裁判所で1件の裁判が行われました。
裁判官は、証拠となる電子データの偽造の可能性を指摘して、証拠を無効と判断しました。
「ハッシュ値」をベースに偽造を防止する「MD5」という手法の脆弱性を指摘しての判決でした。

IT知識がないことによる誤審?

その裁判では、スピード違反の取り締まりのために設置されていた監視カメラのデータが証拠として用いられました。裁判所は、「暗号学会で、当該証拠の真正性を担保するハッシュ関数MD5に対して、ある種の攻撃が成功する事例が報告されている」ことを理由として「交通違反の証拠は無効」とする被告側の主張を認める判決を下しました。
当時、この判決には多くの疑問や批判が殺到したわけですが、一体何が起こっていたのでしょうか。また、今後も同じようなことは起こり得るのでしょうか。

ハッシュ値とは

ハッシュ値(または単にハッシュ)とは、あるデータについて「ハッシュ関数」による計算を経て得られる値のことです。
データの内容によってハッシュ値が決まりますので、データが異なれば、原則として、ハッシュ値も異なるという特性を持っています。

ハッシュ値の特性

① 元のデータの長さに関わらず、算出されるハッシュ値の長さは固定。

② 同じデータに対しては必ず同じ値が算出されるが、類似していても少しでも異なるデータに対しては全く別のハッシュ値が算出される。

③ ハッシュ値を算出するために用いるハッシュ関数は理論的には一方向性関数である。よって、ハッシュ値から元のデータを生成することはほとんど不可能。

この特性を利用して、ハッシュ値は、あるデータやファイルの送受信を行ったときに、その「ファイルの真正性」を検証することにも使われています。
「送信時に算出されたハッシュ値」と「受信時に当該受信ファイルから算出されたハッシュ値」が同じものになれば、そのファイルは改ざんなどが行われることなく完全に送信されたことが確認される……という具合です。

ハッシュ関数暗号の改ざん可能性

ただし、違うデータからも、同じ「ハッシュ値」が出る可能性は0ではありません。これを「衝突」と呼んでいます。

故意に、「衝突」を起こすことができれば、ハッシュ値からは、本物のデータとの区別がつきません。すなわち、データの改ざんを隠すことが可能となります。このことを、「ハッシュの衝突耐性への攻撃」と言います。

ちなみに、「耐性への攻撃」は2種類あります。

ハッシュ衝突耐性への攻撃

「強衝突耐性の突破」…同一のハッシュ値を持つ全く異なるデータのペアを発見すること

「弱衝突耐性の突破」…ある原本データのハッシュ値と同じハッシュ値を持つデータを発見すること

日本語の感覚とは若干捻じれが生じるように感じますが、「弱衝突耐性の突破」の方が、衝突を生じさせる相手が固定されている(強い仮定を置いている)分、突破が困難になります。

 

暗号研究者は、文書の改ざんなどを目論み、ハッシュ値が衝突するように仕掛けられる「ハッシュの衝突耐性への攻撃」に対応するため日々研究しています。

裁判当時にデータの改ざんは可能だったか?

 ハッシュ値についての概ねをさらえたところで、問題の裁判に戻ります。

当時の技術

当時、MD5に対しての攻撃として学会で報告されていたのは、数十分程度で同じハッシュ値を持つデータのペアを作り出してしまえるという内容でした。つまりは「強衝突耐性の突破」です。「弱衝突耐性の突破」について学会で話題に上るようなことはありませんでした。

既に存在するデータを偽造しようとしたとき、「強衝突耐性の突破」では事実上不可能と言えます。

狙ったハッシュ値を得ることの難しさ

既に存在するデータを偽造するには、既に存在するデータのハッシュ値と、同じハッシュ値をもつデータを作り出す必要があります。

「強衝突耐性の突破」の技術を使うことで、同じハッシュ値をもつ2つのデータを作り出すことはできます。しかし、この技術では、狙ったハッシュ値をもつデータを作り出すことは不可能です。
「強衝突耐性の突破」の技術があっても、既に存在するデータのハッシュ値と、同じハッシュ値になるかは,まさに「運頼み」になります。

ところで、MD5に用いられているハッシュ値は128bitです。ハッシュ値は、「340澗」という途方もないパターンがあります。「340澗」とは、3400兆を1兆倍したものを、さらに1兆倍した数です。
したがって、既に存在するデータのハッシュ値と、同じハッシュ値をもつデータを作り出せる確率は、340潤回に1回に過ぎません。「運頼み」をするにはあまりに低い数字です。
 

次のハードル

さらに、「340潤回に1回」というのは、あくまで数学的なレベルでの話です。暗号としての実装であればいざ知らず、原本のあるデータを偽造するには、ただ「同じハッシュ値のデータを作り出せばよい。」というものではありません。更なるハードルが待っているのです。

340潤回に1回という天文学的確率を乗り越えて、原本となるデータのハッシュ値と、同じハッシュ値となるデータを見つけたとしましょう。
これが、ソフトウエアやユーザーを騙すことに成功するには、「原本とすり替え可能な性質をもつデータであること」も必要なのです。

つまり、この裁判の状況に当てはめてみれば、

①原本である「ある特定の監視カメラのデータ」と同じハッシュ値になるデータで

②偽の「ある特定の監視カメラのデータのようなもの」を作り出すことができたか

が論点になります。

理論上、あり得ないとは言えません。可能性は0ではありません。

しかし、情報工学の世界では「解法が存在しても、計算量がとてつもなく莫大になる問題」は解けないものと同様に扱われます。現実的には、限られたハードウェアと、限られた時間で解くことは不可能だからです。
本件も、限られた時間で、偽造データを作成することは不可能だったのではないでしょうか。

他方、(裁判官が「強衝突耐性の突破」と「弱衝突耐性の突破」の区別を理解していたかは不明ですが、)この裁判が刑事裁判であったことからすれば、可能性が0ではないことを捉えて、「疑わしきは罰せず」の原則を貫いた裁判所の判断は正しと考える人もいるかもしれません。

以上を踏まえて、当時の裁判所が下した、「偽造証拠の可能性は理論的に0ではないから、証拠は無効である」という判断を皆さんはどう捉えるでしょうか。

現在の暗号的関数

これまで最も利用されてきたMD5という関数については、生成されたハッシュから理論的に元のデータを求めることができた報告があるなどいくつかの脆弱性が発見されました。そのため、MD5は現在、安全性が保証されておらず、現在MD5は政府の推奨暗号リストからは除外されています。(なお、データの原本を担保する目的ではMD5のような推奨暗号リスト外のハッシュ関数も利用されることは、ままあります。)

MD5の次に広く使用されてきたのが「SHA-1」です。しかしこれについても、徐々に脆弱性が明らかにされたことから、現在はSHA-2への移行が進んでいます。
SHA-1については、2017年にGoogleとCWIが、2つの異なるファイルから同じSHA-1ハッシュ値を生成するという衝突を起こすことに成功したと、同ハッシュ値を持つ2つのPDFを公開したことが大きなインパクトでした。

SHA-1を用いた証明書などでは、SHA-1で算出したハッシュ値による電子署名をもってデータの真正性を担保します。同システム上で衝突が悪用されると、予め2つのデータを用意しておけばデータを差し替えることができますので、Googleによると、例えば「大幅に契約内容の異なる保険契約に差し替える」などの事例が考えられるといいます。
Googleはこの頃から、より安全な「SHA-256」「SHA-3」へのシステム移行を推奨しており、実際に現在では、SHA-2に移行できていない会社が仕方なくSHA-1を使用している格好になっています。

IT技術への造詣が裁判を左右する?

「カギはIT化」というフレーズは年を追うごとに耳慣れたものになり、日常生活に関する身近なものから企業の業務、政府のシステムまでもが着々とIT化されています。
しかし、スピードや効率と引き換えに、司法の知識が追い付いていないことは否めません。

当たり前ですが、裁判官も人間です。知識が足りなければ誤った判断をすることもあります。
裁判官に対して、判断に必要な知識を説明するのも弁護士の役割なのではないでしょうか。
例えば先の裁判で、裁判官に対して「その衝突耐性への攻撃によって、監視カメラのデータの真正性が揺らぐ可能性はゼロに等しく、不可能といって良い」こと説くことができていたら……判決はどうなっていたでしょうか。

IT技術が進歩し、身の回りのいたるところにIT技術が入ってきている現代では、弁護士もIT技術を学び、必要に応じて、裁判官を説得することも求められていると私たちは感じています。