ポイント

●デジタル署名は公開鍵暗号方式とハッシュの仕組みを組み合わせて作られている
●デジタル署名の仕組みを利用することによって「送信者が正しい」「伝送経路上でデータが改ざんされていない」という2点を確認できる
●デジタル署名によって,メールを送ったことを否定できなくするような否認防止にも使える

 「デジタル署名」とは,送られてきたデータの送信元が間違いないか,伝送経路上でデータが改ざんされていないかを確認するための技術です。公開鍵暗号方式の署名の使い方では,「誰から送付されてきたか」を確認することができました。またハッシュ関数は,基のデータを少しでも修正したら,その計算結果であるハッシュ値が全く異なる値になることから,改ざんを検知するための情報として利用できました。デジタル署名の仕組みは,この二つの技術を組み合わせて作られています。

デジタル署名の仕組み

 それでは,デジタル署名の流れを追ってみましょう(図1)。受信者はあらかじめ送信者の公開鍵を入手しているものとします。

図1 デジタル署名の仕組みと処理の流れ

(1)送信者は送信するデータを作成します
(2)作成したデータを基にハッシュ関数を使ってハッシュ値を算出します
(3)ハッシュ値を送信者の個人鍵を使って暗号化します。このときに利用するのは公開鍵暗号方式です
(4)(1)で作成したデータと(3)で作成した「送信者の個人鍵で暗号化したハッシュ値」を合わせて受信者に送付します
(5)受信者は,受信データを基に,送信者が使ったものと同じハッシュ関数を使ってハッシュ値を算出します
(6)送信者が送ってきた「送信者の個人鍵で暗号化されたハッシュ値」を,あらかじめ入手していた送信者の公開鍵で復号します
(7)(5)で算出したハッシュ値と,(6)で復号したハッシュ値を比較します。両者が一致すれば,「伝送経路上でデータが改ざんされていない」という点と,「送信者が正しい」という点を確認できます

※(5)と(6)は順不同

公開鍵暗号方式とハッシュ値の特徴を利用

 流れを確認したところで,ポイントとなる部分を見てみましょう。

 図1の(5)では,受信者も送信者が使ったものと同じハッシュ関数を使ってデータのハッシュ値を算出しています。また図1の(6)では,あらかじめ入手していた送信者の公開鍵で,暗号化されたハッシュ値を復号しています。つまり,ここで送信者が作成したハッシュ値を復元しています。

 もし,伝送経路上でデータが改ざんされていれば,ハッシュ値の持つ特徴『基のデータが少しでも修正されたら,同じハッシュ関数を利用しても全く異なるハッシュ値が算出される』ことから,(5)と(6)は全く違う値になります。同じ値であったということは,途中でデータが改ざんされていないということになります。

 また,悪意のある第三者が送信者になりすましをしたと仮定してみましょう。すると図1の(6)において,暗号化されたハッシュ値を,あらかじめ入手していた送信者の公開鍵で正しく復号することはできません。正しく復号できたということは,送信者の公開鍵のペアである個人鍵によって暗号化されたことになります。個人鍵は送信者だけが持っている暗号鍵ですから,なりすましされていないことが確認できます。

 それからもう一つ。公開鍵暗号方式を適用している部分を確認してみましょう。公開鍵暗号方式が使われているのは,図2の紫枠内のハッシュ値の部分だけです。ハッシュ値は基のデータのサイズに関わらず128~512ビット程度の固定値です。つまりハイブリッド暗号方式(詳細は「ハイブリッド暗号方式---共通鍵暗号と公開鍵暗号を組み合わせる」参照)と同じように,公開鍵暗号方式を適用する部分を最小限に抑えることによって,公開鍵暗号方式の弱点である処理負荷が高い点をカバーし,処理時間が長くなるという悪影響を最小限にしています。

図2 公開鍵暗号方式を利用しているのはハッシュ値(128~512ビット程度)の部分だけ
これにより処理時間を最小限に抑え,公開鍵暗号方式の弱点である処理負荷が高いという弱点をカバーしています。