1

HTTPSリクエストを処理するために、Lispを使用してWebサーバーを作成しています。私はTLS 1.2に従っており、すでにハンドシェイク プロセスを完了しています。私が選んだ暗号スイートは TLS_RSA_WITH_RC4_128_SHA です。私はすでにclient_write_MAC_secret、server_write_MAC_secret、client_write_key、server_write_keyを計算しました。これらのキーは正しいと思われます。ブラウザからの「Finished」メッセージを復号化し、内部のデータを検証できるからです。また、レコード層の HMAC も検証します。次に、サーバーから「Change Cipher Spec」と「Finished」を送信します。これまでのところ、すべてがうまく機能しているようです。

次に、ブラウザからのメッセージを受け取りました#(23 3 3 1 61 ...)23アプリケーションデータであることを意味します。#(3 3)TLS 1.2 を意味します。#(1 61)これは、長さが 256+61=317 であることを意味します。これは、残っているデータが実際には 317 バイトの長さであるためです。これが私の質問です。「client_write_key」を使用してこれらの 317 バイトを RC4 で復号化すると#(148 104 81 182 67 111 28 201 202 50 207 57 126 209 19 ...)、テキストに変換できないようなデータが得られました。のようなものを手に入れるべきだと思いGET / HTTP/1.1ました。私は何を間違えますか?

ありがとう。

4

1 に答える 1

1

RC4 はストリーム暗号であり、RFC 5246 のセクション 6.2.3.1によれば、「同期ベクトルを使用しないストリーム暗号 (RC4 など) の場合、1 つのレコードの最後からのストリーム暗号の状態は、後続のレコードで単純に使用されます。パケット。"

したがって、復号化する最初のレコードは FINISHED メッセージであり、復号化する最初のアプリケーション データは、FINISHED メッセージを復号化した後に残った RC4 状態である必要があります。

于 2014-05-28T23:20:15.993 に答える