BlockChainのプライバシー

秘密鍵流出によるコインチェック社の580億円流出は記憶に新しい。 ブロックチェーンは、その改ざんは非常に難しいが、その書き込みにはもちろん制御はない。

情報それ自体へのアクセス権(読み込み)をブロックチェーンライクな仕組みで管理する方法を提供することは可能なのか。

今後暗号通貨による資産管理が進み、セルフGOXや、相続時のトラブルが増えていくことは容易に想像できる未来であり、スタートアップと一緒に調査を進めている。 マルチシグを使う方法から、貸金庫レベルのマニュアルオペレーションも含めて。

その中で、Secret Sharing Daoの概念を調査しているので、その内容を書く。 日本語の情報はほぼない状態で、すこしでも先に進めばと思う。

広義にブロックチェーンといっても、その種類は多岐にわたる。 特に、現在は細分化の傾向が大きくなっている。 整理のため、今回話すプライバシーがどの領域の特徴なのかを定義する。

今回の対象は、左上の箇所になる。 Trustlessかつ透明、暗号通貨といったときに真っ先にイメージされるものだ。

そこは、経済面でのプライバシーという点で現行の預金と比較して非常にユニークな特徴を有する。
発行主体が存在しないので、日銀券とは違う仕組みでプライバシーを担保する。

各アドレスは、その個人としてふるまうが、物理的にそのアドレスの保持者を特定することは困難。 方法があるとすれば、KYC証明された取引所を会するときくらいだ。

Secret Sharing Dao


プライバシーの問題を解決するEthereumのソリューションであり、Enigma等の最新のプログラムの基礎になっているらしい。 Bitcoin、Ethereumの特性の違いや、プライバシーについての理解を深めるものとなる。

先述した通り、2つの特性がビットコインをそれぞれ反対方向に引っ張っている。

  • 物理的アイデンティティの秘匿
  • トランザクションの公開

「物理的アイデンティティの秘匿」の部分については、ちょうど現実の通貨に近い。 例えば、紙幣であれば、だれのものかの手掛かりは指紋くらいのものだ。

この二つの特徴はEthereumも同じだが、現実には異なる事情が生まれている。

それがなにかというと、ビットコインは貨幣としての使用を想定しており、本質的に代替可能であることだ。
下記は、HDウォレットの説明図だが、ビットコインにおいては、普通たくさんのプライベートキーを取引都度発行し、資金の移動元をわかりづらくすることが推奨される。 これにより、プライバシーを守る。

一方でEthrereumの場合、貨幣と違い代替不能な(account-based)情報が必要とされるため、
物理的に単一の参加者が複数のアカウントで活動を行うには複雑な管理が必要になってしまう。

本当にプライバシー保護が必要になった場合、どのように需要を満たすべきか、という問題がビットコインと比較して強調される。

秘密分散

Secret Sharing Daoを構成する基本技術についてだが、一つ目は、秘密分散だ。

N人の参加者がデータを分割して保持し、そのうちK人が協力すればデータを完全に復元できるが、
K-1人では何の情報も得られないようなデータの分割方式だ。

2-of-Nの秘密分散(K = 2)を構築することを考える。
分散したい情報をSとすると、まずランダムな傾きmをとり、y = mx + Sという直線を作成する。

N人のうち、任意の2人がお互いの情報を教え合えば、Sが分かるが
1人では何もできない。たとえば(4, 12)という点を持っていても、元の直線は y = 2x + 4、y = -10x + 52、y = 305445x - 1221768というように無限にあり得る。

SMPC

二つ目は、SMPCだ。 SMPCによる加算は単純である。
説明のために先ほどの「2点が直線を作る」例を用いる。 ただし今回は2つの直線が出てくる。

すべての 点においてA + Bと等しくなる。 a, bのいずれをも再構成することなくa+bの秘匿情報を計算することができる。
参加者全員が計算後のデータのみを手にし、途中でいかなるデータも単一のノード上で復元されることはないアルゴリズムだ。

ブロックチェーンアクセスへの適用

以上で仕組みの説明はおわる。 これがいかにブロックチェーンに適用されうるのか、単純なモデルで説明する。

ブロックチェーン自体には秘匿性がないので、ユーザーがブロックチェーンに送ることのできるトランザクションは下記がイメージできる。

APPLY(STATUS, TX) = new STATUS  
TXs = REQUEST(ACCOUNT)  

データベースは下記を想定してみる。

各要素(R[0...])について、SMPCで取得することが可能だが、上記の単純な形式でさえ、データ量が増えると計算量は膨大だ。 全オペコードを並列に実行し、状態を更新するのに適切な物をチョイスするという点にある。これは恐ろしく非効率的だ。 計算する際に、ネットワーク間のメッセージの送信が必要なので、計算に当たっては(メモリやCPUではなく)ネットワークも大きな足かせとなる。

変化予測


Secret Sharing Daoにより、プライバシーを手に入れることができるものの、大きなアプリケーションを構築するのは不可能だ。

一部のプライバシーが非常に重視される領域(医療情報、評価)等への適用が期待できる。
秘密鍵管理、という案もある。
ただし、世界で最もオープンなシステムであるという性質は失われる。

公開鍵を匿名にするのである。ある額を誰かが誰かに送金したことは全参加者に知られるが、誰が取引に関わったかは見抜かれない。
-- Satoshi Nakamoto

もし、犯罪的行為が助長されるということが判明し反感を買った場合、善意のボランティアハッカーでさえもがこのシステムを落とそうとするかもしれない。