分散型のハイパーメディアプロトコル「IPFS」とは?

分散型のハイパーメディアプロトコル「IPFS」とは?

はじめに

HTTP(Hypertext Transfer Protocol)はブラウザと併用されることで、インターネット上のファイル転送プロトコルのデファクトスタンダードになりました。ところが、現在のインターネットは、中央集権化などの課題を抱えています。

本記事で紹介する「IPFS」(InterPlanetary File System)は、HTTPの課題をクリアし、補完・代替しようと開発されているプロトコルです(2020年5月7日現在、ベータ版。v0.5)。本記事では、未来の分散型Web(いわゆる「Web3」)のインフラとなり得るIPFSについて紹介していきます。

P2Pハイパーメディアプロトコル「IPFS」とは?

IPFSとは、分散型のファイルストレージを実現するために開発されているP2P(Peer to Peer)型のハイパーメディアプロトコルです。IPFSはオープンソースプロジェクトであり、アメリカのベンチャー企業「Protocol Labs」によって開発されています。また、IPFS自体はブロックチェーンではありません。

本記事では個別に解説しませんが、IPFSは「Git」やP2Pのファイル転送プロトコル「BitTorrent」、分散型ハッシュテーブル「Kademlia」および「Bitcoin」などの影響を受けています。

参考:ipfs/ipfs: Peer-to-peer hypermedia protocol

IPFSの目的は、現在のインターネットで主流の通信プロトコルであるHTTPの課題を解決し、HTTPを補完・代替することです。IPFSネットワークに参加するノードが提供したストレージに暗号化されたファイルが格納されており、任意のノードから目的のファイルを取り出すことができます。

なお、IPFSは「Microsoft Azure」や「Kaleido」など、一部BaaSのマーケットプレイスでも提供されています。

IPFSは「どこ?」ではなく、「どれ?」で探す

HTTPでは目的のファイルを閲覧するために場所を指定しますが、IPFSでは識別子を使って目的のファイルを閲覧します。IPFSネットワークにコンテンツが追加される際に、コンテンツを入力値としたハッシュが生成され、このハッシュ値がコンテンツの識別子(CID:content identifier)として使われているのです。

例えば、HTTPでは、Wikipediaの土豚(サバンナに生息する哺乳類)のページにアクセスしたい場合、以下のようにホストサーバー→ディクトリ→ファイル名を指定すれば閲覧できます。

https://en.wikipedia.org/wiki/Aardvark

一方のIPFSでは、上記のページを表示するファイルのハッシュがコンテンツの識別子=CIDとなっています。P2Pネットワークであるため、特定・単独のホストサーバーは存在しません。以下のようにCIDを指定した上で、目的のページをIPFSネットワークに問い合わせます。

/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Aardvark.html

このリンクでは、QmXoy….の部分がディレクトリとしてIPFSのリポジトリに登録され、その中にあるファイル名が指定されています。このようなコンテンツ指向型のプロトコルがIPFSなのです。

なお、既存のHTTPブラウザからIPFS上のファイルにアクセスするには、IPFSゲートウェイというブリッジを経由しなければなりません。任意のユーザーに対して常時公開されているものは、パブリックゲートウェイと呼ばれ、例えば以下が該当します。

https://ipfs.io/
https://ipfs-gateway.decentralized-web.jp/
https://ipfs.infura.io/

HTTPの課題とIPFSのメリット

HTTPの課題

IPFSのWebサイトではHTTPと現在のインターネットについて、以下の課題が指摘されています。

  • 非効率性かつ高価:同じ内容のファイルが多くのコンピューターに保存され、重複している。さらに、ファイルを一度にひとつのマシンからしかダウンロードできず、負荷がかかる。
  • データ消失リスク:現在のWebページの平均寿命は100日と不安定。データ消失リスクを抱えており、バージョン管理もされていない。だからこそ世界中のWebページを保存する「Wayback Machine」のようなサービスが必要になってしまう。
  • 中央集権的:インターネットは集権化しており、人々の機会を制限している。
  • バックボーンに依存的:通信は主要回線に依存しており、途上国や災害時などには不安定になるリスクを抱えている。resilientではない。

参考:The web of tomorrow needs IPFS today

IPFSでは、ファイルを分割・分散させ、P2Pネットワーク上に保存し、Gitのバージョン管理可能なシステムを導入、P2Pのデータ交換プロトコルなどを採用することで、HTTPの抱える課題を解決しようとしています。次のセクションではIPFSのメリットを整理していきましょう。

