
Toxについてはすでに多くの人が聞いたことがあるでしょう。Skype を置き換えるメッセンジャーであり 、独自の同等物と同じ機能を提供します。すべての暗号化、スヌーピングの欠如、広告の欠如、分散化などの便利な機能を提供します。
Toxは、ほとんどのソフトウェアと同様に、現在コアとシェルに分割されており、通常、コアは一部の人々によって開発され、シェルは完全に異なっており、新しい機能の開発と実装の速度は両方の部分で常に同じではありません(カーネル/シェル)
前回の投稿では、HabrオーディエンスでToxをテストしました
しかし、その瞬間から変更が行われました。その一部はすでに「触れる」ことができ、一部はシェルでの実装のみを読んで支援することができます。
匿名性
友人を追加することによる識別に対する保護
ToxはDHTネットワークに基づいて構築されたメッセンジャーです。つまり、あなたとあなたのIPアドレスは全世界に公開されています。
Toxの世界では、クライアントは最初の開始時に生成されたキーに基づいてお互いを識別します。直接の通信の問題ID = IPアドレス=身体の人
この問題を解決するために、 前の投稿で言及したオニオンルーティングが使用されます。
その動作の原理は次のとおりです。
アリスは、将来のコミュニケーションのためにボブを友人として追加したいと考えています。
1)Toxネットワークで3つのランダムピアを選択し、オニオンルーティングのルールに従って自分自身をアナウンスします(最初のノードはAliceとIDのアドレスを知っており、2番目のノードは最初のノードのアドレスと3番目のノードのAlice IDのみを知っており、2番目のノードのIDとIPアドレスのみを知っています) (ボブはクライアントを起動するときに同じことを行い、3つのノードのシーケンスを選択します)
2)彼女は、ボブの存在を知っているDHTノードを検索し、友人の追加に関するメッセージを送信します。
3)認可リクエストを受信した後、Beanを知っているピアのグループに送信され、認可リクエストはボブによって選択された次のランダムな3つのノードを通過します。
4)認証を受け取った後、新しいランダムノードを使用してプロセスを繰り返し、友達に追加することの確認を送信します
5)Bob AliceのIPアドレスがすでに表示されている直接接続が確立され、その逆も同様です。
データ蓄積に基づくユーザー認証保護
通常、DHTネットワーク(Bittorrent / Kademlia)では、ネットワークに最初に接続したときに、IPアドレスが変わっても変わらないランダムな識別子が生成されます。
明らかに、これは安全なメッセンジャーのフレームワーク内の問題です。
次の方法で解決されます。
1)最初の起動時に、長時間作用型ID /キーが生成されます
2)プライマリキーに基づいて、IPアドレスが変更されるたびに、新しいID /キーが生成されます(ランダムな期間後にも変更されます)
しかし、DHTの古いキーで彼を見つけることができない場合、アリスはどのようにしてボブを見つけるのでしょうか?
アリスとボブは友人であり、一時キーを生成し、DHTネットワークに接続します。
ボブはランダムな3つのノード(A、B、C)を見つけます
ボブは自分に最も近いノードを見つけます(D)
ボブはオニオンルーティングを作成します(パケットはノードA、B、Cを通過し、ノードDはパケットの出力ポイントとして機能します)
キーとping_idアドレスの代わりに、すべてゼロを通知します。
ボブは、実際の公開キーに基づいて自分に最も近いノードを見つけるまで、チェーンの構築を続けます。
そのようなノードが見つかるとすぐに、正しいping_idデータ(彼自身のものではなく、ノードA、B、Cのいずれか)とともに要求が彼に送信されます-このノードは、ボブをさらに通知し、Dノードとして機能するネットワークでそれを担当する最終ノードになります
ボブは、ネットワークと対話するために、このノードに彼に関する情報を保存するように要求します。
一方、アリスはボブに最も近いノードを探し、一時キーとIDを使用します。ping_id= 0の形式で応答を受信するとすぐに、このノードにデータを送信し、それをボブに渡して、DHTネットワークで一時IDを送信します。
ボブは一時的なIDに基づいてオンラインを見つけ、直接接続が確立されます。
したがって、BeanとAliceのIPアドレスを友人として追加するまで見つけることはできないため、TOX IDとDHT IDを(友人として追加せずに)実際のIPアドレスに関連付けることはできません。
PS当然、各段階でパケットは暗号化され、改ざんから保護されています。
NAT 管理者とファイアウォールとの戦い
覚えているなら、Skypeはスーパーノードと標準ポートを使用してファイアウォールをバイパスします。TOXもこれを行うことができます。
-ポート80/443を使用
-スーパーノードを見つけるか、スーパーノードになる
-環境に応じてUDP / TCPを使用する
Toxは主にUDP(NATのパンチ用)を使用しますが、UDPトラフィックがセキュリティ設定によってブロックされている場合、TOXは次のことを行います。
1)アリスは、TCP接続のみを許可する接続でToxを使用し、一時公開キーを生成し、初期化のためにノードに接続します。
2)初期化ノードからネットワークに関するデータを受信した後、スーパーノードであるいくつかのランダムノードを選択します
3)彼女は、TCPスーパーノード経由のオニオンルーティングを使用して、承認リクエストを送信したり、一時的な公開キーを使用してオンラインステータスについて連絡先リストに通知したりできます。
4)Bobは、タマネギルーティングを介してAliceからパケットを受信します。Aliceは、一時的な公開キーを使用してDHT経由で接続しているノードを通知します。
5)ボブはアリスと同じノードに接続します。
6)この接続は、メッセージとA / Vトラフィックの両方を送信するために使用されます
7)ノードが切断された場合、BobとAliceは両方とも接続されている他のノードに移動します。
スーパーノードは、外部IPアドレスを持ち、Toxポートが転送されるノードです。
Toxは他に何を学びましたか?
-DHTネットワークの高速化
-大量チャット(暗号化なし、メタ情報の同期なしの初期実装)
-オーディオ/ビデオ伝送(完全に実装され、監査段階で)
-ファイル転送
-IPV6サポート(グループチャットを除くすべてテスト済み)
メインについて
上記のすべてはシェルではなくカーネルに実装されています。つまり、これまでのところ、エンドクライアントは多くの有用な機能(たとえば、オーディオ/ビデオまたはファイルの転送)を使用できません(すべてのクライアントがまだできるわけではありません)
一方、主なことは、カーネルに関数を実装することです;シェルの作成は、カーネルを標準化するよりもはるかに簡単です。
さらに、ToxプロジェクトはGoogle Summer of Codeに参加しています。つまり、新しい開発者はすぐにプロジェクトに参加することになります。
いいね
-Androidクライアントは、 github.com / Astonex / Antoxを積極的に開発しています
-Windowsの場合、最大3つのクライアントがあります
-現在、 すべての (Linuxを含む)プラットフォームについて、 wiki.tox.im / binariesパッケージに既製のアセンブリがあります。