2013-01-01から1年間の記事一覧

zlibとgzipの圧縮アーカイバーを作成。 http://www.zlib.net/ からzlib source codeをダウンロード(zipファイル)して解凍します。この中のwin32のMakefile.mscをビルドします。 zlib.libが作成されます。 Menu->Microsoft VisualStudio2012->VisualStudio To…

CLIENT_KEY_EXCHANGEがとんできた場所でencrypted_pre_master_secretをRSA解凍してpre_master_secretを取得します。 RSAの秘密鍵(PrivateKey)はkey.derのバイナリデータそのままです。 pre_master_secretから各種キーを取得します。 MSのCryptApiを使用。RSA…

クライアント(IE)からの"GET /index.html HTML/1.1..."はなぜか"G"と"ET.."に分かれ暗号化されています。 最初を復号するとG(0x47)+MAC+PADDINGというPlaintextになります。"G"という文字とclient_macからサーバ側で計算したMACが、d4 90... と一致するか検…

HTTPSの実装 TSL 5

C#でPRFの実装しました。データ元はwirsharのSSL debug fileです。 pre master secretからmaster_secretさらにmac,key,ivを取り出せます。 PRFの詳しい説明はここにあります。 from wireshark debug file. ssl_generate_keyring_material:PRF(pre_master_sec…

keyblockからは以下のようにしてキーを取得します。サーバ用とクライント用に分かれてます。 key+ivは共通鍵です。macはデータの検証で使用します。ivが曲者でここで取得したivデータは初回しか使えません。 毎回、ivは最終ブロックデータの先頭へ変更します…

TSLではPRFという名のSHA1とMD5で構成された関数からキーなどを作成します。そして、ラベルを4種類使用します。 "master secret" : pre_master_secretからmaster secretという名のデータを作成 "key expansion" : master_secretからkeyblock(CLENT_MAC+SERV…

HTTPSのシーケンシャルは以下です。この辺の説明は省きます。 [**CLIENT**] [**SERVER**] CT_HANDSHAKE -----------------------------> CLIENT_HELLO (client_randam) SERVER_HELLO (serevr_randam) CERTIFICATE (x509) SERVER_HELLO_DONE CT_HANDSHAKE ---…

C++でHTTPSサーバを実際に作成しています。実装に関しては情報が少ないため、かなり難しいです。 しかし、なんとか目途がたったので役に立つ情報を出してみたいと思います。 なお、使用する暗号形式はTLS_RSA_WITH_AES128_CBC_SHAに限定します。TSL1.0はSSL3…

元ネタはhttp://www.atmarkit.co.jp/ait/articles/1303/19/news099.html です。 上記サンプルのClientはJavascript+IEですが、C#で作成すると下のようになり、無事サーバのメッセージをキャッチできました。 WebSocketの使い道ですが、チャットぐらいしか思…