GNUnetは、
分散型ピアツーピア(P2P)
通信のための自由
ソフトウェアフレームワークであり、
GNUプロジェクトの公式パッケージです。このフレームワークは、データリンクの暗号化、ピアの検出、リソースの割り当て、そしてTCP、UDP、HTTP、
HTTPS、
無線LANなど様々な
通信手段をサポートしています。基本的なP2P
アルゴリズムとして、ルーティング、マルチキャスト、交通トラフィック推定機能も備えています。
ネットワークトポロジー
GNUnetの基本的なネットワークトポロジーはメッシュネットワークです。内部には、スモールワールドネットワークに最適化されたKademliaの
ランダム化版
分散ハッシュテーブル(
DHT)が組み込まれています。また、ユーザーが信頼する「友人」とのみ
通信を制限する、フレンドツーフレンド(F2F)トポロジーオプションも提供しています。これにより、「友人」のさらに「友人」といった閉じたネットワーク内で、互いの
IPアドレスを直接公開することなくファイル交換が可能になります。
URI識別子
GNUnetは、Uniform Resource Identifier(URI)識別子(IANA未認可)を使用します。GNUnetのURIは、モジュール名とモジュール特有識別子の2つで構成され、「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)の識別子は、「chk」、「sks」、「ksk」、「loc」のいずれかで構成され、スラッシュとカテゴリ特有の値が続きます。
chk: ファイルを特定します。例: `gnunet://fs/chk/[ファイルハッシュ].[クエリハッシュ].[バイト値でのファイルサイズ]`
sks: 名前空間内のファイルを特定します。例: `gnunet://fs/sks/NAMESPACE/IDENTIFIER`
ksk: 検索クエリを特定します。例: `gnunet://fs/ksk/KEYWORD[+KEYWORD]`
loc: 特定のマシン上の情報を特定します。例: `gnunet://fs/loc/PEER/QUERY.TYPE.KEY.SIZE`
例として、GNU GPLライセンス文書の特定の版を示すURIは以下のようになります。
`gnunet://fs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992`
また、「gpl」の検索結果を示すURIは以下のようになります。
`gnunet://fs/ksk/gpl`
GNU代替ドメインシステム (GADS)
GNUnetには、DNSの分散型で検閲耐性のある代替システムであるGNU代替ドメインシステム(GADS)の実装も含まれています。GADSでは、各ユーザーは「.gads」TLD下のDNS名前空間にマップされた独自のmasterDNSゾーンを管理します。ユーザーは、他のユーザーが管理するDNSゾーンにサブドメインを委任することも可能です。他のユーザーの定義は、GNUnetのDHT機能によって参照されます。このシステムの課題として、ドメイン名が一意でなくなり、通常のアプリケーションからアクセスするにはプロキシなどの手段が必要となります。
プロトコル変換
GNUnetは、IP通信をP2Pネットワーク経由でルーティングすることが可能です。必要であれば、IPv4-IPv6プロトコル変換を実行できます。DNSのアプリケーションレベルゲートウェイを提供し、DNSリクエストをプロキシすることで必要なアドレスをマッピングできます。これにより、GNUnetはIPv6への移行にも役立ちます。さらに、GADSとの組み合わせにより、GNUnetはGADS内にある秘匿サービスのウェブページなどにアクセスすることができます。
その他の機能
簡素なチャット機能がテスト用に実装されており、利用可能です。
関連事項
匿名P2P
Friend-to-friend (F2F)
匿名通信ソフトウェア:
Freenet, I2P,
Tor
匿名ファイル共有ソフトウェア: Share, Winny
外部リンク
公式ウェブサイト
日本版ミラー
ECRSに関する論文 (pdf)
GNUnetと他のP2Pネットワーキングの比較
GNUnet adds VPN, direct wireless peering, and more, LWN.net, December 21, 2011
*
GNU Alternative Domain Systemに関する修士論文