応用情報技術者

【ソフトウェア開発技術者 平成18年秋期 午前問73】ディジタル署名に関する問題3(ハッシュ関数の活用)

公開鍵基盤とハッシュ関数を使用したメッセージ認証の手法はどれか。

 

 受信者は,送信者の公開鍵とハッシュ関数を用いてハッシュ値を復号し,メッセージを得る。

 受信者は,ハッシュ関数を用いてメッセージからハッシュ値を生成し,送信者の公開鍵で復号したハッシュ値と比較する。

 送信者は,自分の公開鍵とハッシュ値を用いてメッセージからハッシュ値を生成し,メッセージとともに送信する。

 送信者は,ハッシュ関数を用いて送信者の秘密鍵のハッシュ値を生成し,メッセージとともに送信する。

応用情報試験の前身であるソフトウェア開発技術者試験から、ディジタル署名に関する問題を紹介。

以前紹介したディジタル署名に関する問題1やディジタル署名に関する問題2と比較すると、ハッシュ関数の知識を問われる分だけ求められる知識レベルは高い。

スポンサーリンク

ハッシュ関数とは

ハッシュ関数とは、2つのデータが同一である事を高速に検証するための技術である。

ハッシュ関数を用いると、メッセージダイジェストとかハッシュ値と呼ばれる小さい容量のデータを生成することができる。

メッセージダイジェストは同じ文章からは同一のものを生成できるため、メッセージダイジェスト同士を比較すれば、それで問題なく検証を行える。

例えるならば指紋のようなものだ。指紋という少ない情報さえあれば本人を特定できる。

なお、メッセージダイジェストからハッシュ化する前の文章を復元することはできない。メッセージダイジェストは情報量が大幅にカットされているため、元の情報を復元するのは不可能だからだ。指紋を元に本人の特徴まではわからないのと同じ。これをハッシュ関数の一方向性、あるいは不可逆性という。

RSA暗号などの公開鍵暗号方式は、暗号化処理が非常に低速なので、文章全体をいちいち暗号化していては処理に時間がかかり実用的ではなくなってしまう。そのため、ディジタル署名の技術を用いる際には、ハッシュ関数を用いた高速化が行われる。

実際の処理の様子は次の図のようになっている。

 

送信者は平文をハッシュ化し、得られたメッセージダイジェストを署名生成鍵(秘密鍵)で暗号化し暗号ダイジェストを得る。そして暗号ダイジェストを平文と一緒に送信する。

受信者は暗号ダイジェストを署名検証鍵(公開鍵)で復号する。そして送信者が平文をハッシュ化した際と同じハッシュ関数を用いて送られてきた平文をハッシュ化する。ハッシュ化した平文のメッセージダイジェストと暗号ダイジェストを復号化したものが一致していたら、改ざんが行われていないという事が検証できる。

以上の知識を踏まえて、問題分を見ていこう。

アの解説

 受信者は,送信者の公開鍵とハッシュ関数を用いてハッシュ値を復号し,メッセージを得る。

「送信者の公開鍵とハッシュ関数を用いてハッシュ値を復号」とあるが、ハッシュ値(暗号ダイジェスト)を復号する際にはハッシュ関数は必要ない。したがってアは×

イの解説

 受信者は,ハッシュ関数を用いてメッセージからハッシュ値を生成し,送信者の公開鍵で復号したハッシュ値と比較する。

正しい。受信者はメッセージから得られたハッシュ値と、送られてきた暗号ダイジェストを公開鍵で復号化した値を比較することで検証を行う。

ウの解説

 送信者は,自分の公開鍵とハッシュ値を用いてメッセージからハッシュ値を生成し,メッセージとともに送信する。

「送信者は,自分の公開鍵とハッシュ値を用いてメッセージからハッシュ値を生成」とあるが、送信者が暗号ダイジェストを作成する際に用いるのは秘密鍵である。公開鍵を使って署名をしても、それは誰にでもできる事なので何の意味もなくなってしまう。

したがってウは×

エの解説

 送信者は,ハッシュ関数を用いて送信者の秘密鍵のハッシュ値を生成し,メッセージとともに送信する。

「秘密鍵のハッシュ値を生成」とあるが、そんなことはしない。したがってエは×。ハッシュ化するのはメッセージであり、そこから得られたハッシュ値を秘密鍵を用いて暗号化(署名)する。

類題