要約:
- 仮想通貨ウォレットでは「署名」ができますが、この署名には「公開鍵暗号(PKC)」という暗号技術の概念が使われています。公開鍵と秘密鍵という1組のキーを活用します。
- 公開鍵暗号以外にも「共通鍵暗号」という概念も存在しますが、ブロックチェーンが採用しているのは公開鍵暗号です。
- 公開鍵暗号を実現する手法は複数あります。ビットコインやイーサリアムはその中でも、「ECDSA(楕円曲線暗号)」という方法を採用しています。
暗号化とは、第三者に見られないようにするために、データを加工することです。
暗号技術はなぜ必要?
暗号技術は、データを第三者に見られないようにするために使われます。
例えば、AさんがBさんに「お宝の在りか」を伝えたいとします。お宝の在りかは極秘事項なので、AさんはBさん以外には知られたくありません。
もしリアル世界で伝えるなら、人目につかない場所でこっそりと伝えれば良いです。
小説では、とある駅のコインロッカーが使われたりもしてますね。
しかし、デジタル世界だとこっそり伝えるのが難しいです。Bさん宛てのデータが第三者に盗み見られてしまうかもしれません。また、データを知った第三者はBさんに誤情報を流すために、元データを改ざんするかもしれません。
そこで、第三者にデータが見られないようにするために、「共通鍵暗号」や「公開鍵暗号」が使われます。
共通鍵暗号とは
共通鍵暗号は暗号技術の一種であり、暗号鍵を活用します。
この暗号鍵を使うと、データの暗号化ができます。また、とある暗号鍵で暗号化したデータは、同じ暗号鍵で復号(暗号解除)できます。
暗号化にも復号にも同じ鍵を使うので、「シンメトリック暗号」とも呼ばれます。
この共通鍵暗号の仕組みを使うと、どのようなデータ送信が可能になるのでしょうか。AliceがBobに、秘密のデータを送るとして考えてみたいと思います。
最初は、Bobが自分用の暗号鍵を持っている状態です。
Bobはデータ送信者のAliceに、自分の暗号鍵を渡します。そしてその暗号鍵を使って、送信データを暗号化して送ってもらいます。具体的な手順は以下の通りです。
- BobはAliceに暗号鍵を渡す
- AliceはBobの暗号鍵でデータを暗号化する
- Aliceは暗号化したデータをBobに送る
- Bobは届いたデータを自分の暗号鍵で復号する
- Bobはデータの中身を見れるようになる
共通鍵暗号を利用すれば、Aliceが送ったデータはBob以外の人は見れません。
共通鍵暗号とは概念的なもので、それを実現する具体的な方法には「AES」などがあります。
共通鍵暗号の問題点
共通鍵暗号にはデメリットがあります。大きなデメリットは、暗号鍵を第三者に伝えるのが難しいという点です。
先ほどの例で、BobはAliceに暗号鍵を渡す必要がありました。しかし、その過程で第三者がBobの暗号鍵を不正に取得しているかもしれません。そうなると、Aliceが暗号化したデータは、その第三者にも確認されてしまいます。
公開鍵暗号(PKC)とは
共通鍵暗号には、「最初に暗号鍵を共有するのが難しい」という欠点がありましたが、これを解決するのが公開鍵暗号です。公開鍵暗号は英語で「public-key cryptography」であり、PKCとも呼ばれます。
公開鍵暗号は考え方のことで、それを実現する具体的な方法には「RSA」や「ECDSA(楕円曲線暗号)」があります。
公開鍵暗号では、公開鍵と暗号鍵(秘密鍵)という2つ1組の鍵を利用します。
共通鍵暗号では、暗号化にも復号にも同じ暗号鍵を使います。
一方で公開鍵暗号では、暗号鍵でも公開鍵でも暗号化ができ、暗号鍵で作った暗号は公開鍵で復号でき、公開鍵で作った暗号は暗号鍵で復号します。ややこしいのですが、いったんは「公開鍵で暗号化したら、暗号鍵で復号できる」と考えてもらって問題ありません。
暗号鍵は秘密にすべきですが、公開鍵は第三者にバレても問題ありません。公開鍵暗号では暗号鍵ではなく公開鍵を送信者に共有するため、「最初に暗号鍵を共有するのが難しい」という共通鍵暗号の課題をクリアしています。
暗号化する人は暗号鍵、復号する人は公開鍵を使うので、「アシンメトリック暗号」とも呼ばれます。
ちなみに公開鍵は、秘密鍵を加工するなどして生成されます。もし、公開鍵を見た第三者が秘密鍵を推測できたら大変ですが、そういったことは不可能となっています。
ここでもAliceがBobに秘密のデータを送るとして考えてみたいと思います。前提として、最初はBobが自分の暗号鍵と共通鍵を保有している状態です。
まず、BobはAliceに共通鍵を送ります。その後Aliceは、その共通鍵で暗号化したデータをBobに送ります。具体的な流れ配下の通りです。
- BobがAliceに公開鍵を送る
- AliceはBobの公開鍵でデータを暗号化する
- Aliceは暗号化したデータをBobに送る
- Bobは暗号鍵を使ってデータを復号する
- Bobはデータの中身を見れるようになる
繰り返しになりますが、共通鍵暗号のときは暗号鍵をAliceに共有する必要があり、その暗号鍵を第三者に見られないように送るのが大変でした。
一方で公開鍵暗号では、Aliceに送るのは公開鍵です。たとえ第三者が公開鍵を知ったとしても、Aliceが暗号化したデータを復号できるのは、暗号鍵の持ち主であるBobのみです。
そのため、公開鍵は他人に知られても問題がなく、「最初に暗号鍵を共有するのが難しい」という共通鍵暗号の課題をクリアしています。
共通鍵暗号には、処理が早いなど長所もあります。公開鍵暗号ではなく共通鍵暗号が利用されることもあるようです。
デジタル署名も可能にする
公開鍵暗号の考え方を使うと、デジタル署名も可能になります。このデジタル署名こそ、ブロックチェーンにおける公開鍵暗号の用途です。
署名とは、本人が作成したことや内容に改ざんがないことを証明するメカニズムです。
電子契約書のやり取りなどで利用される署名は「電子署名」と言われます。ブロックチェーンで利用される署名は、「デジタル署名」と呼ばれますが、これは電子署名の一種です。
どのように署名が行われるかを見てみましょう。Aliceはデータを送る際に署名を行い、その署名が信頼できる認証局によって検証されるという仮定で考えてみたいと思います。
以下の2つのステップで記載します。
- 署名の作成
- 署名の検証
署名の作成
- 送信データは「ハッシュ値」という特殊な値に変換される
- ハッシュ値に暗号鍵(秘密鍵)で署名する
- 送信データと署名は認証局に送られる
以下は、ビットコインなどが採用する「ECDSA」という公開鍵暗号を使った、電子署名作成の流れです。第三者機関を介した電子文書の署名の流れであり、ブロックチェーンでのデジタル署名とは異なりますが、参考になりそうです。
ブロックチェーンの場合、ウォレット上で「確認」や「サイン」などのボタンをクリックすると、秘密鍵を使った署名が実行され、ノードに届けられる仕組みです。
仮想通貨の署名でユーザーがやるのは、「確認」や「サイン」というボタンのクリックのみ
署名の検証
署名が作成されたら、信頼できる第三者機関などが署名の検証を行います。ちなみにブロックチェーンでは、ノードが検証を行います。
- 公開鍵を使って署名をハッシュ値に戻す
- 送信データをハッシュ値に変換する
- 「1.」と「2.」で得た二つのハッシュ値を見比べ、一致していれば合格
以下は、ビットコインなどが採用する「ECDSA」という公開鍵暗号を使った、署名検証の流れです。第三者機関を介した署名検証の流れであり、ブロックチェーンでのデジタル署名とは少し異なりますが、参考になりそうです。
参照
https://www.imes.boj.or.jp/research/papers/japanese/kk32-3-2.pdf
コメント