IPFSを使ってみる

先日紹介してもらったIPFSを使ってみようのコーナー

IPFSとは

IPFSとはP2Pネットワークでファイルを管理するコンテンツ指向型プロトコル

💡
IPFS上にファイルを保存しそのアドレスをBC上で保存する。これはオンチェーンなの?もうわからんくなってきた。

インストール

macOS

ここからDL、解凍

Linux

$ wget https://dist.ipfs.io/go-ipfs/v0.5.0/go-ipfs_v0.5.0_linux-amd64.tar.gz $ tar xvzf go-ipfs_v0.10.0_linux-amd64.tar.gz
./install.sh

これでインストール完了。

次にローカルのレポジトリを作成する。

$ ipfs init

これだけ。ホームディレクトリに .ipfs というディレクトリが作られる。ここがローカルのレポジトリ。

ファイルの追加
$ ipfs add ファイルパス added <アドレス>

これでローカルのレポジトリに追加される。デーモンが起動している場合は直でブロードキャストされる。

間違っても機密情報を追加してはならない。追加してしまってもデーモン起動前ならまだなんとかなる。.ipfs ディレクトリを削除すればいい。デーモン起動後の場合、すでにネットワークに拡散されてしまっている。これを完全に削除するのは事実上ほぼ不可能である。

デーモンの起動
$ ipfs daemon

これで起動。ネットワークに接続し活動を始める。

ファイルを取得
$ ipfs get <アドレス>

カレントディレクトリにアドレス名でファイルが落ちてくる。拡張子は無し。

その他

同一のコンテンツには同じアドレスが発行される

IPFSにおいて、異なるファイルでipfs addしてもその内容が同一であれば、インプット元のファイルの違いは全く区別されません。これはすなわちipfs addで追加するものは「ファイル」ではなく「コンテンツ自身」であることを意味しています。またそのコンテンツを参照する場合も、これまでのファイルシステムやインターネットとは異なり、test1.txtやtest2.txtのそのコンテンツがある場所(今回の場合はファイル)を指定するのではなく、QmT78zSu....というコンテンツ自体の識別子(アドレス)を示すハッシュ値を指定します。これがコンテンツ指向の思想です。

🤔
ローカルIPなら一瞬でgetできたけど、グローバルIPだとえらい時間かかる。ふむ。

参考

