web-dev-qa-db-ja.com

UDPソケットを介してユーザーを認証する

だから私は基本的なソケットを持っていて、IPアドレス以外のユーザーに関する情報を提供していないとしましょう、私の選択肢は何ですか(可能な限り最適な方法でユーザーを認証したい場合)

パケットをハッシュする小さなキーを持っていると思いましたが、これは非常に高速にハッシュ解除できると思いますが(ただし)、その初期キーを安全に送信する方法がわかりません。 (多分私はHTTPSリクエストのために持っている二次SSLサーバーと一緒に)

編集:詳細、ユーザーは最初にHTTPSサーバーで認証するため、クライアントとサーバー間でキーを実際に(SSLで)安全に共有できます

考え?

2
Whiteclaws
  1. Httpsセッションでクライアントにランダムキー(長期間、または一時的)を提供します。データグラムにユーザーIDを含めます(まだ持っていない場合)。 HMACアルゴリズムでデータグラムに署名し、サーバー上のデータグラムHMACを確認します。

  2. DTLSを使用します。

2

すでに共有シークレットに同意している場合は、署名ではなく暗号化にそれを使用して機密性の追加の利点を得るには、それほど大きくはありません。 UDPを使用する際の注意点は、信頼性の高い配信がない場合、データグラム全体でCBCまたはCFBを使用できないことです(静的初期化ベクトルのデータグラムごとの摂動を使用して、各データグラムに新しいIVを送信するオーバーヘッドを回避できます)。 。

小さなキーは、簡単に元に戻せるキーです。

Udpを超えるsslをカバーするrfcがあります(詳細は調べません。スロットルレートに注意する必要があると思います)。 udp上の伝送損失に対処する一般的なアプローチは、RAIDがディスクで行うように、複数のパケットにわたってエラー訂正を使用することです。

制御メカニズムとしてtcpチャネルを介してsslを使用することは賢明なアプローチのようです(ただし、双方向通信はhttpには適していません)。

最も重要な質問は、本当にudpを使用する必要があるかどうかです。

0
symcbean