
暗号化ベースのネットワーキングスタック。LoRa、パケット無線、WiFiなど、あらゆる通信手段で止まらないネットワークを構築。
[!WARNING]
現在、Reticulum 実装の偽物、および「ドキュメント」「ガイド」、ユーザー向けアプリケーションの、性急に公開された、不正確で、疑わしく、直接的に有害な、そしてほとんどの場合完全に LLM によって生成された偽物が、洗練されているが最終的には誤解を招く、あるいは完全に欺瞞的な主張のもとで大量に市場に出回っています。より詳細な情報については、マニュアルの Brandolini's Reference 章の関連セクションを参照してください。既知の優良なコミュニティ実装は、この readme の Community Implementations セクションに記載されています。Reticulum コミュニティによって認知されているソフトウェアとプロジェクトについては、マニュアルの Programs Using Reticulum 章を参照してください。
RNS のソースコードやドキュメントから派生した機械生成コンテンツ(「実装」、販売用の「ガイド」など)は、いくつかのよく文書化された事例において、複製および配布の権利を付与したオープンソースライセンスに違反しています。
そのようなプロジェクトが行っている著作権の主張やライセンスの付与(Apache、GPL など)は、無効な付与です。違反者自身も、侵害する派生作品を使用するすべての下流プロジェクトも、法的結果に対して直接かつ個人的に責任を負います。
これらの「プロジェクト」を使用しないでください。それらは、私たちが過去 10 年間にわたって慎重に構築してきたエコシステム全体にとっての危険です。

