* 仕様書

[REFS[
- [1] '''[CITE@en[RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2]] ([TIME[2015-02-19 08:58:15 +09:00]] 版) <http://tools.ietf.org/html/rfc5246#section-7.1>'''
- [9] [CITE@en[RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2]] ([TIME[2015-02-19 08:58:15 +09:00]] 版) <http://tools.ietf.org/html/rfc5246#section-7.3>
]REFS]

* 意味

[2] [[change cipher spec protocol]] は、 [RUBYB[cipher 戦略]@en[ciphering stragegy]]の遷移を伝えるものです [SRC[>>1]]。

* プロトコル

[3] [DFN[[CODE[[[ChangeCipherSpec]]]]]] [[メッセージ]]は、[RUBYB[型]@en[type]]として値
1 ([CODE[[[change_cipher_spec]]]]) のみから構成されます [SRC[>>1]]。

[FIG(list members)[
[FIGCAPTION[
[CODE[[[ChangeCipherSpec]]]]
]FIGCAPTION]
:[CODE[[[type]]]]:[CODE[[[change_cipher_spec]]]] ([CODE[[[1]]]])
]FIG]

[5] 本[[メッセージ]]を送信した者は、送信後直ちに[[記録層]]において
[[write pending state]] を [[write current state]] に複製します [SRC[>>1]]。

[4] 本[[メッセージ]]を受信した者は、受信後直ちに[[記録層]]において
[[read pending state]] を [[read current state]] に複製します [SRC[>>1]]。
その後 [CODE[[[ChangeCipherSpec]]]] [[メッセージ]]を送信者に対して送ります。

;; [6] ですから、最初の [CODE[[[ChangeCipherSpec]]]] は元の[[接続状態]]に従い暗号化・圧縮されて送信され、
その返信となる [CODE[[[ChangeCipherSpec]]]] は pending から複製された新しい[[接続状態]]に従い暗号化・圧縮されて送信されることになります。

[7] [CODE[[[ChangeCipherSpec]]]] は、 [[handshake]] において[[セキュリティー引数]]を合意した後
[CODE[[[Finished]]]] が送信されたと検証する前に送信します [SRC[>>1]]。

* 文脈

[8] [CODE[[[ChangeCipherSpec]]]] は [[TLS Handshake Protocol]] の最後、
[CODE[[[Finish]]]] の直前に送受信されます。

;; [10] 実質的に [[TLS Handshake Protocol]] の一部を構成しますが、
独自の[[プロトコル内容型]]を割り当てられているのは、[[パイプライン]]の
[[stall]] を防ぐため [SRC[>>9]] です。
