安全でない可能性のあるWifiネットワークで、webAppを使用してモバイルデバイス(クライアント)とホームデバイス(サーバー)の間の接続を保護しようとしています。
通信は非同期であり、「 リプレイアタック "」を防止しようとしています。
チャレンジレスポンスについて考えていましたが、「チャレンジを要求し、チャレンジを受信し、チャレンジを解決してメッセージを送信する」のオーバーヘッドは、パフォーマンスの問題です。
だから私はある種の [〜#〜] tan [〜#〜] オンラインベーキングのような本のアプローチを使うことを考えていました:
最初に、クライアントは保存する一連のチャレンジを要求します。サーバーはそれらのチャレンジを保存し、すでに使用されているチャレンジの数を追跡します。
N個のチャレンジだけが残っている場合、サーバーは新しいチャレンジを作成し、次の応答とともにそれらをクライアントに送信します。このように、クライアントはほとんどの場合、すべてのリクエストの前に最初にチャレンジを要求するオーバーヘッドなしに、十分なチャレンジを持っている必要があります。
例:
それからそれはより簡単になります
クライアントの課題が少ない場合
このような概念はすでにありますか?そうでない場合、これは「自分の暗号を焼く」のように聞こえますか、それとも合法に聞こえますか?または、httpのオーバーヘッドをあまりかけずにこれを行うためのより良い方法はありますか?
これを行うためのより良い方法があるかどうかについてのあなたの質問によく答えて、私が以前に使用した少し単純な解決策がその仕事に任されているのではないかと思います。
チャレンジの事前定義されたリストを生成して送信するのではなく、クライアントとサーバーにそれぞれ、ヘッダーで渡すハッシュに予測可能な増分値を追加させます。クライアントとサーバーの両方が、セッションの呼び出し/応答の数をカウントし、重複した(再利用された)ハッシュで受信したものを拒否できます。増分値は、カウントのように単純な場合もあれば、特に妄想を感じている場合は、カウントに対して実行される単純な数学関数の場合もあります。
次のようになります。
今、行われた呼び出しごとに:
そして繰り返します。
ヘッダーに再利用されたハッシュを含む要求/応答が到着した場合、増分値は順序が狂い、クライアント/サーバーはそれを拒否できます。また、セッションの課題のリストを生成、送信、および維持することについて心配する必要はありません。
ここでの欠点は、複数の呼び出しを行うことによって引き起こされる問題と、ネットワークの問題またはアプリケーションの設計/要件のいずれかが原因でそれらが順序どおりにならないことです。これを回避する方法には、クライアントに中央ポイントを追加して、セッションのすべての要求と応答をマーシャリング/キューに入れるか、クライアントアプリケーション内のスレッドまたは会話ごとに個別のセッションを作成することが含まれます。これは開発中の追加の考慮事項かもしれませんが、トラフィックを最小限に抑えるという要件が十分に重要である場合は、努力する価値があるかもしれません。
コメントや考えは大歓迎です。