-
Notifications
You must be signed in to change notification settings - Fork 4
/
752.txt
88 lines (73 loc) · 4.55 KB
/
752.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[1] [DFN[[[TLS Record Protocol]]]] は、 [[TLS]] の下位側の[[プロトコル階層]]です。
* 仕様書
[REFS[
- [2] [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-6>
]REFS]
* プロトコル
[3] [[TLS Record Protocol]] を使って規定される[[プロトコル]]はいくつかあり、
その区別を表す値を[RUBYB[[[記録内容型]]]@en[record content type]]といいます [SRC[>>2]]。
これには次のものがある他、新たなものを [[IANA登録簿]]に登録できます [SRC[>>2]]。
[FIG(short list)[
- [[handshake protocol]]
- [[alert protocol]]
- [[change cipher spec protocol]]
- [[application data protocol]]
]FIG]
[4] [[TLS Record Protocol]] の[RUBYB[運用環境]@en[operating environment]]のことを
[RUBYB[[[TLS接続状態]]]@en[TLS connection state]]といい、
次のもので構成されます [SRC[>>2]]。
[FIG(list members)[
:[RUBYB[[[セキュリティー引数]]]@en[security parameter]] ([CODE[[[SecurityParameters]]]]):
[FIG(list members)[
:[RUBYB[[[接続端]]]@en[connection end]] ([CODE[[[entity]]]]):自身が[[クライアント]]か[[鯖]]か。
:[[PRFアルゴリズム]] ([CODE[[[prf_algorithm]]]]):[[master secret]] から[[鍵]]を生成するのに使う[[アルゴリズム]]。
:[[bulk encryption algorithm]]:[[bulk encryption]] に使う[[アルゴリズム]]
([CODE[[[bulk_cipher_algorithm]]]])。
鍵サイズ ([CODE[[[enc_key_length]]]])、
ブロック・ストリーム・[[AEAD]] のいずれであるか ([CODE[[[cipher_type]]]])、
[[cipher]] のブロック長 ([CODE[[[block_length]]]])、
明示的および暗示的な初期化ベクトル ([[nonce]]) ([CODE[[[fixed_iv_length]]]], [CODE[[[record_iv_length]]]])。
:[[MACアルゴリズム]]:[[メッセージ認証]]に使う[[アルゴリズム]] ([CODE[[[mac_algorithm]]]])。
アルゴリズムが返す値の長さ ([CODE[[[mac_length]]]])。
鍵の長さ ([CODE[[[mac_key_length]]]])。
:[[圧縮アルゴリズム]] ([CODE[[[compression_algorithm]]]]):[[データ圧縮]]に使う[[アルゴリズム]]。
:[[master secret]] ([CODE[[[master_secret]]]]):48バイト秘密。
:[[client random]] ([CODE[[[client_random]]]]):[[クライアント]]による32バイト値。
:[[server random]] ([CODE[[[server_random]]]]):[[鯖]]による32バイト値。
]FIG]
:[[client write MAC key]]:
:[[server write MAC key]]:
:[[client write encryption key]]:
:[[server write encryption key]]:
:[[client write IV]]:
:[[server write IV]]:
:[[圧縮状態]]:
:[[cipher state]]:
:[[MAC鍵]]:
:[[シーケンス番号]]:
]FIG]
[5] [[接続状態]]は、現在の読み取り用状態、書き込み用状態と、
pending の読み取り用状態、書き込み用状態の4つがあります [SRC[>>2]]。
[8] [RUBYB[[[記録]]]@en[record]]は、現在の読み取り用状態と書き込み用状態に従い処理されます
[SRC[>>2]]。
[6] 現在の接続状態の初期値は、暗号化、圧縮、MAC のいずれも使用しないものです [SRC[>>2]]。
[7] [[TLS Handshake Protocol]] は pending [[接続状態]]の[[セキュリティー引数]]を設定します。
[[ChangeCipherSpec]] は pending [[接続状態]]を現在の[[接続状態]]とします。 [SRC[>>2]]
[9] [[記録層]]では、 2[SUP[14]] [[バイト]][[以下]]のデータに分割して
[CODE[[[TLSPlaintext]]]] として扱います。[[クライアントメッセージ]]の境界は意味を持たず、
同じ[[記録内容型]]の[[クライアントメッセージ]]を1つの [CODE[[[TLSPlaintext]]]]
に結合したり、分解したりできます。 [SRC[>>2]]
[11] [CODE[[[TLSPlaintext]]]] に[[圧縮アルゴリズム]]を適用した結果が
[CODE[[[TLSCompressed]]]] です。 (ここでいう[[圧縮アルゴリズム]]には、無変換の
「[[null]]」も含まれます。)
[12] [CODE[[[TLSCompressed]]]] に [[MACアルゴリズム]]と[[暗号化アルゴリズム]]を適用した結果が
[CODE[[[TLSCiphertext]]]] です。
[10] [CODE[[[TLSPlaintext]]]] や [CODE[[[TLSCompressed]]]] や
[CODE[[[TLSCiphertext]]]] は、次のもので構成されます [SRC[>>2]]。
[FIG(list members)[
:[CODE[[[type]]]]:含まれているデータを処理する上位層プロトコル ([[記録内容型]])。
:[CODE[[[version]]]]:プロトコルの版。 3.3 なら [[TLS/1.2]], 3.2 なら [[TLS/1.1]],
3.1 なら [[TLS/1.0]]。
:[CODE[[[length]]]]:データの長さ。
:[CODE[[[fragment]]]]:データ。
]FIG]