IPFSとは何か?
IPFSとは何か? # IPFS(InterPlanetary File System)は Protocol Labsにより開発が進めれられているP2Pネットワーク上で動作するハイパーメディアプロトコルとその実装です。 現在のインターネットで主要なプロトコルであるHTTP(Hyper Text Transfer Protocol)を補完または置換するプロトコルとして位置付けられ、コンテンツ指向型1のプロトコルであるところに大きな特徴があります。 HTTPはロケーション指向型プロトコル # 例えば現在のインターネットで情報にアクセスする場合https://hogehoge.com/aaa/hello.htmlといったURLを指定してアクセスします。このURLの意味するところは、「hogehoge.comというホストサーバにあるaaaというディレクトリの中のhello.htmlというファイル」ということであり、つまりは取得したい情報がある「場所」(サーバの名前、ディレクトリの名前、ファイル名)を指定しているものです。このように欲しい情報が存在する「場所」を指定して情報にアクセスする方法は「ロケーション指向」と呼ばれ、HTTPはロケーション指向のプロトコルです2。 ロケーション指向の弊害 # このようなロケーション指向での情報へのアクセスは直感的にわかりやすいものです。しかし多くの弊害もあります。まず一つは「情報へのアクセス可能性を保つために管理者に大きな責任(負担)が生じる」というものです。例えば上記例でのhello.html内の情報へのアクセスは「hogehoge.com」のホストサーバの管理状態に依存してしまうことがわかります。hello.html内の情報に全ての人が恒常的にアクセスすることを可能にするために、サーバ管理者には、 24時間365日サーバーを安定稼働させなければならない。 アクセスの数が増えた場合にも遅延なく応答するためのインフラを準備しないといけない。 hello.html内の情報を改ざんされないように、不正アクセスを防ぐための対策を継続しないといけない。 hello.htmlをサーバから削除しない、またはファイル名を変更しないようにしないといけない。 といった責務が生じ、その負担は小さくありません。 このような責任(負担)の裏返しで、サーバ管理者に情報へのアクセスに関する全権力が集中するという弊害もあります。サーバ管理者は 情報へのアクセスを自由に禁止/制限できる。 情報へのアクセスに自由に課金できる。 情報を自由に削除できる。 情報を自由に改ざんできる。 というように、情報へのアクセスに関する全ての権力がサーバ管理者に集中してしまいます。 もちろん、情報の所有者がその情報へのアクセスを管理できることは、多くの場合で有意義なものです。しかし一方で、インターネットが発明されて以降、徐々にあらゆる情報はごく少数の巨大サービスに集中し始めています。例えば個人間の社会的繋がりや日々の行動などが facebookに莫大なデータ量が蓄積され管理されています。facebookは私的企業であり、彼らのサービス規定に則りアクセス制限を自由にかけることが可能です。さらにはサービス規定自体もfacebook自身が決めることができるのです。よってユーザーは、自分自身の生み出した様々なデータがfacebook社によって改ざんやアクセス制限、不正利用などされない「だろう」と信じて預けるほかにありません。しかし実際にはそのような信用は裏切られ、アメリカ大統領選挙の際にfacebook社が不正に約8,000万人分のユーザーデータをトランプ陣営側のデータ分析会社に提供する 事件が発生しています。 また情報アクセスへの制限は、サービス(サーバ)管理者だけでなく例えば国家によってもなされる場合があります。2017年4月29日トルコ政府はトルコ国内で全ての言語のWikipediaへのアクセスを遮断しました。当初は 制限に至る理由も公表されることなく3、突如禁止され、現在もアクセスが禁止され続けています。インターネットでの情報アクセスがロケーション指向であるため、Wikipediaのサーバへのアクセスを遮断するだけで容易に市民の情報へのアクセスが制限することが可能になるのです。 インターネットが発明されて以来数十年の間、ロケーション指向の情報アクセスはうまく動作してきたように見えます。しかしインターネットの発展と共に、上記のようにロケーション指向による弊害やリスクといったものが少しずつ顕在化してきています。 IPFSはコンテンツ指向型プロトコル # このような問題を根本的に解決するためにIPFSではコンテンツ指向型のプロトコルを採用しています。 例えばあなたが書籍、例えば 養老孟司の「バカの壁」を読みたいと思ったとき、その書籍が読めればそれがどこから入手したものかを気にすることはほとんどありません。近所の本屋さんで買っても、Amazonで買っても、図書館から借りても同じ内容を読むことができます。 インターネット上の情報も同様です。同一の内容であればどのサーバ上から取得したか?どの名前のファイルから取得したかなどという入手先はほとんどの場合で重要ではありません。そのためその情報の「場所」ではなく、「こういう内容の情報」というコンテンツの内容自体を直接指定して情報にアクセスする仕組みを考えることができます。これが「コンテンツ指向」になります。 コンテンツ指向プロトコルの仕組みは古くから研究されており様々な実装方法が提案されています。その中でもIPFSでは SHAなどの暗号ハッシュ関数を利用してコンテンツのハッシュ値を求め、それをそのコンテンツのIDとして利用する方法を採用しています。ハッシュ関数により得られるハッシュ値は、同じデータであれば必ず同じハッシュ値が得られる一方、少しでも異なるデータからはまったく異なるハッシュ値が得られる特徴があります。そのためこのハッシュ値をキーにアクセスするIPFSには、ロケーション指向であるHTTPプロトコルでは得られない以下のようなメリットが生まれます。 耐障害性 # IPFSではコンテンツのハッシュ値を指定し、そのコンテンツが存在する場所(サーバ等)を指定しません。そのため、たとえオリジナルのサーバが何らかの原因でダウンしていても、同じハッシュ値(=コンテンツ)のデータを持っているどこか他の場所から同じ情報を取得することが可能になります。(読みたい本がある書店で売り切れていたら他の書店で買い求めるのと同様の動作です。前述のとおり内容が同じであればどの書店から購入しようがユーザーは気にしないのです。) 負荷分散 # コンテンツの場所を指定しないIPFSでは、同じコンテンツを複数のサーバから取得できる場合、より近いサーバから取得することになります。一つのサーバーに負荷が集中することを防ぐことが可能になります。 耐検閲性 # 先のトルコの例に見るようにロケーション指向ネットワークでは、その情報のある場所(サーバ)へのアクセスを遮断するだけで検閲が可能でした。一方、コンテンツ指向ネットワークでは同じコンテンツは無数のサーバで保持されることが可能であり、どこかのサーバがアクセスを遮断されても、代理の他のどこかの別のサーバから同一の情報が取得可能になり、検閲を難しくします。 耐改ざん性 # データのハッシュ値をキーにデータにアクセスするということはデータの改ざんを不可能にします。データを取得した人はアクセスしたデータのIDであるハッシュ値と、そのコンテンツから得られるハッシュ値を比較することで容易にコンテンツの正当性を検証することができるからです。 Filecoin # 以上のようにHTTPに比べて様々な利点があるIPFSですが、1つ問題が残っています。それはIPFSのP2Pネットワークのノードがコンテンツを保持する動機となるもの(インセンティブ)がないことです。
Favicon of the bookmark site
https://ipfs-book.decentralized-web.jp
Site image of the bookmark