ホーム第8章: セキュリティと計算の限界
第8章 2節

ハッシュ関数とデジタル署名

暗号によって「盗聴」を防ぐことはできますが、セキュリティにはもう2つの重要な課題があります。それは「改ざん(データが途中で書き換えられていないか)」の検知と、「なりすまし(本当に本人が送ったメッセージか)」の防止です。これらを解決し、インターネット上での安全な契約や通信の信頼性を保証する「ハッシュ関数」と「デジタル署名」の仕組みについて学びます。

1. データの指紋:ハッシュ関数(Hash Function)

ハッシュ関数(暗号学的ハッシュ関数)は、どんな長さのデータ(1文字のテキストから、数ギガバイトある動画まで)を入力しても、それを元にして「固定の長さのランダムな値(ハッシュ値)」を出力する特別な数式関数です。

ハッシュ関数は、以下の極めて強力な性質を持っています。

ハッシュ関数の性質
  • 一方通行性(不可逆性): 入力データからハッシュ値を計算するのは一瞬ですが、ハッシュ値から「元のデータ」を復元することは数学的に不可能です。
  • 衝突困難性: 異なる2つのデータから、全く同じハッシュ値が生成されるような組み合わせを見つけ出すのは事実上不可能です。
  • 鋭敏性(雪崩効果): 元のデータがわずか1文字(1ビット)でも書き換わると、出力されるハッシュ値は全く別のランダムな値に激変します。
"Hello World" ハッシュ関数 a3f9e8... "Hello world." ハッシュ関数 b81d7f...
図 8-3:ハッシュ関数による「指紋」の生成。大文字小文字やピリオド1つの違いで、全く異なる値が出力される

この性質から、ハッシュ値は「データの指紋」と呼ばれます。 ダウンロードしたファイルが壊れていないか、あるいは途中で何者かに改ざんされていないかを確認するために、元のハッシュ値とダウンロードしたファイルのハッシュ値を比較する手法が広く使われています。

2. デジタル署名(Digital Signature)

ハッシュ関数だけでは、「改ざん」の検知はできますが、「送信者が本当に本人か(なりすましの防止)」は証明できません。 そこで、公開鍵暗号の数学的特性を応用したデジタル署名が登場します。

デジタル署名では、通常とは「逆」の鍵の使い方をします。

  • 暗号化するとき:送信者自身の秘密鍵で、データのハッシュ値を暗号化します(これが署名になります)。
  • 復号するとき:誰でも手に入る送信者の公開鍵で、署名を復号します。
送信側: アリス メッセージ「送金1万円」 アリスの【秘密鍵】で ハッシュ値を暗号化 ➔ 署名 メッセージ + 署名 を送信 受信側: ボブ アリスの【公開鍵】で 署名を復号 ➔ 元のハッシュ 受信メッセージのハッシュ値 と一致するか検証(OK!)
図 8-4:デジタル署名の作成と検証プロセス

アリスの秘密鍵はアリス本人しか持っていないため、アリスの公開鍵で正しく復号できる署名は、「絶対にアリス本人が署名を作成した(なりすましではない)」ことが数学的に証明されます。

また、もしメッセージが途中で改ざんされていれば、アリスの署名を復号して出てきたハッシュ値と、受け取ったメッセージから計算したハッシュ値が一致しなくなるため、「改ざんされていること」が即座に検知されます。

この完璧な証明モデルにより、電子契約や、WebサイトのSSL/TLSサーバー証明書、ソフトウェア配布時の安全確認などが保証されています。

次のセクションからは、セキュリティ技術を離れ、コンピュータサイエンスの「理論的な終着点」である、コンピュータが解決できる問題と解決できない問題の限界「計算可能性」について学びます。