デジタル署名でハッシュを使う理由
-
angel_p_57
- 10266
- 18
- 6
- 0

デジタル署名の中でハッシュを使う理由、あんまり名言されていない ( というより、使うのが当然すぎて誰も説明しない ) んだけど、考察するとそれなりに面白い話ではあると思う。
2021-07-04 20:33:26
尤も、話としては重要ではあるものの細かいところではあり、別に触れなくても良い話ではあるんだけど。 ※なので記事でも特に書いたことはない。
2021-07-04 20:33:34
さて、まず情処の試験的には「署名対象のデータのハッシュ値を秘密鍵で変換することで署名になる」というような説明が出る。
2021-07-04 20:33:49
これが参考書や解説サイトだと、ご存知の通り「ハッシュ値を秘密鍵で『暗号化』する」に劣化コピーされる。解説しようとしてるのにデマ書いてどうするんだ、というのはあるけどそれはさておき。
2021-07-04 20:34:41
このデマは、署名の中でもRSAの特徴しか見えてない人から生まれたと考えられる。RSAでは「ハッシュ値を秘密鍵で『復号』することで署名を生成」するから。 ※逆に検証時には「署名を公開鍵で『暗号化』」する
2021-07-04 20:35:02
もちろん、一般のデジタル署名はそもそも暗号化・復号と言った処理とは無関係なので、RSAのこの性質に拘るのは後回しにした方が良い。RSAのことを掘り下げて理解するには必要かも知れないけど。
2021-07-04 20:35:21
ただ、デジタル署名の中でハッシュが出てくる理由としては分かり易いところではある。つまり、暗号化機能・署名機能の両用という特異性を持つRSAにとって、「ハッシュ」というのは両機能をつなぐ架け橋の意味があるから。
2021-07-04 20:35:47
歴史的に言うと、公開鍵暗号が発案されたとき、そもそも(暗号学的な)ハッシュはまだ存在してなかったので。RSA署名も発表されただけで、実用にたえるものではなかったはずなんだよね。
2021-07-04 20:36:04
何故かと言うと、RSAは処理対象のデータ容量が小さい。だから暗号化と言っても、共通鍵暗号で使う共通鍵の元になるようなちょっとした秘密情報しか暗号化できないし、ハッシュ無しの署名なんか、全然実データを扱えるものではない。
2021-07-04 20:36:26
それが、ハッシュによって元のデータを小さい固定容量データに圧縮した上で処理にかけることで、事実上容量の制限がなくなった。…というか、そのためにハッシュが開発されたんではないかとも思うけど。なので、RSA署名の実用化という意味でハッシュは外せない。
2021-07-04 20:36:54
でもそれは、「ハッシュを秘密鍵で復号」という特性を持つRSAの話であって、一般の署名でもハッシュが欠かせない理由には結びつかないんだよね。 まあ、ノリ的に近いところはあるから、分かる人には分かる話ではあるんだけど。
2021-07-04 20:37:15
仮定の話として、ハッシュを使わないけれど十分大きな容量のデータに対応できる署名技術があったとする。 それに対して、「データのハッシュ値に対する署名」というのはどのような意味を持つかを考えてみる。
2021-07-04 20:37:45
署名というのは、(自筆署名や印鑑のように)対象のデータに対する署名者の「保証」を示すデータで、秘密鍵の持ち主しか作れない(公開鍵があれば誰でも本物と確認できる)ことでその性質を担保している。
2021-07-04 20:38:21
一方でハッシュというのは、固定長の小容量データに圧縮するという特徴もあるけど、「同じハッシュ値となるデータを割り出す(衝突を発生させる)ことが困難な一方向の変換」という技術だ。
2021-07-04 20:38:40
まず、署名は「保証」の意味があれば十分なので、元データの素性が分からなくなっても問題ない。元データから作ったハッシュを「保証」するのも、元データを保証するのと対して変わらない。
2021-07-04 20:39:17
話はそれるけど、特定の人にだけは元データが復元できないと意味のない「暗号化」とはそこが大きく違う。それもあって、暗号化ばっかり考えていると、マトモに理解が広がらないので注意。
2021-07-04 20:39:41
話を戻して、ただ、同じハッシュ値を容易に作れてしまうと問題がある。このことも考慮しないといけない。あるデータに対する保証が、同じハッシュ値を作れる別データの保証にすり替わってしまうからだ。
2021-07-04 20:40:02
なので、ここで「同じハッシュ値となるデータを作り出すことが困難」という特性が活きてくる。この特性のため、前述の「保証のすり替わり」の懸念も問題ないと言うことになる。
2021-07-04 20:40:23
ここまでの話で、ある署名技術に対して、「元データの署名」を「元データのハッシュ値の署名」で代替しても問題ないことが分かった。
2021-07-04 20:40:39
このメリットは何となく分かると思う。「256バイト以下のデータだけ対処できれば良いです」と言われるのと「何MB, GBのデータを扱うか分かりません」と言われるの、前者の方が圧倒的にラクできること。
2021-07-04 20:41:34