では、IPFSの本題に入っていきます。
IPFS(Interplanetary File System)とはWEBをより速く、より安全なピア・ツー・ピア型分散WEBシステムです。
「IPFSとは」を一般的に記述するならば、
IPFSは、バージョン管理されたデータを巡回する高速システムの構築を目的として、Juan Benet氏の取り組みによって始まりました。
データの変更履歴(バージョン管理)を追跡できるGitに似た仕組みの分散型ファイルシステムで、データ(オブジェクト)を交換する単一のBitTorrent*スウォームにも似たシステムです。
(*スウォーム:ダウンロード中のコンピュータクラスタの事を指す。仮想通貨のスウォームSWMではないので誤解なきよう)
と説明されています。
ここで、「Git」や「BitTorrent」って何よ!と思う方も多いと思います。技術者が自分の世界で表現すると何故かこんな説明になってしまうんですね(笑)。(公式ページにも同じような説明をしています。)
GitとBitTorrentは後に紹介するとして、ここではそのような表現をしないで本来のIPFSの仕組みや特徴を紹介していく事にします。
IPFSの動作について
実際にファイルが追加された時の動作は次のように働きます。
1.追加されたファイルとその中のすべてのブロックには、暗号化ハッシュと呼ばれる固有のフィンガープリント(ハッシュ値)が設定されます。
「保存されたデータは最初に内容に基づくハッシュ関数により計算されその結果がハッシュ値として追加保存されます。その後内容データに改ざんがあるとこのハッシュ値は最初に保存されたハッシュ値と異なるので改ざんされたデータかオリジナルかを容易に比較できます。」
例えば(SHA-256)によるハッシュ値は
「ひろぴーのbitcoin-fx」–> E5A16495E7A4DA429196504545F49AEF335CE62E49367BC67449502B218441C5
「ひろぴーのbitcoinfx」–> BCC11A09A36AD3B399A29ACF0359F55AE2254A12446484BE6BDF328AF5FE8F1F
となり、このようにデータの長さに関係なくハッシュ値は同一桁の文字列で出力されます。
bitcoinとfxの間の『 – 』(ハイフン)を抜いただけでこうなりました。
これで改ざんしたかどうかが一目瞭然ですね。
2.IPFS上に登録されたデータはネットワーク内では重複を排除します。
IPFS内のデータはDirected acyclic graph(DAG:有向非巡回グラフ)の構造により重複しない様に設計されています。
(出典:REXXホワイトペーパーより)
ちなみに、DAGの構造を使用している(実装を目指している。)暗号通貨(仮想通貨)は「BYTEBALL」、「IOTA」、「REXX」などがあります。
3.各ネットワークノードには、追加されたファイル(コンテンツ)と、誰が何を格納しているのかを特定する為のインデックス情報のみが格納されます。
IPFSにファイルが追加されると、それを暗号化したハッシュが生成されるという仕組み(分散型ハッシュテーブル:DHT)なので、ファイルの表現は非常に小さく安全なものとなります。
この場合、目的のファイルのハッシュ値をダイレクトに指定してもその目的のファイルへは辿り着きません。
ファイルのアドレスは通常、ルートオブジェクトを識別するハッシュで始まり、パスが次に続きます。
サーバではなく特定のオブジェクトと通信して、そのオブジェクト内のパスを調べるのです。こうした構成によりデータの信憑性を確保しています。
4.ファイル(コンテンツ)を検索する時は、ネットワークにユニークなハッシュ値を持ったコンテンツを格納しているノードを見つけるよう動作します。
ファイル(画像、記事、映像など)を参照する時にどこのサーバに保管されているかを調べるのではなく、そのファイルのハッシュ値を参照します。
つまり、ブラウザで特定のページにアクセスしたい場合、IPFSはネットワーク全体に対して「このハッシュに対応するこのファイルを持っているか?」と問い合わせを行い、該当するIPFSのノードがファイルを返すことで、ページにアクセスできるという仕組みです。
この方法を「コンテンツ・アドレッシング」と呼んでいます。
ちなみに従来のWEBで使われているhttpから始まるアドレス方式を「ロケーションアドレッシング」といいます。
5.すべてのファイルは、IPNSと呼ばれる「分散型命名システム」を使用して、人間が読める名前で見つけることができます。
Inter-Planetary Name System(IPNS)は、IPFSコンテンツへの可変リンクを作成および更新するためのシステムです。
IPFSのオブジェクトのコンテンツアドレスは不変なのですが、実際にはコンテンツが変わるたびにアドレスが変わります。 これでは、最新バージョンのものを入手するのは困難となるのですが、そこでIPNSという技術が活躍します。
IPNSの名前は公開鍵のハッシュです。 そのハッシュには、リンクしているハッシュに関する情報を含むレコードが関連付けられています。
秘密鍵によって署名されていますので、その秘密鍵を持っていれば 新しい記録は更新され署名して公開することができます。
いかがでしたでしょうか? これがIPFSの基本動作です。
基本構造を細かく説明しても技術系でない方や中身の仕様まで興味のない方には退屈な内容になってしまいますので、ここでは実際にIPFSが働く動作の概略を知っていただく範囲の説明に留めました。
これらの内容は仮想通貨やブロックチェーンなどの「ホワイトペーパー」にもよく出てくる用語もありますので、ご参考になれば幸いです。
次回はGitとBitTorrentを簡単にご紹介したいと思います。