Blockchainを使用した分散ストレージ

Kenichi Nakahara
9 min readDec 21, 2017

--

ブロックチェーンの活用方法は、単に金銭やトークンの受け渡しのみに留まらず、多岐に渡ります。事実上誰もがアクセス可能なデジタルな空間に、誰も偽造ができない情報を作成できることに価値があるわけです。
そのアプリケーションの一つとして、分散ストレージの共有が面白いと思ったので関連するサービスや研究を紹介します。

共通する思想

紹介する事例はどれもシャアリングエコノミーを志向しています。Google Drive, Dropbox, Amazon S3などがクラウドストレージサービスとして代表的ですが、これらのサービスの持つストレージ容量よりも、全世界に眠っているHDDの容量の方が圧倒的に多いわけです。理論上、こうしたユーザスペースを有効活用することで、提供者は眠らせておくより多くの資金を獲得し、ユーザはより低料金でクラウドストレージサービスを利用できます。

クラウドストレージ vs ユーザスペース (storj white paperより)

しかし、Google, Amazonなどの組織が提供するサービスが企業自体の信用で成り立っている一方で、見ず知らずのだれかのPCに自分のデータを保存することにはいささか不安がつきまといます。

  • 提供者にデータを盗み見られる恐れがあるのではないか?
  • データに常にアクセス可能である保証があるか?

同様に、ストレージを提供する人たちも、データを預かることで本当にユーザが報酬を支払ってくれるのか?と考えることは至極当然です。これらは、畢竟信頼の問題になります。そこで暗号技術ひいてはブロックチェーンを活用してこうした課題を解決することを目指します。

また、ブロックチェーン自体もその容量にスケーラビリティ上の問題を抱えているので、こうした分散ストレージの構築が技術上のブレイクスルーを起こすことにも同様に期待できます。

