IPFS×秘密分散の技術を使って遊んでみました。
悪用されかけないので、そのままでは動かないようにちょいと細工してます。
https://github.com/hkiridera/IPFS-SecletSharing
IPFSとは
InterPlanetary File System (IPFS)とは内容アドレスかつP2Pのハイパーメディア分散プロトコルである。
IPFSネットワークにあるノードは分散ファイルシステムを形成する。
IPFSは同じファイルシステムである全てのコンピューターへの接続を試みるP2P分散ファイルシステムである。
複数の点で、IPFSはWebと共通点があるが、IPFSは単一のBitTorrentスウォームのように1つのGitリポジトリの中でオブジェクトを交換することが出来る。
言い換えれば、IPFSはハイスループットの内容アドレスブロックストレージモデルを内容アドレスハイパーリンクで提供する。この形式はマークル木の有向非巡回グラフで生成される。また、IPFSは分散ハッシュテーブルとインセンティブブロック交換、自己証明名前空間を組み合わせている。また、単一障害点がなく、お互いに信頼しあう必要もない。
ローカルファイルもIPFSのファイルシステムに追加することができ、世界中で利用することができる。
ファイルはそれぞれのハッシュで識別することでキャッシングしやすくなる。
引用元:https://ja.wikipedia.org/wiki/InterPlanetary_File_System
要約すると、
- 分散型P2Pストレージ
- 誰でも参加可能なネットワーク
- Fileのハッシュを使って参照する
- Fileが変わるとハッシュも変わる
- 一度Uploadすると消せない
- 改竄、修正も不可
- ファイルは世界中のどこからでも誰でも参照可能
- 別名:惑星間ファイルシステム
IPFS×秘密分散
- 複数ファイルに分割と暗号化しているので、復号鍵を知っている人以外誰も読み解くことができない。
- 分割後ファイルをどの順序で並べれば復元できるのかは、誰にも分からない。
- そもそも、どの分割後ファイルが、どの元ファイルの一部なのか誰にもわからない。= 解読不可
IPFS×秘密分散をすると何ができるようになるのか
このままIPFSの世界にファイルを投稿すると、誰でも読めてしまうので特定の誰かにのみ共有するには向きません。
なので投稿する前に秘密分散の考えを取り入れて、ファイルを暗号化&細分化することで、特定の誰かにのみ絶対に消えないファイルを提供することができます。
たとえば、ブロックチェーンと組み合わせて非中央集権型コンテンツ配信サービスを作ったとすると、
閲覧方法を知っている特定の誰かにのみコンテンツを届けることができるようになります。
復号方法
ファイル投稿後に、復号化するための情報を記録したmetadataファイルが生成されます。
このmetadataに書かれた分割後ファイルをIPFSから探し出し、復号&結合することで元のファイルができあがります。