こんにちは!ブロックラビット編集部です。第6回のミートアップでは、ブロックチェーンエンジニアの三野さんを講師としてご招待し、ブロックチェーンの仕組みについて教えていただきました!今回のカメレポでは、セミナーでも軽く触れられた電子署名の部分を深掘りしていきます。ブロックチェーンのような分散型自律システムにおいて、プライバシーの両立はジレンマ的な関係にありますが、様々なユースケースが想定されるブロックチェーンのプライバシー設計を考えることは非常に重要だと考えます。ブロックチェーンに限らず、SNSにおけるプライバシーの取扱いは今後も注目される分野ですので一読いただけると幸いです!
カメレポートとは、当日行われた議論の一部を取り上げ、Block Rabbit編集部が独自の見解と情報を盛り込んだ深堀レポートです。
メインテーマの前に
リトモンMeet-up!! Vol.6にも参加してくださった皆様、会場をご提供していただいた株式会社Pasonaの望月様、中屋敷様、誠にありがとうございました!
そして、技術的な講義内容を英語でやっていただいた三野さん、とってもありがとうございました!
速報にも当日の詳細載っていますので、三野さんがご用意してくださったデモで皆さんも遊んでみてください!
そもそも電子署名とは?
いきなり、電子署名と言われても分からない方が多数だと思いますので、是非、第5回カメレポから基本的な電子署名である”公開鍵暗号方式”をご理解いただければと思います!5分程度で読破できる内容ですので本文の前にご理解いただくことをオススメします!
第6回カメレポではこの電子署名について深掘り、今話題のプライバシーの保護にどのように署名技術が活用できるのか考えていきますので、基礎を抑えていただくとより理解が深まると思います!
様々な署名方式
電子署名は、確かにその当人がそのデータを作成したことをデジタル上で証明する様々なシステムでも使用されている素晴らしい技術なのですが、(ビットコインの)ブロックチェーンにおける電子署名(公開鍵暗号方式)では、元のデータ(誰が誰にいくら送金受信したか)が第三者でも閲覧できてしまいます。お金の流れを全て透明にするという意味では完璧ですが、例えばブロックチェーンが応用されたもので、あなたの買ったものの内容等、全てを透明にする必要がない場合もありますよね?
(Etherscan.ioの例。このようにFrom、To、Valueという項目を見ればやりとりの流れが見えてしまいます。)
公開鍵暗号方式では、元のデータが第三者に見られてしまう仕様ですが、”元のデータが他人には見えない”または”誰が誰に何を送ったかわからない”という工夫ができるプライバシーを確保した電子署名について考えていきます。
ゼロ知識証明
ゼロ知識証明も電子署名方式の一種です。皆様に読んでいただいた公開鍵暗号方式とどのように異なるのかというと、ゼロ知識証明では”誰が誰にいくら送った”という元のデータを明かすことなく、当人が引き起こした取引だと証明できる技術です。
皆様に読んでいただいた、公開鍵暗号方式では当人が送ったものだと証明するために元のデータも同時に送る必要があります。それはつまり、第三者にも元のデータ内容も見られてしまうということです。
下記図でいうと、Bに送られてきた元のデータをハッシュ関数にかけたハッシュ値と、電子署名を公開鍵で復号化したハッシュ値が同じである場合は、A当人が送ってきたものだと証明できるのですが、どうしても元のデータを扱う必要があり、プライバシー的な観点からすると望ましいとはいえません。
ゼロ知識証明というのは、その元のデータをBに送らなくても、その内容がA当人から送られてきたものだとBが証明できる技術です。
相手に与える”知識”が”ゼロ”で”証明”ができるからゼロ知識証明(たぶん)。受取人が元のデータに関する知識をもたなくても、送られてきたデータが確かに正しいと言える画期的な暗号方式なのです。
そんなことどうやってやるのだろう、と思う方のために”洞窟の問題”というケースでゼロ知識証明のイメージ感覚を掴んでいただければと思います。
洞窟の問題
ここでは今、RabbitがTurtleの知っている合言葉をお金を支払って教えてもらおうと考えています。しかし、RabbitはTurtleが本当に合言葉を知っているのか確かめたい。Turtleは勿論お金を受け取ってから合言葉を教えたい。このような状況下でRabbitはTurtleが本当に合言葉を知っているのか確認できるのでしょう。
方法としては、RabbitはTurtleにどちらのルートから出てくるのか指示をして検証すればよいのです。1回の事象の確率は50:50ですが、これを何度か検証すればかなり高い確率でTurtleが本当に合言葉を知っているか検証できます。
数式にすると、(1/2)^n
となり、例えば10回検証を繰り返し、Turtleが全てRabbitの指示したルートから出てくるのであれば1024分の1の確率を偶然的中させてとは言いにくいので、Turtleは本当の合言葉を知っており、魔法の扉を開けたのだとわかります。
上記のように、
- 完全性・・・高い確率でTurtleはRabbitに証明できる。
- 健全性・・・フィルタリングされてTurtleはRabbitに健全(確かな)な情報を持ち込める。
- ゼロ知識性・・・Rabbitに不都合な情報は盗み聞き(合言葉の漏洩)できない。
を満たすものをゼロ知識証明といいます。
つまり、ゼロ知識証明とは、『知識を持っているのであれば回答(実行)できる問いを、相手に幾度か回答(実行)させて、確からしい確率を検証する作業』なのです。
実際にZcashというブロックチェーンで、上記のゼロ知識証明が応用されており、ユーザーは自分の情報を開示することなく取引することができます。
具体的な設計については、今回触れませんが、興味があればZcashのウェブサイトを御覧ください。また、この分野については記事を執筆できればと考えています!
リング署名
匿名性が高い署名方法としてリング署名というものがあります。
通常AさんからBさんにいくら送金したという情報は、上記でも申し上げたとおりブロックチェーン上で開示されます。
しかし、リング署名では、Aさんが一人で署名を作成して取引を実行するのではなく、グループに所属する誰かの複数の秘密鍵で複数の公開鍵を生成して取引を証明し実行するのです。
イメージとしてはこのような感じかと。
上記は江戸時代の一揆の際によく用いられた傘連連判状というものです。一揆の謀者は死刑という重い刑に処されていたこともあり、誰が首謀者かわからなくするために、このような円状の署名を用いたといいます。
リング署名も感覚としては唐傘連判状と同じで複数人の署名を混ぜることで取引の作成者を分かりにくくするものなのです。
図にするとこのような形です。Bさんも第三者同様、どこのアドレスの誰かから送られてきたかを見ることはできませんので、残高と入金履歴から取引の完了を確認することとなります。

まとめ
以上、第6回カメレポでは2つの著名な電子署名方式を見てきました。
決済以外にも様々な応用用途が想定されているブロックチェーンでは、ユーザーのプライバシーを考慮した設計がクリティカルになっていくのは間違いありません。
DashのMixing署名、量子コンピューター耐性のあるランポート署名等、今回は触れるに至らなかった署名方式は他にも多々あります。本記事ではその触り程しか記述できませんでしたが、プライバシーに関する知見を深めるきっかけになれば幸いです!
ブロックチェーンの柱となるインセンティブ設計やハッシュ関数等、重要な変数にどのような研究やケーススタディがあるのか知ることは、実用化に向けて大事な議論の下地になってくると思いますので、引き続きBlock Rabbitはプロトコルの設計を追っていきたいと思います!