完璧なメッセンジャーのコンセプト



Hi%username%!

この投稿は、オープンソースの安全なP2Pメッセンジャーのアイデアが浮上した3年ほど前に書く価値がありました。 しかし、この間ずっと、私はプロジェクトを1つにカットするのに十分な力があることを望んでいました。 残念ながら、時間が経ちましたが、プロジェクトは実現しませんでした。 私がやることができたのは、詳細なコンセプト、一種のプロトコルを開発し、このメッセンジャーを書く際に役立つあらゆる種類の暗号化部分を埋めることでした。 そして今、ビットメッセージがステージ上にあるとき、BitTorrent Chatの私の考えと非常によく似ていて、すべての人にTelegramに嫌われているとき、列車が出発したことがわかります。

したがって、エントリーしきい値がゼロに近い安全で匿名のP2Pメッセンジャーの概念を提供します。 私も彼の名前を思いつきました:



だから、これは私がそれを思い起こせばParanoIMになり得る方法についての投稿です。



彼らのBitTorrent Chat仲間が彼らのプロジェクトについて共有しているという事実から判断すると、私が持っているポイントのいくつかは彼らと非常に似ています。 それらから始めましょう。



1. DHT



これなしではどこにもありません。 あなたがそれが何であるかわからない場合、Kademliaはあなたにとって空のフレーズです、そしてあなたは関連する記事でそれについて読むべきです。 ここでは、誰がノードであり、テーブル自体に何があるかを説明します。



野田


物理ノード。 起動時に各ノードは新しいECCキーペアを生成し、その識別子は公開キーハッシュになります。 他のノードと情報を交換する場合、公開鍵の交換が行われるため、ノード間の安全な接続を確立することが可能になります。 もちろん、ここではMITM攻撃が可能ですが、ネットワークの構築中にノード自体が互いに暗号化されていない貴重な情報を交換しないため、恐れることはありません。



加入者


または単なるメッセンジャーユーザー。 永続的なECCキーペアを生成する人。その公開キーハッシュは一意の永続的なアドレスになります 。 彼はこのハッシュをすべての人に配布し、あらゆる可能な方法で公開して配布しています。 もちろん、おばあちゃんに512ビットハッシュを指示することはあまり便利ではありませんが、何もする必要はありません。 この不便を回避する方法はありますが、それについては後で詳しく説明します。



最初は、サブスクライバは通常のノードのように動作します。 キーを交換し、隣人のリストを補充します。 しかし、通信を開始するために、彼は次のようにいくつかのノードをランダムに選択し、それらからトンネルを形成します。



  1. これらのノードにコマンドを発行するプロキシノードをさらにいくつか選択します(または選択しません)。
  2. 選択された各ノード自体またはプロキシノードを介して、「これとそのIDのメッセージを受信し、これとそれを送信する」コマンドを送信します。




「そのようなノード」が最後のノードがサブスクライバのノードになることは論理的ですが、残りのノードはそれを知りません。 他のノードが知っているのは、サブスクライバーXの暗号化されたメッセージをノードYに送信する必要があるということだけです。さらに、それをどう処理するかはわかりません。 たぶん彼はそれを渡すか、彼女は自分で解読するでしょう。



選択されたすべてのノードが合意した後、サブスクライバーは、プライベートキー「サブスクライバーID-彼のメッセージを受信するノードのID」によって署名されたペアをDHTで(また、プロキシチェーンを介して、または直接)公開します。 耐障害性を高めるために、複数のホストノードが存在する場合があります。



その後、メッセージを共通キー(ECDH)で暗号化し、その上で受信ノードと共有するキーでメッセージを暗号化することにより、メッセージをサブスクライバに送信できます。 受信ノードはメッセージの一部を復号化し、サブスクライバーに渡し、次のノードとの共通キーで暗号化します。



メッセージがサブスクライバーのノードに到着すると、彼はそのメッセージをどこにも転送せず、解読して自分で読み取ります。 (i2pに類似)



同じことが逆の方向でも機能します。 送信側は、メッセージで、応答を受け入れるノードのリストを示す場合があります。 または、加入者はDHTでリクエストを行うことでこのリストを受け取ることができます。



ご覧のとおり、ここではサブスクライバー間のMITMの可能性が除外されています。 彼らは当初、互いの公開鍵を正確に知っており、他の識別子を知っていません。 攻撃者ができることは、匿名性を明らかにすることだけですが、ノードの数が多いと、攻撃者は非常に困難になります。



2.オフライン投稿



シンプルで、BitMessageのようなストレージに保存できます。これには理想的です。



3.ゼロエントリのしきい値はどこにありますか?



トーラス、i2p、bitMessageなどのあらゆる種類のクールなものの問題は、長時間設定する必要があり、インターフェイスが不器用であり、準備の整っていないユーザーにとって非常に複雑であることです。



私のアイデアは、加入者が彼が慣れているジャバークライアントにローカルに固執し、それ自体がParanoIMネットワークのクライアントになるジャバーサーバーを作成することでした。 キーペア\アドレスの生成は、ローカルで実行される単純なWebインターフェイスで実行できます。



4.長いアドレスはどうですか?



それはお金をもたらすことになっているという意味で、最もおいしい部分でした。 開発者の公開鍵はクライアントに接続されると想定されていました。 もちろん、これはオープンソースであり、それを置き換えたい人は誰でも、大部分のユーザーはまだ公式クライアントを使用するでしょう。



そのため、通常の人間が読める名前/ユーザーを販売し、それらを加入者の公開鍵のハッシュにバインドすることが可能です。 そして、秘密鍵でこれらのペアのリストに署名し、すべてのノードに更新を送信します。 もちろん、これらのサブスクライバーに通常のハッシュで連絡しても害はありません。



しかし、NameCoinのようなより一般的なもので対処できます。 そうすれば、中央集権化はまったく必要ありません。



それはすべてsobsnoであり、それが私のユートピアIMを見たいと思う方法であり、BitTorrent Chatがそれに非常に似ていることを願っています。



All Articles