署名はハッシュして復号?暗号化?

ディジタル署名の勉強をしているんだけど、メッセージのハッシュ値を計算して、ハッシュ値を秘密鍵で暗号化する、って書いてあるときと、秘密鍵で復号するって書いてあるときがあるんだ。どっちが正しいの?

たしかに、どちらの書き方も見たことがあるね。ところで、そもそも、暗号化と復号というのは、どういう事かな?

署名は公開鍵暗号を使って作れる、って書いてある。だから、公開鍵暗号の暗号化と復号のことでしょ?

そうだね、公開鍵暗号の場合、「秘密鍵」を使うのは「復号」だね。「暗号化」は誰でもが知っている公開鍵を使う。

じゃあ、「秘密鍵で復号する」が正しいんだね。でも、ハッシュ値は暗号文ではないのに、復号するって、何か変だなあ。署名の確認には「公開鍵で暗号化する」って書いてある。暗号化したものを復号するのが暗号なのに、復号したものを暗号化するなんて、おかしいよ。

そうだね。だから、「秘密鍵で暗号化」と書いてある文献もあるんだね。そういう文献では、署名の確認では「公開鍵で復号する」って書いてあるでしょう?

うん。暗号化して復号、ならしっくりいく。ハッシュ値を暗号化して、それを復号すると、元のハッシュ値が出てくるはず、っていう性質を使っているね。じゃあ、やっぱり「秘密鍵で暗号化」が正しいの?

実はどちらも正しいともいえるし、どちらも間違いともいえる。公開鍵暗号とディジタル署名は色々な方式があるけれど、具体的にどんなものがあるか知っている?

代表的な公開鍵暗号はRSA暗号、代表的なディジタル署名はRSA署名。

よくできました。RSA暗号では、暗号化と復号でやっている計算式は全く同じで、ただ単に使う鍵が違うだけ。だから、「暗号化する」でも「復号する」でも、やっていることは同じ。

なるほど!だから、どっちも同じで、どっちも正しいんだね!

どちらも正しいと言ったものの、やっぱり「秘密鍵で暗号化・公開鍵で復号」は気持ちわるいなあ。RSA暗号では、平文と暗号文が一対一対応になっているから、「暗号化して復号すると元に戻る」だけでなく、「復号してから暗号化しても元に戻る」という性質があることを説明したうえで、「ハッシュ値を秘密鍵で復号・署名を公開鍵で暗号化」と説明するのが良いのではないかな。