このリポジトリは公開ミラーです。すべての開発は別の場所で行われています。
このシステムの基礎となる哲学と目標を理解するには、Zen of Reticulum をお読みください。
Reticulum は、入手しやすいハードウェアでローカルおよび広域ネットワークを構築するための、暗号技術に基づくネットワークスタックです。非常に高いレイテンシや極めて低い帯域幅でも動作します。Reticulum を使えば、既製のツールで広域ネットワークを構築でき、エンドツーエンドの暗号化と接続性、発信者の匿名性、暗号学的に裏付けられた自動構成のマルチホップ転送、効率的なアドレッシング、偽造不可能な配信確認などを提供します。
Reticulum のビジョンは、誰もが自分自身のネットワークオペレーターになれるようにし、多数の独立した、相互接続可能で自律的なネットワークで広大な領域を安価かつ容易にカバーできるようにすることです。Reticulum はひとつのネットワークではありません。何千ものネットワークを構築するためのツールです。キルスイッチ、監視、検閲、管理のないネットワーク。自由に相互運用し、互いに接続したり切断したりでき、中央の監督を必要としないネットワーク。人間のためのネットワーク。人々のためのネットワーク。
Reticulum は完全なネットワークスタックであり、IP や上位層に依存しませんが、Reticulum の基盤となるキャリアとして IP を使用することも可能です。したがって、Reticulum をインターネットやプライベート IP ネットワーク上でトンネルすることは容易です。
従来のネットワークスタックへの依存がないことで、暗号原理に直接基づいて構築されたネットワークスタックを実装するために使われてきたオーバーヘッドを解放し、オープンで信頼のないネットワークにおいても、回復力と安定した機能を可能にします。
カーネルモジュールやドライバーは不要です。Reticulum は完全にユーザーランドで動作し、Python 3 が動作する実質的にあらゆるシステムで実行できます。
Reticulum の完全なドキュメントは markqvist.github.io/Reticulum/manual/ で入手できます。
Reticulum マニュアルを PDF として、または EPUB 形式の電子書籍としてダウンロードすることもできます。
詳細については、reticulum.network および wiki の FAQ セクションを参照してください。
ここに記載されているリファレンスは、Reticulum プロジェクトやそのメンテナーによって運営、管理、またはモデレートされているものではありません。これらは、Reticulum についてもっと学びたいと願うすべての人の利益のために、コミュニティの献身的で独立したボランティアによって提供されています。
もはや正確でない、不正確、あるいは単にあまり最新でないものを見つけた場合でも、これらのリソースのメンテナーに要求したり不満を述べたりしないでください。代わりに、上記の作成者たちが自ら行ったように、あなたが改善したいと思う貢献を自ら作業し、提供することで、物事を改善する手助けをしてください。
このリポジトリの Python コードは、Reticulum のリファレンス実装です。Reticulum プロトコルは、このリファレンス実装とそれに関連するマニュアルによって完全かつ権威的に定義されます。これは Mark Qvist によって維持されており、Reticulum Identity <bc7291552be7a58f361522990465165c> によって識別されます。
二次的なプロトコル仕様の派生版は、現在存在せず、今後も決して存在しません。実行可能で、機能的で、テスト可能で、展開され、地球上で 24 時間 365 日稼働している仕様よりも優れた仕様を得ることはできません。
Reticulum のための別個の派生した「正式仕様」、「RFC」、または類似のものは存在せず、今後も存在しません:
リファレンス実装が最終的かつ権威的な仕様です。
Reticulum プロトコルとの互換性は、完全な相互運用性と、このリファレンス実装との十分な機能同等性を有することと定義されます。これを達成する特定のプロトコル実装は Reticulum です。達成しないものは Reticulum ではありません。
リファレンス実装は Reticulum License の下でライセンスされています。
Reticulum プロトコルは 2016 年にパブリックドメインに捧げられました。
ここに記載されている実装は、ワイヤ互換性、十分な機能同等性、妥当なセキュリティと開発慣行、長期的なコミットメントと実装品質への配慮を実証しています。さらに、少なくとも 18 か月間の活発な開発の実績があります。
最も重要なことに、それらの開発者とメンテナーは、自分たちが何をしているのかを実際に理解しており、Reticulum エコシステム全体の改善にコミットしているとコミュニティに認知されています。
上記に記載されていない実装のメンテナーであり、同じ厳格さとコミットメントの基準に従うことで掲載に値すると考えるなら、あなたの提案は歓迎されます。
警告! 性急に公開された、不正確で、疑わしく、直接的に有害な、そしてほとんどの場合完全に LLM によって生成された Reticulum 実装(およびユーザー向けアプリケーション)の偽物が、現在、洗練されているが最終的には誤解を招く、あるいは完全に欺瞞的な主張のもとで市場に出回り、押し付けられています。これらのほとんどは、素早い注目や金銭の獲得を目的としたもの、完全に未レビュー、非互換、メンテナンスや人間の監督なし、積極的にコミュニティを分断しようとするもの、またはこれらの組み合わせのいずれかです。
このトピックに関するより広範な情報については、マニュアルの Brandolini's Reference 章を読んでください(法的基盤については、特に Void Grants を参照)。この章は非常に長く、非常に詳細で、これらの問題に関する進化するセクション化されたリファレンスとして意図された、丁寧で節度ある分析です。
もしあなたが、むしろ短く、フィルターなしで、かなり怒りに満ちたバージョンを望むなら、それはこの現象全体のある特定の現れに対する、例として用いられた実際の応答から成りますが、Yes, I am Angry を読むことができます。そのようなコミュニケーションに対処できるなら、非常に異なる言葉遣いで同じ要点を伝えています。
Reticulum のコアメンテナーと開発者は、そのようないかなる「実装」の使用にも強く反対します。少数の悪意ある、注目を求める、または無能な個人による欺瞞的で自己奉仕的な行動は、開発者、ノード運用者、ユーザー、そしてコミュニティと Reticulum プロジェクト全体にとって、多大な損害と時間とリソースの浪費を引き起こしてきました。
私たちは、すべてのユーザーに、上記に記載されていない実装の潜在的な使用を評価する際には、慎重さ、常識、健全な懐疑心を働かせるよう、親切に、しかし緊急に求めます。そして、それにもかかわらずそうすることを選ぶことは、無責任または悪意ある個人からの潜在的な損害の責任をあなた自身に移すことになることを受け入れるよう求めます。
Reticulum が何をできるかを素早く知りたい場合は、マニュアルの Programs Using Reticulum セクション、または以下のリソースを見てください:
rnphone プログラムなど、音声ベースのアプリケーションやハードウェアデバイスを構築するためのプリミティブとユーティリティが含まれています。少なくとも 5 ビット/秒を超えるスループットと 500 バイトの MTU を持つ半二重チャネルをサポートできる、実質的にあらゆる媒体で使用できます。データ無線、モデム、LoRa 無線、シリアル回線、AX.25 TNC、アマチュア無線デジタルモード、WiFi および Ethernet デバイス、自由空間光通信リンク、および類似のシステムはすべて、Reticulum が使用できる物理デバイスのタイプの例です。
RNode と呼ばれるオープンソースの LoRa ベースのインターフェースは、Reticulum での使用のために特別に設計されています。自分で構築することも、ホストへの USB、WiFi、または Bluetooth 接続だけが必要な完全なトランシーバーとして購入することもできます。
Reticulum は既存の IP ネットワーク上にカプセル化することもできるため、有線 Ethernet、ローカル WiFi ネットワーク、またはインターネット上で使用することを妨げるものは何もなく、そこでも同様に機能します。実際、Reticulum の強みの一つは、利用可能なインフラストラクチャの任意の組み合わせを使用して、異なる媒体を自己構成する回復力のある暗号化されたメッシュに簡単に接続できることです。
例として、LoRa 無線、パケット無線 TNC、WiFi ネットワークの両方に接続された Raspberry Pi をセットアップすることが可能です。インターフェースが構成されると、Reticulum が残りを処理し、WiFi ネットワーク上の任意のデバイスが、ネットワークの LoRa 側とパケット無線側のノードと通信でき、その逆も同様です。
Reticulum Network Stack を始める最良の方法は、あなたが何をしたいかによって異なります。詳細と例については、Reticulum Manual の Getting Started Fast セクションを見てください。
Reticulum と関連ユーティリティをシステムに単純にインストールするには、最も簡単な方法は pip を使用することです。その後、Reticulum を使用する任意のプログラムを起動するか、rnsd ユーティリティで Reticulum をシステムサービスとして起動できます。```bash
pip install rns
`pip` を介した通常のユーザーパッケージインストールをブロックするオペレーティングシステムを使用している場合は、`~/.config/pip/pip.conf` ファイルを編集し、`[global]` セクションに以下のディレクティブを追加することで、`pip` を通常の動作に戻すことができます:```text
[global]
break-system-packages = true
または、pipx ツールを使用して Reticulum を分離された環境にインストールすることもできます:```bash
pipx install rns
初回起動時、Reticulumはデフォルトの設定ファイルを作成し、ローカルで到達可能な他のReticulumピアへの基本的な接続性を提供します。デフォルトの設定ファイルにはいくつかの例と、より複雑な設定を作成するためのリファレンスが含まれています。
システムに古いバージョンの`pip`がインストールされている場合は、まず`pip install pip --upgrade`でアップグレードする必要があるかもしれません。まだ`pip`がインストールされていない場合は、お使いのシステムのパッケージマネージャーを使用して`sudo apt install python3-pip`などでインストールできます。
パケット無線やLoRa、シリアルポート、あるいはUDPおよびTCPインターフェースを使用した高速IPリンクやインターネットなど、多くの媒体を介した通信を拡張する方法のより詳細な例については、[Reticulum Manual](https://markqvist.github.io/Reticulum/manual/)の[Supported Interfaces](https://markqvist.github.io/Reticulum/manual/interfaces.html)セクションをご覧ください。
## 付属ユーティリティ
Reticulumには、ネットワークの管理、ステータスや情報の表示、その他のタスクのための便利なユーティリティが多数含まれています。これらのプログラムの詳細については、[Reticulum Manual](https://markqvist.github.io/Reticulum/manual/)の[Included Utility Programs](https://markqvist.github.io/Reticulum/manual/using.html#included-utility-programs)セクションをご覧ください。
- Reticulumを常時利用可能なサービスとして実行するためのシステムデーモン`rnsd`
- インターフェースに関する情報を表示する、`rnstatus`と呼ばれるインターフェースステータスユーティリティ
- パステーブルを表示および変更できる、パス検索および管理ツール`rnpath`
- 宛先への接続性を確認するための、`rnprobe`と呼ばれる診断ツール
- システム間でファイルを簡単に転送できる、`rncp`と呼ばれるシンプルなファイル転送プログラム
- アイデンティティの管理とファイルの暗号化/復号化ができる、アイデンティティ管理および暗号化ユーティリティ`rnid`
- リモートシステムとの完全に対話的なシェルセッションを確立できる`rnsh`プログラム
- リモートシステムで簡単なコマンドやプログラムを実行し、出力を取得できるリモートコマンド実行プログラム`rnx`
- Reticulum上でリポジトリを提供するための、完全なマルチリポジトリGitノードを提供する`rngit`プログラム
- Reticulum上でGitリポジトリと対話できる、付属の`git-remote-rns`ヘルパー
`rnx`や`rncp`を含むすべてのツールは、LoRaやパケット無線のような非常に低帯域幅のリンク上でも確実かつ良好に動作します。Reticulum上でのフル機能のリモートシェルについては、[rnsh](https://github.com/acehoss/rnsh)プログラムもご覧ください。
## サポートされているインターフェースタイプとデバイス
Reticulumは、Reticulumが動作できるほとんどの通信ハードウェアをカバーする、さまざまな汎用インターフェースタイプを実装しています。お使いのハードウェアがサポートされていない場合でも、[カスタムインターフェースモジュールの実装は簡単です](https://markqvist.github.io/Reticulum/manual/interfaces.html#custom-interfaces)。
カスタムインターフェースの貢献は、一般的に有用であり、実世界での使用において十分にテストされているものであれば、喜んで受け入れられます。
現在、以下の組み込みインターフェースがサポートされています:
- 任意のEthernetデバイス
- [RNode](https://unsigned.io/rnode/)を使用したLoRa
- パケット無線TNC(AX.25の有無を問わない)
- KISS互換のハードウェアおよびソフトウェアモデム
- シリアルポートを備えた任意のデバイス
- IPネットワーク上のTCP
- IPネットワーク上のUDP
- stdioまたはパイプを介した外部プログラム
- stdioまたはパイプを介したカスタムハードウェア
## パフォーマンス
*ここに記載されているすべてのパフォーマンス数値は、`rnsd`が完全にインタプリタされたPythonモードで動作し、単一のCPUコアに制限されていることを前提としています。*
Reticulumは*非常に*広い実用的なパフォーマンス範囲を目標としていますが、低帯域幅の媒体における機能性とパフォーマンスを優先しています。目標は、通常のハードウェアで毎秒100ビットから毎秒10ギガビットまでの動的なパフォーマンス範囲を提供することです。
現在、ネットワーク上での実用的なパフォーマンス範囲は、一般的なハードウェアでおよそ毎秒150ビットから毎秒1ギガビットです。実世界でのパフォーマンスは、システムの速度、暗号化ハードウェアアクセラレーションの可用性、その他の要因によって大きく変動します。
Raspberry Pi 5でホストされるトランスポートノードの生のルーティングスループットは、およそ毎秒5ギガビットです。最新の暗号化ハードウェアアクセラレーションを備えたシステムでは、毎秒15ギガビット以上のトランスポートスループットを達成できます。
リファレンス実装は、複数のCPUコアとベクトル化されたトランスポートを活用することで、100+ Gbpsに到達する能力を完全に備えていますが、RNSはほぼすべての実世界の状況で利用可能な物理媒体の帯域幅を飽和させることがすでにできるため、現在のレベルを超えるパフォーマンスはそれほど優先されていません。
RNSの主な目的は、*信頼性*、*正確性*、*セキュリティ*、*適切なトラフィック管理*、そして*実際に実用的なパフォーマンス*であり、実世界での使いやすさにほとんど、あるいはまったく関係のない空虚な紙上の「ベンチマーク」ではありません。
すべての代替実装のメンテナーは、同様のアプローチを採用することが*強く*推奨され、特に経験的に疑わしい、あるいは事実に反するパフォーマンスの主張を公開する前に、実装が適切かつ確実に動作するようにすることに注力することが推奨されます。
## 現在のステータス
すべてのコアプロトコル機能は実装され、機能していますが、実世界での使用が探求され理解されるにつれて、追加が行われる可能性があります。APIとワイヤーフォーマットは安定していると見なすことができます。
## 依存関係
デフォルトの`rns`パッケージのインストールには、以下に示す2つの外部依存関係のみが必要です。ほとんどすべてのシステムとディストリビューションには、これらの依存関係のすぐに利用可能なパッケージがあり、`rns`パッケージが`pip`でインストールされると、それらもダウンロードおよびインストールされます。
- [PyCA/cryptography](https://github.com/pyca/cryptography)
- [pyserial](https://github.com/pyserial/pyserial)
より珍しいシステムや、まれなケースでは、上記のモジュールの1つ以上をインストールしたり、コンパイルしたりすることさえ不可能な場合があります。そのような状況では、代わりに`rnspure`パッケージを使用できます。これはインストールに外部依存関係を必要としません。`rns`パッケージと`rnspure`パッケージの内容は*同一*であることに注意してください。唯一の違いは、`rnspure`パッケージがインストールに必要な依存関係を一切リストしていないことです。
Reticulumがどのようにインストールされ起動されても、外部依存関係は*必要*かつ*利用可能*な場合にのみロードされます。たとえば、[pyserial](https://github.com/pyserial/pyserial)をサポートできないシステムでReticulumを使用したい場合、`rnspure`パッケージを使用してそうすることは完全に可能ですが、Reticulumはシリアルベースのインターフェースを使用できません。他のすべての利用可能なモジュールは、必要に応じて引き続きロードされます。
**ご注意ください!** [PyCA/cryptography](https://github.com/pyca/cryptography)をサポートしていないシステムでReticulumを実行するために`rnspure`パッケージを使用する場合、このドキュメントの[暗号プリミティブ](#cryptographic-primitives)セクションを読んで理解することが重要です。
## 接続性のブートストラップ
Reticulumは、あなたがサブスクライブするサービスでも、あなたが「参加する」単一のグローバルネットワークでもありません。Reticulumは、ネットワーク自体を介して利用可能なパブリックインターフェースを発見するための機能を提供し、より広いコミュニティは、接続性をブートストラップするための公開されたエントリポイントのさまざまなディレクトリを提供しています。
Reticulumを介した初期接続を確立する方法を学ぶには、マニュアルの[Bootstrapping Connectivity](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity)セクションをお読みください。
これがどのように機能するかについてすでに一般的な考えをお持ちの場合は、[directory.rns.recipes](https://directory.rns.recipes/)や[rmap.world](https://rmap.world)などのコミュニティ運営のサイトを使用して、グローバルな分散型Reticulumバックボーンへの初期接続のためのインターフェース定義を見つけることができます。
## パブリックテストネット
***重要!** 歴史的に、開発者向けのテストネットはReticulumプロジェクト自体によって提供されていました。グローバルなReticulumノードとエントリポイントの数が相当な量にまで増加したため、このパブリックテストネットは、Amsterdam Testnetエントリポイントを含め、現在廃止されています。接続性のためにこのエントリポイントに依存していたインスタンスがまだある場合は、代わりに分散型バックボーンの使用に移行してください。Reticulumは現在、完全なオンネットワークのインターフェース発見と接続性ブートストラップシステムを含んでいます。ポインタについては、マニュアルの[Bootstrapping Connectivity](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity)セクションをお読みください。*
## Reticulumを支援する
これを可能にするために、私はあなたの助けを必要としています。以下のチャネルのいずれかを介して寄付することで、オープンで自由でプライベートな通信システムの継続的な開発を支援してください:
- Monero: ```
84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w
Bitcoin ``` bc1pgqgu8h8xvj4jtafslq396v7ju7hkgymyrzyqft4llfslz5vp99psqfk3a6
Ethereum ``` 0x91C421DdfB8a30a49A71d63447ddb54cEBe3465E
Liberapay: https://liberapay.com/Reticulum/
Ko-Fi: https://ko-fi.com/markqvist
Reticulumは、効率的で強力かつ十分にテストされた暗号プリミティブのシンプルなスイートを使用しており、汎用CPUとマイクロコントローラーの両方で使用できる広く利用可能な実装を備えています。
この特定のプリミティブセットを選択する主な考慮事項の1つは、実質的にすべての現在のコンピューティングプラットフォーム上で、比較的少ない落とし穴で安全に実装できることです。
ここにリストされているプリミティブは権威があります。Reticulumを名乗りながら、これらの正確なプリミティブを使用していないものはReticulumではなく、意図的に侵害または弱体化されたクローンである可能性があります。使用されるプリミティブは以下の通りです:
os.urandom()以上で生成する必要がありますデフォルトのインストール構成では、X25519、Ed25519、およびAES-256-CBCプリミティブはOpenSSL(PyCA/cryptographyパッケージ経由)によって提供されます。ハッシュ関数SHA-256およびSHA-512は標準のPython hashlibによって提供されます。HKDF、HMAC、Tokenプリミティブ、およびPKCS7パディング関数は常に以下の内部実装によって提供されます:
Reticulumはまた、必要なすべてのプリミティブの完全な実装を純粋なPythonで含んでいます。Reticulumの起動時にOpenSSLとPyCAがシステムで利用できない場合、Reticulumは代わりに内部の純粋なPythonプリミティブを使用します。この些細な結果はパフォーマンスであり、OpenSSLバックエンドははるかに高速です。しかし最も重要な結果は、OpenSSLのものと同じ量の精査、テスト、レビューを受けていないプリミティブを使用することによるセキュリティの潜在的な損失です。
デフォルトでは、Reticulumのインストールは、まだ利用可能でない場合、OpenSSLとPyCAも自動的にインストールされることを要求することに注意してください。純粋なPythonプリミティブを使用できるのは、この要件がユーザーによって特別に上書きされた場合のみです。例えば、通常のrnsパッケージの代わりにrnspureパッケージをインストールするか、ローカルソースコードから直接実行する場合です。
内部の純粋なPythonプリミティブを使用したい場合は、これがもたらすリスクを十分に理解し、それらのリスクが自分にとって許容できるかどうかについて情報に基づいた決定を下すことが強く推奨されます。
10年間の開発と約5年間の広範な展開を経て、Reticulumは比較的若いソフトウェアであり、そのように考慮されるべきです。暗号化のベストプラクティスを最も重視して慎重に構築されてきましたが、プライバシーやセキュリティを破るバグがまだ存在する可能性は十分にあります。
Reticulumは、その上に構築された山のようなオープンソースの成果、関わったすべての人々の貢献、そして長年にわたってプロジェクトを支援してきたすべての人々のおかげで存在することができます。助けてくれたすべての人に、本当に感謝しています。
他の多くのモジュールやプロジェクトがReticulumの一部であるか、Reticulumによって使用されています。以下のプロジェクトの作者と貢献者に心から感謝します: