0

データを転送するために Web ソケットを利用するサービスがあります。

ツリー構造をエンコードし、そのツリー構造を websocket 経由で転送する方法が必要です。TLV およびサブ TLV エンコーディングについて読んだことがありますが、これは素晴らしいアイデアのようです。つまり、Radius や LLDP などのプロトコルですでに使用されており、これが機能していることを証明していますが、私の問題は、これらのプロトコルが通常、信頼できるデバイス、つまりスイッチ/ルーター間 (LLDP を除く)。私の問題は、ランダムなサイズ/長さを持ち、静的に定義された構造を持たないサブ TLV を含む TLV を転送することです。サブ TLV が定義されている、つまり

Extended IS Reachability TLV #22 の場合、この tlv には次のような構造があることがわかります。

  /* +-------+-------+-------+-------+-------+-------+-------+-------+
   * |                        Type                                   | 1
   * +---------------------------------------------------------------+
   * |                        Length ID                              | 1
   * +---------------------------------------------------------------+
   * |                        Neighbour ID                           | 7
   * +---------------------------------------------------------------+
   * |                        TE Metric                              | 3
   * +---------------------------------------------------------------+
   * |                        SubTLVs Length                         | 1
   * +---------------------------------------------------------------+
   * |                        SubTLVs value                          | variable
   * +---------------------------------------------------------------+
   * :                                                               :
   */

構造上、7 バイトのネイバー ID、3 バイトの Metric 、1 バイトの SubTLVs Length が事前定義されており、変数部分が来るだけですが、少なくとも高度に定義されていて変更できないビットがいくつかあることを意味します。

今、いくつかの本を読んで(主にH Gredler The Complete IS-IS Routing Protocol 2005 - page 296)、これらのTLVを検証する4つの手法を見つけました。

1) 最大長チェック

2) サブ TLV オーバーラン チェック

3) 離散長チェック

4) TLVコンテンツのパターンチェック

ユーザーからの情報はまったく信用できませんが、他に 2 つの問題があります。つまり、値が a) ランダムな長さ/サイズである TLV を検証する方法です。つまり、値が持つことができる範囲があります。つまり、1 バイト以上です。 700 kb 以下であり、b) その値は暗号化されているため、つまり読み取り可能な形式ではないため、その値に対してパターン チェックを実行できず、パターンを実行できません。

したがって、私の質問は次のとおりです。同じ目標を達成するにはどうすればよいですか。つまり、ツリー構造を他の構造内に送信することです。つまり、キーと値のペアまたは同様のものを送信することです (http はこれを使用していますが、それには理由があるはずです)。

ツリー構造でデータを転送するには、TLV の方法が本当に最適な方法でしょうか。それをバイナリ形式で送信すると、1発で2匹のウサギを攻撃できます。つまり、写真などのファイルを送信するときに、面白いbase64エンコーディングなどを使用する必要はありませんが、本当に欲しいのは、動作するプロトコルですL5-7 (つまり、websocket 経由) を使用すると、シリアル化と逆シリアル化の部分について考える必要なく、受信部分がツリーを識別して再構築できるツリー構造の形式でデータを送信できます。では、TLV の 2 番目に優れた代替手段は何でしょうか?一方の側で Java を使用し、もう一方の側で javasctipt を使用していることを考慮してください。

4

1 に答える 1

0

これはコメントの質問に対する回答であり、元の質問ではありません。

プロトコル エラーをチェックできるオプションがいくつかあります。

  1. while バイトを使用しているためtype(おそらく 256 種類の異なる型はありません)、それtypeが有効であることを確認できます。そうでない場合は、プロトコル エラーが発生しています。

  2. 可変長フィールドの後に、valueフィールドの最初と最後のバイトを含む 2 バイトのフィールドを追加できvalueます。これらが一致しない場合は、プロトコル エラーが発生しています。また

  3. の後に固定サイズの MD5 ハッシュ フィールドを追加valueし、ハッシュ値に対して値の内容を確認できます。データが有効でない場合は、プロトコル エラー (または仲介者攻撃) が発生しています。

オプション 3 のようにハッシュ (チェックサム) を使用すること (私は MD-5 を提案しましたが、どのチェックサム方式も優れている可能性があります) は、データの整合性とプロトコルの適合性の両方を確認するための良い方法です。

最初と最後のバイトのレビュー (オプション 2) を使用すると、プロトコルの適合性のみがチェックされ、データの整合性はチェックされません。

フィールドの検証type(オプション 1) は、プロトコルの整合性を確認する簡単な方法ですが、エラーが発生しやすくなります (ランダム データは有効に見える可能性が高いため)。

受信したデータの長さを実際のデータの長さ (質問のオプション 1 ~ 3) に対してチェックすると、エラーが発生しやすくなり、エラーが発生する可能性があります。これは、余分なデータが次の「フレーム」の一部と見なされる可能性があるためです。そのため、データが欠落しており、それ以上データが受信されていない場合にのみエラーが明らかになります。

編集:オプション2対3に関する詳細

最初と最後のバイトの検証を使用する場合、ランダム データがフレームごとにこの検証テストに合格する可能性は ~ 1:65,536 である必要があります (これは、重要でない単一フレーム データに対してはおそらく十分なテストです)。

また、データ ツリーに多数の「データ フィールド」値が含まれている場合、その数は急速に増加します。(4 データ フィールド ツリーは、ランダム データが提供された場合、1:2^64 の確率でしか有効ではありません。

すなわち

データの長さが 1 バイトで、バイト値が 10 (16 進数で 0A) であるとします。

最初のバイトと最後のバイトの両方が 0A に等しいため、検証フィールドは 0A0A の 2 バイト値でなければなりません。これは、2^16 のオプションの中で唯一許容される値です。

ただし、データの整合性は保証されません。

クライアントが のサービスを使用してサーバーに接続されていると仮定しましょうevilproxy.com...

値が値 100001 の銀行口座番号である場合evilproxy.com、最初と最後の桁が同じ (つまり 199991) である限り、口座番号を任意の値に変更できevilproxy.com、プロトコルのメッセージが残っている間にデータを変更できます。有効。

一方、MD5 ハッシュなどのチェックサムを使用すると、この例でアカウント番号が操作されると、チェックサムの値が変更されることになります。

MD5 は 128 ビット (16 バイト) を使用します。これは、ランダムな検証フィールド値が「的を射る」可能性が 1:2^128 であることを意味します (これは無視できる可能性です)。

一方、evilproxy.comチェックサムに使用するアルゴリズムの「ソルト」を知っている場合、このフィールドはデータとともに更新できます。

したがって、より機密性の高いデータを通信することが予想される場合は、チェックサムを検討することをお勧めします。

于 2015-12-17T03:11:50.137 に答える