GNUnet

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に関する修士論文

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。