私は公開鍵暗号方式と電子署名を理解できていなかったようです。

まえおき

あけましておめでとうございます。皆様年末はどのようにお過ごしになられたでしょうか。私は卒論の恐怖に晒されながら日々煩悩と戦い、そして敗れ去る毎日を過ごしていました。

さて私はLightning Netwokを絡めて卒論を書いているのですが、その説明のためにBitcoinなどの基礎的知識を教授の皆様に丁寧に説明しなければならないことになりました。そこで改め順を追っていくと、「あれ、ここちょっと勘違いしていたかも」という部分に気づきました。そんな中の一つが公開鍵暗号方式と電子署名についてです。これ以前個人ブログでも同じような勘違いをしていたのですが、やっと腑に落ちた感じがするので、今日はその記事です。

公開鍵暗号と電子署名における秘密鍵と公開鍵の役割は違う

公開鍵暗号方式では二つの鍵を使用します。超大雑把に言えば閉める事(平文を暗号化)しかできない鍵(公開鍵)、と開ける事(暗号文を平文)しかできない鍵(秘密鍵)を使い分けることで、共通鍵暗号方式で問題になる輸送問題を解決する手法です。引用させていただくと以下の通り。

鍵生成 … 暗号化用の鍵E(公開鍵)と復号用の鍵D(秘密鍵)を用意する
暗号化 … 暗号鍵Eを使うと、平文Mを暗号文Cに変換できる
復号 … 復号鍵Dを使うと、暗号文Cを平文Mに変換できる
引用:暗号化と署名は対称じゃないよという話

ここから電子署名についての説明をしよう...と行きたいのですが、こからが勘違いポイントです。それは先ほどの秘密鍵と公開鍵の公開する方を逆にすれば署名になるよねという事です。

というのも公開鍵で暗号化したものと、秘密鍵を公開する。つまり暗号文を作成できるのは公開鍵を持っている本人しか作れない。だから署名の際は公開鍵暗号方式で公開していた秘密鍵と公開鍵を逆にして公開すれば良い。

これ、大きな間違いでした。

正しくは

公開鍵暗号における秘密鍵は「暗号文を復号」するためのもので、公開鍵は「平文を暗号化」するもの。

電子署名における秘密鍵は「平文を用いて署名」するためのもので、公開鍵は「署名が正しいか検証」するものでした。つまり役割的に全く別物。ただ公開する方を逆にすればいい。ということではありません。

そもそも必要な条件が違う

暗号化と署名で必要な条件とはなんでしょうか。それは

暗号化=秘密鍵なしには暗号文を平文に戻せない

署名=秘密鍵なしには自分以外の人が署名を作れない&変更できない

です。決して「秘密鍵を持っていない人が暗号文を作れない」事ではありません。このようにそれぞれ求められる条件が違うため、暗号アルゴリズムを署名に使用することはできません。これを理解していなかったため勘違いしていました。

RSA暗号が誤解の種?

なぜこのような誤解が生まれたかというと、おそらくRSA暗号が原因だと思います。

RSA暗号とは平文をM、暗号文をC、公開鍵をe、秘密鍵をdとした時、以下のような式になります。

ここから公開鍵 e と秘密鍵 d を逆にしてしまえば電子署名にも使えるじゃん!となったわけです。しかしこれが署名にも使えないのは、先ほど述べたように暗号化と署名用のアルゴリズム異なるということ。もう一つはRSA暗号が特殊な条件を持っていることです。

RSA暗号では同一の公開鍵の下では平文と暗号文は1対1に対応しています。つまり平文空間と暗号文空間が同一の確定的暗号になっています。一方で1対1になっていないようなものを確率的暗号と言います。RSA暗号では確定的暗号となっているため、暗号化と署名を逆(厳密には違う)にしても成り立つようです。そのため、これらを全て一括りにして他の署名方式でもできるのだと勘違いしていました。

まとめ

公開鍵暗号と電子署名で使用する秘密鍵と公開鍵の役割は違います。公開鍵暗号の秘密鍵は、あくまで平文を暗号化するためのもの。署名用の秘密鍵は署名をするためのもの。最低限ここを抑えておこう、というお話しでした。

執筆者:望月 紀生(HashHubインターン:@mochiblock

参考文献

お知らせ

■HashHubでは入居者募集中です!

HashHubは、ブロックチェーン業界で働いている人のためのコワーキングスペースを運営しています。ご利用をご検討の方は、下記のWEBサイトからお問い合わせください。また、最新情報はTwitterで発信中です。

HashHub:https://hashhub.tokyo/

Twitter:https://twitter.com/HashHub_Tokyo

■ブロックチェーンエンジニア集中講座開講中!

HashHubではブロックチェーンエンジニアを育成するための短期集中講座を開講しています。お申込み、詳細は下記のページをご覧ください。

ブロックチェーンエンジニア集中講座:https://www.blockchain-edu.jp/

■HashHubでは下記のポジションを積極採用中です!

・コミュニティマネージャー

・ブロックチェーン技術者・開発者

・ビジネスディベロップメント

詳細は下記Wantedlyのページをご覧ください。

Wantedly:https://www.wantedly.com/companies/hashhub/projects