NTT DATA TECH
💭

署名に使うのが公開鍵か秘密鍵か混乱する貴方に

に公開

はじめに

暗号化と電子署名について調べていると「署名に使うのは公開鍵? 秘密鍵?」 と毎回迷ってしまいます。そこで自分用の整理として、暗号化と署名/公開鍵と秘密鍵の対応をまとめました。

また、今回の記事は暗号化と署名/公開鍵と秘密鍵について備忘録を残すだけではなく、
なぜ毎回混乱するのか?
について考察することで、記憶の定着を図ろうというものです。

最初の誤解

まず、以下は「常識」と言っていいレベルの事実かと思います。

  1. 公開鍵で平文を暗号化する。
  2. 秘密鍵で暗号文を復号する。
  3. 秘密鍵で平文に署名する。
  4. 公開鍵で署名を検証する。

難しい組み合わせでもないですし、一回覚えればいいだけなのに、なぜ私は毎回「どれがどれだっけ?」と混乱してしまうのでしょう。

その理由を考えたところ
可読性のあるデータから可読性のないデータを作る
ということを軸に暗号化と署名を考えてしまっているのだと気づきました。

暗号化と電子署名のうち、最初に学ぶのは、暗号化の方ではないかと思います。世の中の皆さんがどうかはわかりませんが、私はそうでした。

暗号化を最初に学んだ際、私は「平文を公開鍵で暗号化し、秘密鍵で復号する」と覚えました。しかし、無意識に「可読性のある平文を公開鍵で可読性のない暗号文にする」と覚えてしまっていたようなのです。

この理解を電子署名に当てはめてしまうと、以下のような誤解を生みます。
可読性のある署名対象データから可読性のない署名を作る
=可読性のないデータを作るのは公開鍵

とはいえ、署名の目的を考えれば「公開鍵で署名する」は誤りだと、すぐに気づくことができます。しかし、私は「可読性のないデータを作るのは公開鍵」と覚えてしまっているので、自分の理解と正しい事実の間に矛盾が発生しています。その矛盾が「あれ?どっちだっけ?」という混乱を毎回引き起こしているのだと気づきました。

誤解の元を追う

「可読性のないデータを作るのは公開鍵」という誤解が混乱の元であることには気づくことができました。しかし、この誤解がなぜ生まれてしまったのかを理解しないと、体に染みついた癖が抜けないと考えました。

今回の記事は「なぜ混乱してしまうのか?」を明らかにすることが目的なので、RSA の詳細な解説は他の記事に譲りますが、今回の誤解は次の2点を理解していなかったことに起因します。

  • 暗号化と署名検証は数学的に(ほぼ)同じ操作
  • 復号と署名は数学的に(ほぼ)同じ操作

正しいイメージ

前述の関数について、前者の関数を f(x, y) 、後者の関数を g(x, y) と置き、 x には操作対象データ、 y には秘密鍵 s /公開鍵 p のいずれかを入力するとします。

この場合の暗号化/復号/署名/署名検証の関係性のイメージは、以下のようになります。

上向き矢印(橙色)と下向き矢印(青色)は、それぞれ f(x, y)g(x, y) を意味しています。私が誤解から抜け出せない理由は、暗号化と署名が似たもの同士と思い込んでいたことにあります。おそらく、単純に処理の開始点が同じもの同士を比べてしまったということだと思います。実際には、暗号化と検証/復号と署名が同一の操作ですから、混乱するわけです。

このイメージ図を作成したことで、頭の中のイメージが書き換わり、今後は混乱せずに済みそうです。

NTT DATA TECH
NTT DATA TECH
設定によりコメント欄が無効化されています