Storj (https://storj.io/)

Storjでは、データを細かいchunkに分割しそれぞれ暗号化したものをP2Pネットワーク上に保存します。これにより、悪質な貸主は保存されたデータを複合できないだけでなく、その全容を知ることができません。

また、ストレージの提供者は、アクセスの多寡に関わらず、市場が決定する価格で時間に比例した報酬を得ることができ、報酬のやり取りはブロックチェーン上に記録され、改竄は非常に難しくなります。

この仕組みにより、「データの盗み見ができない/予定した報酬が支払われる」ことは保証されました。あとはデータのavailabilityです。

Storjでは、マークル木*(1)を用いてストレージの提供者がデータを保持し続けているかを検証します(ストレージ証明)。ユーザは定期的にあるシードを作成し、ストレージの提供者にハッシュ値の提供を求め、Blockchain上で確認できるMarkle Rootを元に検証を行うことができます。

また、ストレージの提供者は常にインターネットに接続しているとは限らないため、データは冗長化されます。具体的にはK of M erasure encoding方式を採用し、アクセス可能なノードの応答がない場合に修復を行うことによって、統計的に極めて高い確率でデータを保持するノードのいずれかに到達することが保証されます。

このように、Storjは技術的に説得力のある分散ファイル共有の枠組みを提供しています。一方で、Blockchainを独自に構築していることから、ストレージ提供者のユーザの間の通貨は独自のもの(SJCX)となっており、その相対的な価値の変動が全てのユーザのリスクになりえます。また、独自にPoW方式のチェーンを持つことは、Bitcoinより高い51%アタックのリスクにさらされることを意味します。システムの内容だけに、有事の際にユーザの抱えるリスクは計り知れないものがあります。

Sia (https://sia.tech/)

SiaはStorjと同様にBlockchainで分散ストレージサービスを管理することを目指していますが、技術的アプローチが異なります。具体的にはProof of Storageという仕組みによって、ユーザがあえて検証をすることなく、ネットワーク上でストレージ提供者がデータを保持している証明が可能です。これはユーザにとって大きな利点になりえます。また、将来的にBitcoinへのtwo-way pegを予定しており、ストレージ提供による報酬を価値がすで広く認められているBTCに一定レートで交換することができるようになります。

Proof of Storage

Proof of Storageは、Storjにおけるマークル木を用いた証明とほぼ同様のものです。Siaにおいては、ストレージの提供がcontractとして管理され、Proofを要求するタイミングがあらかじめ計画されている点が異なります。

Siafunds

Siaにおけるcontractは、常にデータがaccessibleであることを保証しません。そのため、ユーザは複数の提供者とcontractを交わすか、両者でより緻密な契約を事前に決めることを推奨されています。Siaはそうした不便を軽減するため、提供者がtheir-party serviceにデータをアップロードするインセンティブをつくることを計画しています。Siaを運営するNebulous社が、取引におけるfeeを徴収してより効率的なエコシステム運営を目指すと主張しています。

以上のように、よりユーザにとって利便性・合理性の高いシステムを目指しているものの、Bitcoinへの2-way pegも含め実装の非技術的ハードルが未だに高い印象です。

Enigma (https://www.enigma.co/)

Enigmaは上2プロジェクトとは目指すところが少し異なり、”Decentralized Computation Platform”を名乗っています。
つまるところ、データをアウトソースするだけでなく、第三者への演算を通したデータへの部分的なアクセスを許可する仕組みを実現しています。

部分的なアクセスとは、つまるところアクセス権限がデータ自体にはなく、演算処理の結果のみに付与されているということです。準同型型暗号(somewhat homomorphic encryption)による暗号化を施すことによって、生データは閲覧されることなく、そのデータ同士の演算結果のみを公表することができるようです。
Enigmaでは、誰がどのデータを保存する、という明確な契約が規定されることはなく、データはKademliaという分散ハッシュテーブル(DHT)*(2)で保管され、いつでも迅速にデータを検索することができます。担当するノードはストレージや計算処理に対して報酬を受けます。DHTのセキュリティを担保するため、ノードにはSecurity Depositが課されます。不正をすると、報酬をもらうはずが罰金を徴収されるようなイメージです。

データ自体は公表したくないけど、処理結果のみはbroadcastしたいというシチュエーションは結構存在するようで、Blind E-voting, Crypto Bankなどをアプリケーションとして挙げています。

Towards Blockchain-based Auditable Storage and Sharing of IoT Data(CCSW2017)

Webでみつけた、最近出た公開論文です。こちらは空きストレージの提供ではなく、何らかのデータを限られたメンバーの中で共有するためのシステムにブロックチェーンを活用します。blockchainで管理するのは秘密鍵に対するアクセス権限の情報であり、上記手法に比べての差分は、データ自体でなくアクセス権限を管理することによって、データ自体が追加されたりなどして変容したとしても、データを買いたい人にとってのアクセシビリティが変化しないことだと理解しました。

ただ、海賊版のアップロード対策やそもそも誰が何を売っているのかをどう知るのかなど、システム上の課題は山積しているように感じます。

まとめ

本記事では、ストレージの共有という観点で既存のプロジェクトを知る限り説明しました。正直まだBlockchainによる信頼とサービスの質が既存の巨大サービスに優っていないなと思うのが正直なところですが、今後の技術的/社会的ブレイクスルーには注目しておく必要があると感じます。

参考

*(1)マークル木とは、木の各葉ノードから算出されるハッシュ値を二つづつ組み合わせて同様のハッシュ関数にかけてエッジノードを作成し、それを繰り返すことで構成される二分木です。ある葉ノードがマークル木に含まれるかどうかを、葉ノードの数Nに対してO(logN)の計算で検証することができます。Bitcoinにおいても、台帳を保有しないSPVノードがトランザクションの正統性の検証を行うためにマークル木がもちいられます。

*(2)分散ハッシュテーブルは、ネットワークで繋がった複数のコンピュータを組み合わせて抽象的に一つの巨大なkey-value storeを実現する技術です。Chord/Kademlia/Skipnetなどのプロトコルが登場して、データの検索やノードの参加退出管理がO(log(N))で行えるようになったため、スケーラブルな構造として、bitcoinが登場する少し前のP2P界隈でさかんに研究されていました(もちろん今もされていると思いますが。。)

--

--