チャットプロトコル (2) 接続手順

一応それらしいものはできてきています。
ただ、作った後で悩み始めたというどうしようもない状況。

悩みどころ1

  • 接続開始手順

接続開始は、SYNを受けてハーオープンな状態を保持する仕組みを作ると、syn floodでDoSされそうなんですよね……。アプリ側に任すのもありですが、面倒なのでこっちでやろうと思い、今のところCookieを使ってみてます。

Client         |   Server
--------------------------------
Cookieくれ ->
                  <-ほいCookie (Cookieを送ったことは覚えない)
Cookie接続 ->
                  (Cookieチェック)
                  <-おk 
(接続確立)

Cookieは、

 -------------------------------------------------------------------
| セキュアな乱数 | クライアントのIPアドレス|ポート番号 | タイマー値 |
 -------------------------------------------------------------------
 54bytes           4bytes                    2bytes      4bytes 

のようなデータを、サーバー側でもっているCookie用のAES鍵(128-bit)でCBCモードの暗号をかけて返します(4-block)。接続要求は、このデータをそのまま受け取ったと仮定して復号後にクライアントソースアドレスとタイマー値をチェックすることで、ハーフオープン状態を無くせるのではないかと考えました。
暗号の強度がちょっと疑問なので、ツッコミあればお願いします。
というか、接続時に暗号は負荷が大きいですかね……。

とりあえず確認したいのは、

  • 接続相手がソースアドレスを偽装していないか

ということだけなんですけど。


チャットとは、超関係領域にハマリソウデス。