Open7

近年の P2P 開発関連の調査

ピン留めされたアイテム
にゃるら / カラクリスタにゃるら / カラクリスタ

この Scrap は何?

  • 非中央集権型のアプリケーションを作る際に使えそうなモノを集めています
  • 近年では P2P アプリケーションを作る際の足回りも揃って来ているのでそれの情報収集です
  • とは言え今すぐに私が何かしらを作るとかそう言う感じではないです

実際に P2P アプリケーションを作るとしたらどうするか

今すぐにでも動くものを作りたい場合

  • IPFS と OrbitDB を使う

複数のコンポーネントを組み合わせたい場合

  • データ配信のうち共有する速度が求められるものについては WebTorrent を使う
  • リアルタイム通知やノード管理に Hypercore のライブラリを使う
  • ただし通信ノードの Bootstrap は旧来の中央集権型サーバを使わざるを得ない

独自の構成を持つ P2P ネットワークを作りたい場合

  • libp2p を使いつつ色々と実装する。ただし結構大変

課金などを実装したい場合にはどうするか

  • Ethereum を使うしかない
  • ただし Ethereum を使う場合には慎重に実装を作らないと脆弱性などで死を迎える
  • あと Ethereum には ERC がありこれに沿ってモノを作らないと既存の ecosystem に乗れない

最後に一言

他に何かあったら適宜コメントとかで足してもらえると助かります

にゃるら / カラクリスタにゃるら / カラクリスタ

https://github.com/webtorrent

概要

  • WebRTC と UDP で動作する BitTorrent Protocol の JavaScript 実装
  • ブラウザと Node.js 環境で動作する
  • WebRTC と UDP の環境は Bridge みたいなので情報を共有できる

利点と欠点

利点

  • BitTorrent Protocol 実装なので人気のあるデータほどより良く共有できる
  • ある時点で Static なデータなら何でも共有できる
  • 動画などのストリーミングも出来る

欠点

  • 常にデータが変化していくライブ配信が出来ない
  • 人気のないデータは配信する Peer がいなくなって死ぬ
  • 通信ノードの Bootstrap は別ネットワークで対処する必要がある
にゃるら / カラクリスタにゃるら / カラクリスタ

https://libp2p.io/

概要

  • P2P ネットワークを実装するためのライブラリ集
  • JavaScript(Browser), Node.js, Golang or Rust でのライブラリが提供されている
  • 2021年2月現在もアクティブに開発されている

利点と欠点

利点

  • ライブラリが提供される言語では P2P ネットワーク周りの実装を一からしなくも済む
  • 主だったライブラリはアクティブにメンテされているのでメンテされないリスクは低め
  • 自分独自の P2P Network を作りたい時に便利

欠点

  • ライブラリが提供される言語が限られている
  • ある程度は楽が出来るとは言えネットワークの実装は自分でする必要がある
  • 発展途上なので使いたいライブラリの実装が中途半端な可能性もある
にゃるら / カラクリスタにゃるら / カラクリスタ

https://ipfs.io/

概要

  • AWS S3 とか Google Cloud Storage などの P2P 版みたいな実装
  • ライブラリではなくアプリケーションで JavaScript と Golang の Binding もある
  • P2P アプリでデータ配信基盤として使われている実績がある

利点と欠点

利点

  • P2P データ配信基盤なのでほぼ無限にデータを配信できる
  • 非中央集権型のアプリケーションで確かな採用実績がある
  • cli クライアントや testnet もあり手軽に実験できる

欠点

  • 一度データを配信するとたぶん消せない
  • P2P データ配信なので確実にデータが取得できるとは限らない
  • 所詮はデータ配信基盤なのでアプリなどの上流は自分で作る必要がある
にゃるら / カラクリスタにゃるら / カラクリスタ

https://hypercore-protocol.org/

概要

  • P2P データ配信用のライブラリ集でリアルタイム配信も可能
  • P2Pデータ配信を実現するためのライブラリは一通り揃っている
  • 2021年2月現在もアクティブに開発されている

利点と欠点

利点

  • Node.js で P2P ネットワークを手軽に実装できる
  • P2P を実現するためのライブラリはすべて揃っている
  • P2P データ配信の足回りはこれ一つで揃えることが出来る

欠点

  • Node.js しか実装が無さそう
  • 足回りだけの実装なので上に載せるアプリは自分で作る必要がある
  • あとストレージ層は持ってないのでその辺りも自分で加減する必要がある
にゃるら / カラクリスタにゃるら / カラクリスタ

https://github.com/orbitdb

概要

  • IPFS のデータ配信基盤の上に構築されたデータベースライブラリ
  • 元は Orbit と言う IPFS を使ったチャットアプリのために作られた
  • データ配信とリアルタイム通知の両方が出来る

利点と欠点

利点

  • IPFS の環境が揃っていれば一番実用できそうな雰囲気がある
  • 元がチャットアプリケーションのために作られた物なのでリアルタイム通知なども可能
  • データの読み書きに対するパーミッション関連も実装できる

欠点

  • IPFS の配信基盤上に構築されているので IPFS が必要不可欠
  • データの読み書きの権限は良く練ってから実装しないと後で荒されかねない
  • あと共有できるデータは CRDT に載せられるデータ構造のみ
にゃるら / カラクリスタにゃるら / カラクリスタ

P2P アプリを作る上で考えなければならない攻撃について

概要

  • P2P アプリは様々な思惑で攻撃してくる輩がいるのでそれに対処できないと死
  • そしてやっかいなことに P2P では悪意あるノードへの対処がそれなりに難しい(と思う)
  • またオープンソースで開発すると改変クライアントで攻撃してくるのもいる

一般的な攻撃の種類(順不同)

P2P ネットワークに参加しているノードへの攻撃

  • P2P の参加ノードの IP に直接 DDoS
    • これは昔ファイル共有ソフトウェアの Share がやられてた記憶がある
    • で、この時に使われたインフラは AWS だったような……
  • P2P ネットワークのプロトコルの秘孔を突いて DDoS
    • P2P プロトコルの脆弱性を突いて DDoS してくるケース
    • 例えば Kademlia などの DHT が不適切な実装になっているとかだとやられそう

P2P ネットワークのコンテンツへの攻撃

  • メッセージスパミング(いわゆる連投荒らし)
    • シンプルだがコミュニケーション系 P2P だと排除するのがやっかい
    • P2P メッセンジャーは誰が誰を信頼するかの世界なので匿名投稿を許すとこれにやられる
  • ショッキングコンテンツの投稿
    • いわゆる○○注意とかそういうの
    • これも画像や動画を自動展開とかしているとやられる

P2P 上でのアイデンティティに対する攻撃

  • なりすまし
    • シンプルかつオーソドックス。しかし排除がかなり難しい
    • P2P の Identity は基本名乗った者勝ちの世界なので Identiy の担保が P2P だけでは困難
  • 発言の偽造・捏造
    • P2P アプリは普通の Web アプリ以上にこれがし易い
    • 特に P2P ネットワーク上にアプリが閉じている場合、幾らでもスクショ加工で捏造できる

匿名性に対する攻撃(匿名ネットワークではない場合はあまり関係ない)

  • データのロギング
    • これは P2P である以上防ぎようがない
    • 司法当局や警察当局、悪意ある参加者、ネットワーク研究家とかが想定される

更新履歴

  • 2021-02-08: 初版