デジタル署名

デジタル署名は、公開鍵暗号を利用したデータの完全性と送信元(または作成者)の認証を行う技術です。
データの完全性、すなわち、ネットワークを転送する経路上で第三者にデータが改ざんされていないことを保証するためには、ハッシュ関数を利用します。データの送信元や作成者の認証は公開鍵暗号方式に基づきます。また、デジタル署名は否認防止にも効果的です。

ハッシュ関数

ハッシュ関数は、元のデータから固定長のハッシュ値を生成します。元のデータが異なれば生成されるハッシュ値も変化します。また、ハッシュ値から元のデータを復元することはできない一方向関数です。ハッシュ値はメッセージダイジェストやフィンガープリント(指紋)とも呼ばれます。
送信者は、データと一緒にハッシュ値を受信者に送信します。受信者は、受信したデータから自分でハッシュ値の計算を行い、送信者から送られたハッシュ値と比較します。ハッシュ値が同じであれば、データが改ざんされていないということを確認できます。

dig_sig01.png

図 ハッシュ値による改ざんチェック

ハッシュ値を生成する主なハッシュ関数として、次のようなものがあります。

  • MD5
  • SHA-1
  • SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)

MD5は元のデータから128ビットのハッシュ値を生成します。SHA-1は元のデータから160ビットのハッシュ値を生成します。そして、SHA-2は元のデータから224ビット、256ビット、384ビット、512ビットのハッシュ値を生成します。

ハッシュのコリジョン

ハッシュのコリジョンとは、異なるデータから生成したハッシュ値が同じ値になってしまうことです。ハッシュのコリジョンが発生するような元のデータを規則的に生成することができれば、改ざんの検出をすり抜けることが可能になってしまいます。ハッシュのコリジョンを防止するには、よりビット長の長いハッシュ値を生成するハッシュ関数を利用することが効果的です。
MD5やSHA-1には、ハッシュのコリジョンの脆弱性が報告されています。そのため、ハッシュ関数としてよりハッシュ値のビット長が長いSHA-2の利用が推奨されています。

デジタル署名の仕組み

デジタル署名とは、データに付加される署名で、データが改ざんされていないこととデータの送信元を保証します。具体的なデジタル署名の内容は、データのハッシュ値を秘密鍵で暗号化したものです。データを送信する際にデジタル署名を付加する場合を想定して、デジタル署名による改ざんチェックと送信元の認証の仕組みは次のようになります。

  1. 送信者が送信するデータからハッシュ値を生成します。
  2. 生成したハッシュ値を送信者の秘密鍵を利用して暗号化して署名を作成します。
  3. 送信者はデータと署名を一緒に受信者に送信します。
  4. 受信者は送信者の公開鍵を利用して、署名を復号します。送信者の公開鍵で署名を復号できるということは、送信者は確かに対応する秘密鍵を持っているということがわかります。
  5. 受信者は受信したデータからハッシュ値を生成します。
  6. 受信者が生成したハッシュ値と署名のハッシュ値を比較します。ハッシュ値が同じであれば、データが改ざんされていないことがわかります。

dig_sig02.png
図 デジタル署名の仕組み