IPFSのメリット

IPFSには以下のメリットがあります。

  • 耐障害性:コンテンツがP2Pネットワークの各ノードに分散保有されるので、単一障害点を回避できる。例えば、攻撃によってオリジナルファイルを持っているIPFSノードがダウンしても、同じコンテンツを持っているIPFSノードに問い合わせれば、目的のコンテンツを取得可能。
  • 耐検閲性:耐障害性と同様に、コンテンツの提供が単独のサーバーに依存しないため、検閲が困難になる(ただし、有害なコンテンツに対する制御も難しくなるので一長一短)。
  • 耐改ざん性:コンテンツ指向型であるIPFSでは、コンテンツのハッシュが識別子となっているため、元のコンテンツが少しでも変化すると識別子となるハッシュも変わる。

上記はいずれもHTTPの課題を意識し、それらを解決しようと試みた結果だと言えるでしょう。

一方で、私たちが普段使っているGoogleのような検索エンジンと同等の機能は、現時点で実現しておらず、この点がIPFSのようなP2Pの分散型ファイルストレージの課題となっています。具体的には「〇〇を含むコンテンツを検索」といった部分一致の検索が苦手なのです(コンテンツのハッシュの完全一致で検索しているため)。

Protocol Labsについて

IPFSを推進するProtocol Labsは、分散型Webをサポートする以下のプロジェクトを進めています。

  • Filecoin:トークンを利用した分散型ストレージネットワーク。ノードがネットワークにストレージを提供するインセンティブとして、トークン(Filecoin)が組み込まれている。IPFSのインセンティブレイヤーとなる想定だが、IPFSとFilecoinは別々に利用可能。
  • libp2p:開発者が大規模で堅牢なP2Pネットワークを簡単に構築するためのプロトコル、仕様、ライブラリのモジュール群。IPFSだけなく、様々なプロトコルで使用でき、「Ethereum2.0」や「Polkadot」などにも採用されている。
  • IPLD:分散Webにおけるデータモデル。異なるプロトコルで相互運用性を担保するためのネームスペースを提供する。
  • Multiformats:将来的なシステムの進化を考慮したプロトコル群。自己記述型フォーマットにより、相互運用性が担保され、ロックインの回避が可能。特定のハッシュ関数に依存しないmultihash formatや、特定のネットワークアドレスに依存しないmultiaddr formatなど、計6セットのプロトコルが存在する(2020年5月7日現在)。

参考:Projects

IPFSのユースケース

ブロックチェーン(およびスマートコントラクト)は、サイズが大きなデータの保存には適していません。したがって、オフチェーンで何らかのデータストレージサービスを利用する必要があります。IPFSのような分散型のプロトコルは、画像や動画、コントラクトなどを非中央集権的に管理したい場合には親和性が高いのです。

すでにIPFSは複数のプロジェクトで採用されており、例えば国内ではブロックチェーンゲーム「MyCryptoHeroes」などで活用されています。以下は、IPFSを採用しているサービスの一例です。

  • 3Box:IPFSベースの分散型プロフィール・個人データ管理システム。 3box-jsライブラリを使用して、プロフィールをDApps(分散型アプリ)で利用可能にする。
  • dtube:バックエンドストレージにIPFSを採用した分散型の動画共有サービス。
  • EVERIPEDIA:EOSを利用した百科事典サイト。編集提案と記事の変更のハッシュがIPFS上で保存される。
  • ujo:音楽ファイルとメタデータのデータストアとしてIPFSを採用している音楽のマーケットプレイス。
  • uPort:分散型のID管理システム。プロフィールデータなどがIPFSで管理される。

参考:ipfs/awesome-ipfs: Useful resources for using IPFS and building things on top of it

まとめ

IPFSは将来のWebのインフラとなり得る大型プロジェクトです。特定のネットワークに依存せずに機能する上に、libp2pなどを開発するProtocol Labsが開発を主導しているため、将来的な発展が期待できます。

なお、IPFSの詳細な仕組みに関しては、公式ドキュメントやIPFSの開発チームが提供するセミナー(資料 + 動画)が参考になるでしょう。

参考:IPFS DocumentationCORE_AND_ELECTIVE_COURSES

ブロックチェーンカテゴリの最新記事