GNUnet
GNUnetは分散型P2P通信のためのフリーソフトウェアフレームワークであり、公式のGNUプロジェクトのパッケージである。データ・リンク暗号化、ピアの検出、リソース割り当て、様々な手段での通信(TCP、UDP、HTTP、HTTPS、無線LAN)、基本的なP2Pアルゴリズムとしてルーティング、マルチキャスト、 交通トラフィック推定機能を持つ。
![]() | |
![]() GTKユーザインタフェースのGNUnet | |
開発元 | GNUnet developers |
---|---|
初版 | November 5, 2001 |
最新版 | 0.14.0 - 2020年11月14日[1] [±] |
最新評価版 |
0.11.0pre66
/ 2018年6月6日[2] |
リポジトリ | |
プログラミング 言語 | C |
対応OS | 公式: フリーソフトウェアオペレーティングシステム (GNU/Linux, FreeBSD, NetBSD, OpenBSD); 非公式: その他のオペレーティングシステム (macOS, Windows) |
サポート状況 | Active |
種別 | 匿名P2P, Friend-to-friend |
ライセンス | GNU AGPLv3またはそれ以降[3] (フリーソフトウェア) |
公式サイト |
gnunet |
GNUnetの基本的なネットワークトポロジーはメッシュネットワークである。GNUnetはスモールワールドネットワークに最適化されたKademliaのランダム化版分散ハッシュテーブルを内蔵している。GNUnetはユーザーの信頼された友人だけに通信を制限するためのF2Fトポロジーオプションを有する。ユーザーの「友人」の更に友人といった閉じたネットワーク上で、互いにIPアドレスを直接公開することなくファイル交換が可能である。
GNUnetはUniform Resource Identifier (URI) 識別子(IANA未認可)を使用する。GNUnetのURIはモジュールとモジュール特有識別子の二つで構成される。GNUnetのURIはgnunet://module/identifierという形式であり、moduleがモジュール名でありidentifierがモジュール特有識別子である。
コードの基礎はC言語で書かれているが、 gnunet-javaの進展によりJavaにより拡張機能を開発するためのAPIも存在する。GNUnetは現在Linux、 BSD、 macOS、Solaris、 Windowsで動作する。
GNUnetはフレームワークの主なディストリビューションで様々なP2Pアプリケーションを提供し、追加プロジェクトのSecuShare等がそれを拡張している。
ファイル共有
編集現時点の設計は匿名性、検閲への耐性のあるファイル共有を重視し、ユーザーに匿名ですべての種類の情報を送受信させるためのものである。GNUnetは共有されたファイルを自動的にGNU libextractorを使用しメタデータにより注釈する。
ファイル共有サービスはルーティングのクエリと返答にGNUnetの匿名プロトコルを使用する。転送されたクエリのメッセージはデータブロック等のコンテンツの検索に使用される。転送ノードの負荷状況により、メッセージはゼロまたは1以上のノードに転送される。ノードに負荷がかかっているときは近隣ノードからのリクエストを拒否し、ノード内部の信頼値が低下する。GNUnetの匿名プロトコル固有の機能としてユーザーは匿名化レベルを選択可能である。匿名化レベルは自分の通信を隠すための迂回通信回数を決定するものである。ユーザーは個別のアップロード、検索、ダウンロードのために毎回好きな匿名化レベルを設定できる。匿名化レベルゼロを選択することによることにより、非匿名で実IPを明らかにしたファイル共有も可能である。GNUnetのDHTインフラストラクチャーは非匿名が設定された場合のみ有効化される。
ファイル共有URI
編集GNUnetで共有されたファイルはECRS (An Encoding for Censorship-Resistant Sharing) によりエンコードされる。fsモジュールのidentifierはchk、sks、ksk、locのいずれか一つにより構成され、スラッシュとカテゴリ特有値を伴う。
- chkはファイルを特定する。典型的には: gnunet://fs/chk/[ファイルハッシュ、0-9A-Vの値を使用].[クエリハッシュ、0-9A-Vの値を使用].[バイト値でのファイルサイズ]
- sksは名前空間内のファイルを特定する。典型的には: gnunet://fs/sks/NAMESPACE/IDENTIFIER
- kskは検索クエリを特定する。典型的には: gnunet://fs/ksk/KEYWORD[+KEYWORD]*
- locは特定のマシン上での情報を特定する。典型的には: gnunet://fs/loc/PEER/QUERY.TYPE.KEY.SIZE
例
編集GNU GPLライセンス文書の特定の版を示すGNUnetのファイル共有URI:
gnunet://fs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VH\ ORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3L\ KS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC\ 6MVDL1K8GFKVBN69Q6T307U6O.17992
"gpl"の検索結果を示すGNUnetのファイル共有URI:
gnunet://fs/ksk/gpl
GNU代替ドメインシステム
編集GNUnetはDNSの分散化版であり検閲体制版であるGNU代替ドメインシステム(GNU Alternative Domain System、GADSとも)の実装を含む。GADSでは、それぞれのユーザーは.gads TLDの下のDNS名前空間にマップされた自分のmasterDNSゾーンを管理する。ユーザーは他のユーザーに管理されたDNSゾーンにサブドメインを委譲することもできる。他のユーザーの定義はGNUnetのDHT機能により参照される。このシステムの大きな問題として、ドメイン名は特有の物ではなくなり、通常のアプリケーションからアクセスするためにはプロキシなどの手段が必要である。
プロトコル変換
編集GNUnetはIP通信をP2Pネットワーク経由で行うことができる。必要ならば、GNUnetはIPv4-IPv6プロトコル変換を実行できる。GNUnetはDNSのアプリケーションレベルゲートウェイを提供し、DNSリクエストをプロキシすることで必要なアドレスをマップすることができる。これにより、GNUnetはIPv6移行のために使用することも可能である。また、GADSとの組み合わせにより、GNUnetはGADS内にある秘匿サービスのウェブページなどにアクセスできる。
チャット
編集簡素なチャット機能がテスト用に実装され、使用可能である。
関連項目
編集脚注
編集- ^ Grothoff, Christian (2020年11月14日). “GNUnet 0.14.0 released”. gnunet.org. GNUnet e.V.. 2020年12月25日閲覧。
- ^ GNUnetダウンロード公式サイト
- ^ “license notice placed at the top in one of the source files of the project's repository, probably in each of its source files”. June 8, 2018閲覧。 “GNUnet is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.”