diff options
Diffstat (limited to 'doc/rfc/rfc9367.txt')
-rw-r--r-- | doc/rfc/rfc9367.txt | 4052 |
1 files changed, 4052 insertions, 0 deletions
diff --git a/doc/rfc/rfc9367.txt b/doc/rfc/rfc9367.txt new file mode 100644 index 0000000..3af49bd --- /dev/null +++ b/doc/rfc/rfc9367.txt @@ -0,0 +1,4052 @@ + + + + +Independent Submission S. Smyshlyaev, Ed. +Request for Comments: 9367 E. Alekseev +Category: Informational E. Griboedova +ISSN: 2070-1721 A. Babueva + L. Nikiforova + CryptoPro + February 2023 + + + GOST Cipher Suites for Transport Layer Security (TLS) Protocol + Version 1.3 + +Abstract + + The purpose of this document is to make the Russian cryptographic + standards available to the Internet community for their + implementation in the Transport Layer Security (TLS) Protocol Version + 1.3. + + This document defines the cipher suites, signature schemes, and key + exchange mechanisms for using Russian cryptographic standards, called + GOST algorithms, with TLS Version 1.3. Additionally, this document + specifies a profile of TLS 1.3 with GOST algorithms to facilitate + interoperable implementations. The IETF has not endorsed the cipher + suites, signature schemes, or key exchange mechanisms described in + this document. + +Status of This Memo + + This document is not an Internet Standards Track specification; it is + published for informational purposes. + + This is a contribution to the RFC Series, independently of any other + RFC stream. The RFC Editor has chosen to publish this document at + its discretion and makes no statement about its value for + implementation or deployment. Documents approved for publication by + the RFC Editor are not candidates for any level of Internet Standard; + see Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + https://www.rfc-editor.org/info/rfc9367. + +Copyright Notice + + Copyright (c) 2023 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. + +Table of Contents + + 1. Introduction + 2. Conventions Used in This Document + 3. Basic Terms and Definitions + 4. Cipher Suite Definition + 4.1. Record Protection Algorithm + 4.1.1. AEAD Algorithm + 4.1.2. TLSTREE + 4.1.3. SNMAX Parameter + 4.2. Hash Algorithm + 5. Signature Scheme Definition + 5.1. Signature Algorithm + 5.2. Elliptic Curve + 5.3. SIGN Function + 6. Key Exchange and Authentication + 6.1. Key Exchange + 6.1.1. ECDHE Shared Secret Calculation + 6.1.1.1. ECDHE Shared Secret Calculation on the Client Side + 6.1.1.2. ECDHE Shared Secret Calculation on Server Side + 6.1.1.3. Public Ephemeral Key Representation + 6.1.2. Values for the TLS Supported Groups Registry + 6.2. Authentication + 6.3. Handshake Messages + 6.3.1. Hello Messages + 6.3.2. CertificateRequest + 6.3.3. Certificate + 6.3.4. CertificateVerify + 7. IANA Considerations + 8. Historical Considerations + 9. Security Considerations + 10. References + 10.1. Normative References + 10.2. Informative References + Appendix A. Test Examples + A.1. Example 1 + A.1.1. Test Case + A.1.2. Test Examples + A.2. Example 2 + A.2.1. Test Case + A.2.2. Test Examples + Contributors + Authors' Addresses + +1. Introduction + + This document defines four new cipher suites (the TLS13_GOST cipher + suites) and seven new signature schemes (the TLS13_GOST signature + schemes) for the Transport Layer Security (TLS) Protocol Version 1.3 + that are based on Russian cryptographic standards GOST R 34.12-2015 + [RFC7801], GOST R 34.11-2012 [RFC6986], and GOST R 34.10-2012 + [RFC7091]. + + The TLS13_GOST cipher suites (see Section 4) have the following + values: + + TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L = {0xC1, 0x03} + + TLS_GOSTR341112_256_WITH_MAGMA_MGM_L = {0xC1, 0x04} + + TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S = {0xC1, 0x05} + + TLS_GOSTR341112_256_WITH_MAGMA_MGM_S = {0xC1, 0x06} + + Each TLS13_GOST cipher suite specifies a pair (record protection + algorithm, hash algorithm) such that: + + * The record protection algorithm is the Authenticated Encryption + with Associated Data (AEAD) algorithm (see Section 4.1.1) based on + the GOST R 34.12-2015 block cipher [RFC7801] in the Multilinear + Galois Mode (MGM) [RFC9058] and the external re-keying approach + (see [RFC8645]) intended for increasing the lifetime of symmetric + keys used to protect records. + + * The hash algorithm is the GOST R 34.11-2012 algorithm [RFC6986]. + + Note: The TLS13_GOST cipher suites are divided into two types: the + "_S" (strong) cipher suites and the "_L" (light) cipher suites + (depending on the key lifetime limitations, see Sections 4.1.2 and + 4.1.3). + + The TLS13_GOST signature schemes have the following values: + + gostr34102012_256a = 0x0709 + + gostr34102012_256b = 0x070A + + gostr34102012_256c = 0x070B + + gostr34102012_256d = 0x070C + + gostr34102012_512a = 0x070D + + gostr34102012_512b = 0x070E + + gostr34102012_512c = 0x070F + + Each TLS13_GOST signature scheme specifies a pair (signature + algorithm, elliptic curve) such that: + + * The signature algorithm is the GOST R 34.10-2012 algorithm + [RFC7091]. + + * The elliptic curve is one of the curves defined in Section 5.2. + + This document also specifies the key exchange mechanism with GOST + algorithms for the TLS 1.3 protocol (see Section 6.1). + + Additionally, this document specifies a TLS13_GOST profile of the TLS + 1.3 protocol with GOST algorithms so that implementers can produce + interoperable implementations. It uses TLS13_GOST cipher suites, + TLS13_GOST signature schemes, and key exchange mechanisms that are + defined in this document. + +2. Conventions Used in This Document + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +3. Basic Terms and Definitions + + This document follows the terminology from [RFC8446BIS] for "main + secret". + + This document uses the following terms and definitions for the sets + and operations on the elements of these sets: + + B_t The set of byte strings of length t, t >= 0; for t = + 0, the B_t set consists of a single empty string of + zero length. If A is an element in B_t, then A = + (a_1, a_2, ... , a_t), where a_1, a_2, ... , a_t are + in {0, ... , 255}. + + B* The set of all byte strings of a finite length + (hereinafter referred to as strings) including the + empty string. + + A[i..j] The string A[i..j] = (a_i, a_{i+1}, ... , a_j) in + B_{j-i+1}, where A = (a_1, a_2, ... , a_t) in B_t and + 1<=i<=j<=t. + + A[i] The integer a_i in {0, ... , 255}, where A = (a_1, + a_2, ... , a_t) in B_t and 1<=i<=t. + + |A| The length of the byte string A in bytes. + + A | C The concatenation of strings A and C both belonging + to B*; i.e., a string in B_{|A|+|C|}, where the left + substring in B_|A| is equal to A and the right + substring in B_|C| is equal to C. + + i & j Bitwise AND of integers i and j. + + STR_t The transformation that maps an integer i = 256^(t-1) + * i_1 + ... + 256 * i_{t-1} + i_t into the byte + string STR_t(i) = (i_1, ... , i_t) in B_t (the + interpretation of the integer as a byte string in + big-endian format). + + str_t The transformation that maps an integer i = 256^(t-1) + * i_t + ... + 256 * i_2 + i_1 into the byte string + str_t(i) = (i_1, ... , i_t) in B_t (the + interpretation of the integer as a byte string in + little-endian format). + + k The length of the block cipher key in bytes. + + n The length of the block cipher block in bytes. + + IVlen The length of the initialization vector in bytes. + + S The length of the authentication tag in bytes. + + E_i The elliptic curve indicated by the client in + "supported_groups" extension. + + O_i The zero point of the elliptic curve E_i. + + m_i The order of the group of points belonging to the + elliptic curve E_i. + + q_i The order of the cyclic subgroup of the group of + points belonging to the elliptic curve E_i. + + h_i The cofactor of the cyclic subgroup that is equal to + m_i / q_i. + + Q_sign The public key stored in the endpoint's certificate. + + d_sign The private key that corresponds to the Q_sign key. + + P_i The point of the elliptic curve E_i of the order q_i. + + (d_C^i, Q_C^i) The client's ephemeral key pair that consists of the + private key and the public key corresponding to the + elliptic curve E_i. + + (d_S^i, Q_S^i) The server's ephemeral key pair that consists of the + private key and the public key corresponding to the + elliptic curve E_i. + +4. Cipher Suite Definition + + This section defines the following four TLS13_GOST cipher suites: + + * CipherSuite TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L = {0xC1, + 0x03}; + + * CipherSuite TLS_GOSTR341112_256_WITH_MAGMA_MGM_L = {0xC1, 0x04}; + + * CipherSuite TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S = {0xC1, + 0x05}; + + * CipherSuite TLS_GOSTR341112_256_WITH_MAGMA_MGM_S = {0xC1, 0x06}. + + Each cipher suite specifies a pair consisting of a record protection + algorithm (see Section 4.1) and a hash algorithm (Section 4.2). + +4.1. Record Protection Algorithm + + In accordance with Section 5.2 of [RFC8446], the record protection + algorithm translates a TLSPlaintext structure into a TLSCiphertext + structure. If the TLS13_GOST cipher suite is negotiated, the + encrypted_record field of the TLSCiphertext structure MUST be set to + the AEADEncrypted value computed as follows: + + AEADEncrypted = AEAD-Encrypt(sender_record_write_key, nonce, + additional_data, plaintext), + + where + + * the AEAD-Encrypt function is defined in Section 4.1.1; + + * the sender_record_write_key is a key derived from sender_write_key + (see Section 7.3 of [RFC8446]) using the TLSTREE function defined + in Section 4.1.2 and sequence number seqnum as follows: + + sender_record_write_key = TLSTREE(sender_write_key, seqnum); + + * the nonce is a value derived from sequence number seqnum and + sender_write_iv (see Section 7.3 of [RFC8446]) in accordance with + Section 5.3 of [RFC8446]; + + * the additional_data value is a record header that is generated in + accordance with Section 5.2 of [RFC8446]; + + * the plaintext value is the TLSInnerPlaintext structure encoded in + accordance with Section 5.2 of [RFC8446]. + + Note 1: The AEAD-Encrypt function is exactly the same as the AEAD- + Encrypt function defined in [RFC8446], such that the key (the first + argument) is calculated from sender_write_key and sequence number + seqnum for each message separately to support the external re-keying + approach according to [RFC8645]. + + Note 2: Sequence number is a value in the range 0-SNMAX, where the + SNMAX value is defined in Section 4.1.3. The SNMAX parameter is + specified by a particular TLS13_GOST cipher suite to limit an amount + of data that can be encrypted under the same traffic key material + (sender_write_key, sender_write_iv). + + The record deprotection algorithm reverses the process of the record + protection. In order to decrypt and verify a protected record with + sequence number seqnum, the algorithm takes sender_record_write_key + as an input, which is derived from sender_write_key, nonce, + additional_data, and the AEADEncrypted value. The algorithm outputs + the res value that is either plaintext or an error indicating that + the decryption failed. If a TLS13_GOST cipher suite is negotiated, + the res value MUST be computed as follows: + + res = AEAD-Decrypt(sender_record_write_key, nonce, + additional_data, AEADEncrypted), + + where the AEAD-Decrypt function is as defined in Section 4.1.1. + + Note: The AEAD-Decrypt function is exactly the same as the AEAD- + Decrypt function defined in [RFC8446], such that the key (the first + argument) is calculated from sender_write_key and sequence number + seqnum for each message separately to support the external re-keying + approach according to [RFC8645]. + +4.1.1. AEAD Algorithm + + The AEAD-Encrypt and AEAD-Decrypt functions are defined as follows: + + +-------------------------------------------------------------------+ + | AEAD-Encrypt(K, nonce, A, P) | + |-------------------------------------------------------------------| + | Input: | + | - encryption key K in B_k, | + | - unique vector nonce in B_IVlen, | + | - additional authenticated data A in B_r, r >= 0, | + | - plaintext P in B_t, t >= 0. | + | Output: | + | - ciphertext C in B_{|P|}, | + | - authentication tag T in B_S. | + |-------------------------------------------------------------------| + | 1. MGMnonce = STR_1(nonce[1] & 0x7f) | nonce[2..IVlen]; | + | 2. (MGMnonce, A, C, T) = MGM-Encrypt(K, MGMnonce, A, P); | + | 3. Return C | T. | + +-------------------------------------------------------------------+ + + +-------------------------------------------------------------------+ + | AEAD-Decrypt(K, nonce, A, C | T) | + |-------------------------------------------------------------------| + | Input: | + | - encryption key K in B_k, | + | - unique vector nonce in B_IVlen, | + | - additional authenticated data A in B_r, r >= 0, | + | - ciphertext C in B_t, t >= 0, | + | - authentication tag T in B_S. | + | Output: | + | - plaintext P in B_{|C|} or FAIL. | + |-------------------------------------------------------------------| + | 1. MGMnonce = STR_1(nonce[1] & 0x7f) | nonce[2..IVlen]; | + | 2. res' = MGM-Decrypt(K, MGMnonce, A, C, T); | + | 3. IF res' = FAIL then return FAIL; | + | 4. IF res' = (A, P) then return P. | + +-------------------------------------------------------------------+ + + where + + * the MGM-Encrypt and MGM-Decrypt functions are defined in + [RFC9058]; + + * the length of authentication tag T is equal to n bytes (S = n); + + * the length of the nonce parameter is equal to n bytes (IVlen = n). + + Cipher suites TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L and + TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S MUST use Kuznyechik + [RFC7801] as a base block cipher for the AEAD algorithm. The block + length n is 16 bytes (n = 16) and the key length k is 32 bytes (k = + 32). + + Cipher suites TLS_GOSTR341112_256_WITH_MAGMA_MGM_L and + TLS_GOSTR341112_256_WITH_MAGMA_MGM_S MUST use Magma [RFC8891] as a + base block cipher for the AEAD algorithm. The block length n is 8 + bytes (n = 8) and the key length k is 32 bytes (k = 32). + +4.1.2. TLSTREE + + The TLS13_GOST cipher suites use the TLSTREE function to support the + external re-keying approach (see [RFC8645]). The TLSTREE function is + defined as follows: + + TLSTREE(K_root, i) = KDF_3(KDF_2(KDF_1(K_root, STR_8(i & C_1)), + STR_8(i & C_2)), STR_8(i & C_3)), + + where + + * K_root in B_32; + + * i in {0, 1, ... , 2^64 - 1}; + + * KDF_j(K, D), j = 1, 2, 3, is the key derivation function defined + as follows: + + - KDF_1(K, D) = KDF_GOSTR3411_2012_256(K, "level1", D), + + - KDF_2(K, D) = KDF_GOSTR3411_2012_256(K, "level2", D), + + - KDF_3(K, D) = KDF_GOSTR3411_2012_256(K, "level3", D), + + where the KDF_GOSTR3411_2012_256 function is defined in [RFC7836], + K in B_32, D in B_8; + + * C_1, C_2, C_3 are the constants defined by each cipher suite as + follows: + + +===========================================+======================+ + | CipherSuites |C_1, C_2, C_3 | + +===========================================+======================+ + | TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L |C_1=0xf800000000000000| + | | | + | |C_2=0xfffffff000000000| + | | | + | |C_3=0xffffffffffffe000| + +-------------------------------------------+----------------------+ + | TLS_GOSTR341112_256_WITH_MAGMA_MGM_L |C_1=0xffe0000000000000| + | | | + | |C_2=0xffffffffc0000000| + | | | + | |C_3=0xffffffffffffff80| + +-------------------------------------------+----------------------+ + | TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S |C_1=0xffffffffe0000000| + | | | + | |C_2=0xffffffffffff0000| + | | | + | |C_3=0xfffffffffffffff8| + +-------------------------------------------+----------------------+ + | TLS_GOSTR341112_256_WITH_MAGMA_MGM_S |C_1=0xfffffffffc000000| + | | | + | |C_2=0xffffffffffffe000| + | | | + | |C_3=0xffffffffffffffff| + +-------------------------------------------+----------------------+ + + Table 1 + +4.1.3. SNMAX Parameter + + The SNMAX parameter is the maximum number of records encrypted under + the same traffic key material (sender_write_key and sender_write_iv) + and is defined by each cipher suite as follows: + + +===========================================+==================+ + | CipherSuites | SNMAX | + +===========================================+==================+ + | TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L | SNMAX = 2^64 - 1 | + +-------------------------------------------+------------------+ + | TLS_GOSTR341112_256_WITH_MAGMA_MGM_L | SNMAX = 2^64 - 1 | + +-------------------------------------------+------------------+ + | TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S | SNMAX = 2^42 - 1 | + +-------------------------------------------+------------------+ + | TLS_GOSTR341112_256_WITH_MAGMA_MGM_S | SNMAX = 2^39 - 1 | + +-------------------------------------------+------------------+ + + Table 2 + +4.2. Hash Algorithm + + The Hash algorithm is used for the key derivation process (see + Section 7.1 of [RFC8446]), Finished message calculation (see + Section 4.4.4 of [RFC8446]), Transcript-Hash function computation + (see Section 4.4.1 of [RFC8446]), Pre-Shared Key (PSK) binder value + calculation (see Section 4.2.11.2 of [RFC8446]), external re-keying + approach (see Section 4.1.2), and other purposes. + + If a TLS13_GOST cipher suite is negotiated, the Hash algorithm MUST + be the GOST R 34.11-2012 hash algorithm [RFC6986] with a 32-byte + (256-bit) hash value. + +5. Signature Scheme Definition + + This section defines the following seven TLS13_GOST signature + schemes: + + enum { + gostr34102012_256a(0x0709), + gostr34102012_256b(0x070A), + gostr34102012_256c(0x070B), + gostr34102012_256d(0x070C), + gostr34102012_512a(0x070D), + gostr34102012_512b(0x070E), + gostr34102012_512c(0x070F) + } SignatureScheme; + + One of the TLS13_GOST signature schemes listed above SHOULD be used + with the TLS13_GOST profile. + + Each signature scheme specifies a pair consisting of the signature + algorithm (see Section 5.1) and the elliptic curve (see Section 5.2). + The procedure to calculate the signature value using TLS13_GOST + signature schemes is defined in Section 5.3. + +5.1. Signature Algorithm + + Signature algorithms corresponding to the TLS13_GOST signature + schemes are defined as follows: + + +=======================+=====================+============+ + | SignatureScheme Value | Signature Algorithm | References | + +=======================+=====================+============+ + | gostr34102012_256a | GOST R 34.10-2012, | RFC 7091 | + | | 32-byte key length | | + +-----------------------+---------------------+------------+ + | gostr34102012_256b | GOST R 34.10-2012, | RFC 7091 | + | | 32-byte key length | | + +-----------------------+---------------------+------------+ + | gostr34102012_256c | GOST R 34.10-2012, | RFC 7091 | + | | 32-byte key length | | + +-----------------------+---------------------+------------+ + | gostr34102012_256d | GOST R 34.10-2012, | RFC 7091 | + | | 32-byte key length | | + +-----------------------+---------------------+------------+ + | gostr34102012_512a | GOST R 34.10-2012, | RFC 7091 | + | | 64-byte key length | | + +-----------------------+---------------------+------------+ + | gostr34102012_512b | GOST R 34.10-2012, | RFC 7091 | + | | 64-byte key length | | + +-----------------------+---------------------+------------+ + | gostr34102012_512c | GOST R 34.10-2012, | RFC 7091 | + | | 64-byte key length | | + +-----------------------+---------------------+------------+ + + Table 3 + +5.2. Elliptic Curve + + Elliptic curves corresponding to the TLS13_GOST signature schemes are + defined as follows: + + +=======================+=========================+============+ + | SignatureScheme Value | Curve Identifier Value | References | + +=======================+=========================+============+ + | gostr34102012_256a | id-tc26-gost- | RFC 7836 | + | | 3410-2012-256-paramSetA | | + +-----------------------+-------------------------+------------+ + | gostr34102012_256b | id-GostR3410-2001- | RFC 4357 | + | | CryptoPro-A-ParamSet | | + +-----------------------+-------------------------+------------+ + | gostr34102012_256c | id-GostR3410-2001- | RFC 4357 | + | | CryptoPro-B-ParamSet | | + +-----------------------+-------------------------+------------+ + | gostr34102012_256d | id-GostR3410-2001- | RFC 4357 | + | | CryptoPro-C-ParamSet | | + +-----------------------+-------------------------+------------+ + | gostr34102012_512a | id-tc26-gost- | RFC 7836 | + | | 3410-12-512-paramSetA | | + +-----------------------+-------------------------+------------+ + | gostr34102012_512b | id-tc26-gost- | RFC 7836 | + | | 3410-12-512-paramSetB | | + +-----------------------+-------------------------+------------+ + | gostr34102012_512c | id-tc26-gost- | RFC 7836 | + | | 3410-2012-512-paramSetC | | + +-----------------------+-------------------------+------------+ + + Table 4 + +5.3. SIGN Function + + If the TLS13_GOST signature scheme is used, the signature value in + the CertificateVerify message (see Section 6.3.4) MUST be calculated + using the SIGN function defined as follows: + + +-----------------------------------------------------+ + | SIGN(d_sign, M) | + |-----------------------------------------------------| + | Input: | + | - the sign key d_sign: 0 < d_sign < q; | + | - the byte string M in B*. | + | Output: | + | - signature value sgn in B_{2*l}. | + |-----------------------------------------------------| + | 1. (r, s) = SIGNGOST(d_sign, M) | + | 2. Return str_l(r) | str_l(s). | + |-----------------------------------------------------+ + + where + + * q is the subgroup order of the group of points of the elliptic + curve; + + * l is defined as follows: + + - l = 32 for the gostr34102012_256a, gostr34102012_256b, + gostr34102012_256c, and gostr34102012_256d signature schemes; + + - l = 64 for the gostr34102012_512a, gostr34102012_512b, and + gostr34102012_512c signature schemes; + + * SIGNGOST is an algorithm that takes a private key d_sign and a + message M as an input and returns a pair of integers (r, s) that + is calculated during the signature generation process in + accordance with the GOST R 34.10-2012 signature algorithm (see + Section 6.1 of [RFC7091]). + + Note: The signature value sgn is the concatenation of two strings + that are byte representations of r and s values in the little-endian + format. + +6. Key Exchange and Authentication + + The key exchange and authentication process for using the TLS13_GOST + profile is defined in Sections 6.1, 6.2, and 6.3. + +6.1. Key Exchange + + The TLS13_GOST profile supports three basic key exchange modes that + are defined in [RFC8446]: Ephemeral Elliptic Curve Diffie-Hellman + (ECDHE), PSK-only, and PSK with ECDHE. + + Note: In accordance with [RFC8446], TLS 1.3 also supports key + exchange modes based on the Diffie-Hellman protocol over finite + fields. However, the TLS13_GOST profile MUST use modes based on the + Diffie-Hellman protocol over elliptic curves. + + In accordance with [RFC8446], PSKs can be divided into two types: + + * internal PSKs that can be established during the previous + connection; + + * external PSKs that can be established out of band. + + If the TLS13_GOST profile is used, PSK-only key exchange mode SHOULD + be established via the internal PSKs, and external PSKs SHOULD be + used only in PSK with ECDHE mode (see more in Section 9). + + If the TLS13_GOST profile is used and ECDHE or PSK with ECDHE key + exchange mode is used, the ECDHE shared secret SHOULD be calculated + in accordance with Section 6.1.1 on the basis of one of the elliptic + curves defined in Section 6.1.2. + +6.1.1. ECDHE Shared Secret Calculation + + If the TLS13_GOST profile is used, the ECDHE shared secret SHOULD be + calculated in accordance with Sections 6.1.1.1 and 6.1.1.2. The + public ephemeral keys used to obtain the ECDHE shared secret SHOULD + be represented in the format described in Section 6.1.1.3. + +6.1.1.1. ECDHE Shared Secret Calculation on the Client Side + + The client calculates the ECDHE shared secret in accordance with the + following steps: + + Step 1. The client chooses from all supported curves E_1, ..., E_R + the set of curves E_{i_1}, ..., E_{i_r}, 1 <= i_1 <= i_r <= + R, where + + * r >= 1 in the case of the first ClientHello message; + + * r = 1 in the case of responding to the HelloRetryRequest + message; E_{i_1} corresponds to the curve indicated in + the "key_share" extension in the HelloRetryRequest + message. + + Step 2. The client generates ephemeral key pairs (d_C^{i_1}, + Q_C^{i_1}), ..., (d_C^{i_r}, Q_C^{i_r}) corresponding to the + curves E_{i_1}, ..., E_{i_r}, where for each i in {i_1, ..., + i_r}: + + * d_C^i is chosen from {1, ..., q_i - 1} at random; + + * Q_C^i = d_C^i * P_i. + + Step 3. The client sends the ClientHello message specified in + accordance with Section 4.1.2 of [RFC8446] and Section 6.3.1 + that contains: + + * "key_share" extension with public ephemeral keys + Q_C^{i_1}, ..., Q_C^{i_r} built in accordance with + Section 4.2.8 of [RFC8446]; + + * "supported_groups" extension with supported curves E_1, + ..., E_R built in accordance with Section 4.2.7 of + [RFC8446]. + + Note: The client MAY send an empty "key_share" extension + in the first ClientHello message to request a group + selection from the server in the HelloRetryRequest + message and to generate an ephemeral key for the selected + group only. The ECDHE shared secret may be calculated + without sending HelloRetryRequest message if the + "key_share" extension in the first ClientHello message + contains the value corresponding to the curve that is + selected by the server. + + Step 4. If the HelloRetryRequest message is received, the client + MUST return to Step 1 and choose correct parameters in + accordance with Section 4.1.2 of [RFC8446]. If the + ServerHello message is received, the client proceeds to the + next step. In other cases, the client MUST terminate the + connection with the "unexpected_message" alert. + + Step 5. The client extracts curve E_res and ephemeral key Q_S^res, + res in {1, ..., R}, from the ServerHello message and checks + whether Q_S^res belongs to E_res. If this check fails, the + client MUST terminate the connection with + "handshake_failure" alert. + + Step 6. The client generates Q^ECDHE: + + Q^ECDHE = (X^ECDHE, Y^ECDHE) = (h_res * d_C^res) * + Q_S^res. + + Step 7. The client MUST check whether the calculated shared secret + Q^ECDHE is not equal to the zero point O_res. If this check + fails, the client MUST terminate the connection with + "handshake_failure" alert. + + Step 8. The ECDHE shared secret is the byte representation of the + coordinate X^ECDHE of the point Q^ECDHE in the little-endian + format: + + ECDHE = str_{coordinate_length}(X^ECDHE), + + where the coordinate_length value is defined by the + particular elliptic curve (see Section 6.1.2). + +6.1.1.2. ECDHE Shared Secret Calculation on Server Side + + Upon receiving the ClientHello message, the server calculates the + ECDHE shared secret in accordance with the following steps: + + Step 1. The server chooses the curve E_res, res in {1, ..., R}, from + the list of the curves E_1, ..., E_R indicated in the + "supported_groups" extension in the ClientHello message and + the corresponding public ephemeral key Q_C^res from the list + Q_C^{i_1}, ..., Q_C^{i_r}, 1 <= i_1 <= i_r <= R, indicated + in the "key_share" extension. If the corresponding public + ephemeral key is not found (res in {1, ..., R}\{i_1, ..., + i_r}), the server MUST send the HelloRetryRequest message + with the "key_share" extension indicating the selected + elliptic curve E_res and wait for the new ClientHello + message. + + Step 2. The server checks whether Q_C^res belongs to E_res. If this + check fails, the server MUST terminate the connection with + "handshake_failure" alert. + + Step 3. The server generates ephemeral key pair (d_S^res, Q_S^res) + corresponding to E_res: + + * d_S^res is chosen from {1, ..., q_res - 1} at random; + + * Q_S^res = d_S^res * P_res. + + Step 4. The server sends the ServerHello message generated in + accordance with Section 4.1.3 of [RFC8446] and Section 6.3.1 + with the "key_share" extension that contains public + ephemeral key Q_S^res corresponding to E_res. + + Step 5. The server generates Q^ECDHE: + + Q^ECDHE = (X^ECDHE, Y^ECDHE) = (h_res * d_S^res) * + Q_C^res. + + Step 6. The server MUST check whether the calculated shared secret + Q^ECDHE is not equal to the zero point O_res. If this check + fails, the server MUST abort the handshake with + "handshake_failure" alert. + + Step 7. The ECDHE shared secret is the byte representation of the + coordinate X^ECDHE of the point Q^ECDHE in the little-endian + format: + + ECDHE = str_{coordinate_length}(X^ECDHE), + + where the coordinate_length value is defined by the + particular elliptic curve (see Section 6.1.2). + +6.1.1.3. Public Ephemeral Key Representation + + This section defines the representation format of the public + ephemeral keys generated during the ECDHE shared secret calculation + (see Sections 6.1.1.1 and 6.1.1.2). + + If the TLS13_GOST profile is used and ECDHE or PSK with ECDHE key + exchange mode is used, the public ephemeral key Q indicated in the + KeyShareEntry.key_exchange field MUST contain the data defined by the + following structure: + + struct { + opaque X[coordinate_length]; + opaque Y[coordinate_length]; + } PlainPointRepresentation; + + where X and Y, respectively, contain the byte representations of x + and y values of the point Q (Q = (x, y)) in the little-endian format + and are specified as follows: + + * X = str_{coordinate_length}(x); + + * Y = str_{coordinate_length}(y). + + The coordinate_length value is defined by the particular elliptic + curve (see Section 6.1.2). + +6.1.2. Values for the TLS Supported Groups Registry + + The "supported_groups" extension is used to indicate the set of the + elliptic curves supported by an endpoint and is defined in + Section 4.2.7 of [RFC8446]. This extension is always contained in + the ClientHello message and optionally in the EncryptedExtensions + message. + + This section defines the following seven elliptic curves: + + enum { + GC256A(0x22), GC256B(0x23), GC256C(0x24), GC256D(0x25), + GC512A(0x26), GC512B(0x27), GC512C(0x28) + } NamedGroup; + + If the TLS13_GOST profile is used and ECDHE or PSK with ECDHE key + exchange mode is used, one of the elliptic curves listed above SHOULD + be used. + + Each curve corresponds to the particular identifier and specifies the + value of coordinate_length parameter (see "cl" column) as follows: + + +===========+========================================+==+=========+ + |Description| Curve Identifier Value |cl|Reference| + +===========+========================================+==+=========+ + |GC256A | id-tc26-gost-3410-2012-256-paramSetA |32|RFC 7836 | + +-----------+----------------------------------------+--+---------+ + |GC256B | id-GostR3410-2001-CryptoPro-A-ParamSet |32|RFC 4357 | + +-----------+----------------------------------------+--+---------+ + |GC256C | id-GostR3410-2001-CryptoPro-B-ParamSet |32|RFC 4357 | + +-----------+----------------------------------------+--+---------+ + |GC256D | id-GostR3410-2001-CryptoPro-C-ParamSet |32|RFC 4357 | + +-----------+----------------------------------------+--+---------+ + |GC512A | id-tc26-gost-3410-12-512-paramSetA |64|RFC 7836 | + +-----------+----------------------------------------+--+---------+ + |GC512B | id-tc26-gost-3410-12-512-paramSetB |64|RFC 7836 | + +-----------+----------------------------------------+--+---------+ + |GC512C | id-tc26-gost-3410-2012-512-paramSetC |64|RFC 7836 | + +-----------+----------------------------------------+--+---------+ + + Table 5 + + Note: The identifier values and the corresponding elliptic curves are + the same as in [RFC9189]. + +6.2. Authentication + + In accordance with [RFC8446], authentication can be performed via a + signature with a certificate or via a symmetric PSK. The server side + is always authenticated; the client side is optionally authenticated. + + PSK-based authentication is performed as a side effect of key + exchange. If the TLS13_GOST profile is used, external PSKs SHOULD be + combined only with mutual authentication (see Section 9). + + Certificate-based authentication is performed via Authentication + messages and an optional CertificateRequest message (sent if client + authentication is required). If the TLS13_GOST profile is used, the + signature schemes used for certificate-based authentication are + defined in Section 5 and Authentication messages are specified in + Sections 6.3.3 and 6.3.4. The CertificateRequest message is + specified in Section 6.3.2. + +6.3. Handshake Messages + + The TLS13_GOST profile specifies the ClientHello, ServerHello, + CertificateRequest, Certificate and CertificateVerify handshake + messages that are described in further detail below. + +6.3.1. Hello Messages + + The ClientHello message is sent when the client first connects to the + server or responds to the HelloRetryRequest message and is specified + in accordance with Section 4.1.2 of [RFC8446]. + + If the TLS13_GOST profile is used, the ClientHello message MUST meet + the following requirements: + + * The ClientHello.cipher_suites field MUST contain the values + defined in Section 4. + + * If server authentication via a certificate is required, the + extension_data field of the "signature_algorithms" extension MUST + contain the values defined in Section 5 that correspond to the + GOST R 34.10-2012 signature algorithm. + + * If server authentication via a certificate is required and the + client uses optional "signature_algorithms_cert" extension, the + extension_data field of this extension SHOULD contain the values + defined in Section 5 that correspond to the GOST R 34.10-2012 + signature algorithm. + + * If the client wants to establish a TLS 1.3 connection using the + ECDHE shared secret, the extension_data field of the + "supported_groups" extension MUST contain the elliptic curve + identifiers defined in Section 6.1.2. + + The ServerHello message is sent by the server in response to the + ClientHello message to negotiate an acceptable set of handshake + parameters based on the ClientHello message and is specified in + accordance with Section 4.1.3 of [RFC8446]. + + If the TLS13_GOST profile is used, the ServerHello message MUST meet + the following requirements: + + * The ServerHello.cipher_suite field MUST contain one of the values + defined in Section 4. + + * If the server decides to establish a TLS 1.3 connection using the + ECDHE shared secret, the extension_data field of the "key_share" + extension MUST contain the elliptic curve identifier and the + public ephemeral key that satisfy the following conditions: + + - The elliptic curve identifier corresponds to the value that was + indicated in the "supported_groups" and the "key_share" + extensions in the ClientHello message. + + - The elliptic curve identifier is one of the values defined in + Section 6.1.2. + + - The public ephemeral key corresponds to the elliptic curve + specified by the KeyShareEntry.group identifier. + +6.3.2. CertificateRequest + + This message is sent when the server requests client authentication + via a certificate and is specified in accordance with Section 4.3.2 + of [RFC8446]. + + If the TLS13_GOST profile is used, the CertificateRequest message + MUST meet the following requirements: + + * The extension_data field of the "signature_algorithms" extension + MUST contain only the values defined in Section 5. + + * If the server uses optional "signature_algorithms_cert" extension, + the extension_data field of this extension SHOULD contain only the + values defined in Section 5. + +6.3.3. Certificate + + This message is sent to convey the endpoint's certificate chain to + the peer and is specified in accordance with Section 4.4.2 of + [RFC8446]. + + If the TLS13_GOST profile is used, the Certificate message MUST meet + the following requirements. + + * Each endpoint's certificate provided to the peer MUST be signed + using the algorithm that corresponds to a signature scheme + indicated by the peer in its "signature_algorithms_cert" + extension, if present (or in the "signature_algorithms" extension, + otherwise). + + * The signature algorithm used for signing certificates SHOULD + correspond to one of the signature schemes defined in Section 5. + +6.3.4. CertificateVerify + + This message is sent to provide explicit proof that the endpoint has + the private key corresponding to the public key indicated in its + certificate and is specified in accordance with Section 4.4.3 of + [RFC8446]. + + If the TLS13_GOST profile is used, the CertificateVerify message MUST + meet the following requirements: + + * The CertificateVerify.algorithm field MUST contain the signature + scheme identifier that corresponds to the value indicated in the + peer's "signature_algorithms" extension and is one of the values + defined in Section 5. + + * The CertificateVerify.signature field contains the sgn value that + is computed as follows: + + sgn = SIGN(d_sign, M), + + where + + - the SIGN function is defined in Section 5.3; + + - d_sign is the sender's long-term private key that corresponds + to the sender's long-term public key Q_sign from the sender's + certificate; + + - the message M is defined in accordance with Section 4.4.3 of + [RFC8446]. + +7. IANA Considerations + + IANA has added the following values to the "TLS Cipher Suites" + registry with a reference to this RFC: + + +=====+=========================================+=======+===========+ + |Value|Description |DTLS-OK|Recommended| + +=====+=========================================+=======+===========+ + |0xC1,|TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L|N |N | + |0x03 | | | | + +-----+-----------------------------------------+-------+-----------+ + |0xC1,|TLS_GOSTR341112_256_WITH_MAGMA_MGM_L |N |N | + |0x04 | | | | + +-----+-----------------------------------------+-------+-----------+ + |0xC1,|TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S|N |N | + |0x05 | | | | + +-----+-----------------------------------------+-------+-----------+ + |0xC1,|TLS_GOSTR341112_256_WITH_MAGMA_MGM_S |N |N | + |0x06 | | | | + +-----+-----------------------------------------+-------+-----------+ + + Table 6 + + IANA has added the following values to the "TLS SignatureScheme" + registry with a reference to this RFC: + + +========+====================+=============+ + | Value | Description | Recommended | + +========+====================+=============+ + | 0x0709 | gostr34102012_256a | N | + +--------+--------------------+-------------+ + | 0x070A | gostr34102012_256b | N | + +--------+--------------------+-------------+ + | 0x070B | gostr34102012_256c | N | + +--------+--------------------+-------------+ + | 0x070C | gostr34102012_256d | N | + +--------+--------------------+-------------+ + | 0x070D | gostr34102012_512a | N | + +--------+--------------------+-------------+ + | 0x070E | gostr34102012_512b | N | + +--------+--------------------+-------------+ + | 0x070F | gostr34102012_512c | N | + +--------+--------------------+-------------+ + + Table 7 + +8. Historical Considerations + + In addition to the curve identifier values listed in Table 5, there + are some additional identifier values that correspond to the + signature schemes for historical reasons. They are as follows: + + +====================+============================================+ + | Description | Curve Identifier Value | + +====================+============================================+ + | gostr34102012_256b | id-GostR3410-2001-CryptoPro-XchA-ParamSet, | + | | id-tc26-gost-3410-2012-256-paramSetB | + +--------------------+--------------------------------------------+ + | gostr34102012_256c | id-tc26-gost-3410-2012-256-paramSetC | + +--------------------+--------------------------------------------+ + | gostr34102012_256d | id-GostR3410-2001-CryptoPro-XchB-ParamSet, | + | | id-tc26-gost-3410-2012-256-paramSetD | + +--------------------+--------------------------------------------+ + + Table 8 + + The client should be prepared to handle any of them correctly if the + corresponding signature scheme is included in the + "signature_algorithms" or "signature_algorithms_cert" extensions. + +9. Security Considerations + + In order to create an efficient and side-channel resistant + implementation while using the TLSTREE algorithm, the functions + KDF_j, j = 1, 2, 3, SHOULD be called only when necessary (when the + record sequence number seqnum reaches such a value that seqnum & C_j + != (seqnum - 1) & C_j). Otherwise, the previous value should be + used. + +10. References + +10.1. Normative References + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC6986] Dolmatov, V., Ed. and A. Degtyarev, "GOST R 34.11-2012: + Hash Function", RFC 6986, DOI 10.17487/RFC6986, August + 2013, <https://www.rfc-editor.org/info/rfc6986>. + + [RFC7091] Dolmatov, V., Ed. and A. Degtyarev, "GOST R 34.10-2012: + Digital Signature Algorithm", RFC 7091, + DOI 10.17487/RFC7091, December 2013, + <https://www.rfc-editor.org/info/rfc7091>. + + [RFC7801] Dolmatov, V., Ed., "GOST R 34.12-2015: Block Cipher + "Kuznyechik"", RFC 7801, DOI 10.17487/RFC7801, March 2016, + <https://www.rfc-editor.org/info/rfc7801>. + + [RFC7836] Smyshlyaev, S., Ed., Alekseev, E., Oshkin, I., Popov, V., + Leontiev, S., Podobaev, V., and D. Belyavsky, "Guidelines + on the Cryptographic Algorithms to Accompany the Usage of + Standards GOST R 34.10-2012 and GOST R 34.11-2012", + RFC 7836, DOI 10.17487/RFC7836, March 2016, + <https://www.rfc-editor.org/info/rfc7836>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + + [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol + Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, + <https://www.rfc-editor.org/info/rfc8446>. + + [RFC8645] Smyshlyaev, S., Ed., "Re-keying Mechanisms for Symmetric + Keys", RFC 8645, DOI 10.17487/RFC8645, August 2019, + <https://www.rfc-editor.org/info/rfc8645>. + + [RFC8891] Dolmatov, V., Ed. and D. Baryshkov, "GOST R 34.12-2015: + Block Cipher "Magma"", RFC 8891, DOI 10.17487/RFC8891, + September 2020, <https://www.rfc-editor.org/info/rfc8891>. + + [RFC9058] Smyshlyaev, S., Ed., Nozdrunov, V., Shishkin, V., and E. + Griboedova, "Multilinear Galois Mode (MGM)", RFC 9058, + DOI 10.17487/RFC9058, June 2021, + <https://www.rfc-editor.org/info/rfc9058>. + + [RFC9189] Smyshlyaev, S., Ed., Belyavsky, D., and E. Alekseev, "GOST + Cipher Suites for Transport Layer Security (TLS) Protocol + Version 1.2", RFC 9189, DOI 10.17487/RFC9189, March 2022, + <https://www.rfc-editor.org/info/rfc9189>. + +10.2. Informative References + + [RFC8446BIS] + Rescorla, E., "The Transport Layer Security (TLS) Protocol + Version 1.3", Work in Progress, Internet-Draft, draft- + ietf-tls-rfc8446bis-05, 24 October 2022, + <https://datatracker.ietf.org/doc/html/draft-ietf-tls- + rfc8446bis-05>. + +Appendix A. Test Examples + +A.1. Example 1 + +A.1.1. Test Case + + Test examples are given for the following instance of the TLS13_GOST + profile: + + 1. Full TLS Handshake is used. + + 2. ECDHE key exchange mode is used. The elliptic curve GC512C is + used for ECDHE shared secret calculation. + + 3. Authentication is only used on the server side. The signature + scheme gost34102012_256b is used. + + 4. TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S cipher suite is + negotiated. + + 5. Application Data is sent by the server prior to receiving the + Finished message from the client. + + 6. NewSessionTicket is sent after establishing a secure connection. + + 7. Nine Application Data records are sent during the operation of + the Record protocol. The sequence numbers are selected to + demonstrate the operation of the TLSTREE function. + + 8. Alert protocol is used for closure of the connection. + +A.1.2. Test Examples + + ---------------------------Client--------------------------- + + ClientHello message: + msg_type: 01 + length: 0000DE + body: + legacy_version: 0303 + random: 03030303030303030303030303030303 + 03030303030303030303030303030303 + legacy_session_id: + length: 00 + vector: -- + cipher_suites: + length: 0002 + vector: + CipherSuite: C105 + compression_methods: + length: 01 + vector: + CompressionMethod: 00 + extensions: + length: 00B3 + vector: + Extension: /* supported_groups */ + extension_type: 000A + extension_data: + length: 0004 + vector: + named_group_list: + length: 0002 + vector: + /* GC512C */ + 0028 + Extension: /* signature_algorithms */ + extension_type: 000D + extension_data: + length: 0010 + vector: + supported_signature_algorithms: + length: 000E + vector: + /* gost34102012256a */ + 0709 + /* gost34102012256b */ + 070A + /* gost34102012256c */ + 070B + /* gost34102012256d */ + 070C + /* gost34102012512a */ + 070D + /* gost34102012512b */ + 070E + /* gost34102012512c */ + 070F + Extension: /* supported_versions */ + extension_type: 002B + extension_data: + length: 0003 + vector: + versions: + length: 02 + vector: + 0304 + Extension: /* psk_key_exchange_modes */ + extension_type: 002D + extension_data: + length: 0002 + vector: + ke_modes: + length: 01 + vector: + /* psk_ke */ + 00 + Extension: /* key_share */ + extension_type: 0033 + extension_data: + length: 0086 + vector: + length: 0084 + vector: + group: 0028 + key_exchange: + length: 0080 + vector: + 05EEBDF3DDC1D2F5F3822433241284E7 + 7641487938EA88721F26203E9792B5CB + 97EB70EF02E8F72B7491D4F2CFDC332A + DF7F1778E854A88DDC2113FEC527A151 + 71A04CB0C573793A7AEF9BBCA486B6B0 + 46B2149B46F4332903E5B7C438ADD05E + 185EFBF45557475A8CCBF6ACED1A2EB4 + 16F916729D7CEF9CBD8334989304AFAE + + 0000: 01 00 00 DE 03 03 03 03 03 03 03 03 03 03 03 03 + 0010: 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 + 0020: 03 03 03 03 03 03 00 00 02 C1 05 01 00 00 B3 00 + 0030: 0A 00 04 00 02 00 28 00 0D 00 10 00 0E 07 09 07 + 0040: 0A 07 0B 07 0C 07 0D 07 0E 07 0F 00 2B 00 03 02 + 0050: 03 04 00 2D 00 02 01 00 00 33 00 86 00 84 00 28 + 0060: 00 80 05 EE BD F3 DD C1 D2 F5 F3 82 24 33 24 12 + 0070: 84 E7 76 41 48 79 38 EA 88 72 1F 26 20 3E 97 92 + 0080: B5 CB 97 EB 70 EF 02 E8 F7 2B 74 91 D4 F2 CF DC + 0090: 33 2A DF 7F 17 78 E8 54 A8 8D DC 21 13 FE C5 27 + 00A0: A1 51 71 A0 4C B0 C5 73 79 3A 7A EF 9B BC A4 86 + 00B0: B6 B0 46 B2 14 9B 46 F4 33 29 03 E5 B7 C4 38 AD + 00C0: D0 5E 18 5E FB F4 55 57 47 5A 8C CB F6 AC ED 1A + 00D0: 2E B4 16 F9 16 72 9D 7C EF 9C BD 83 34 98 93 04 + 00E0: AF AE + + Record layer message: + type: 16 + legacy_record_version: 0301 + length: 00E2 + fragment: 010000DE030303030303030303030303 + 03030303030303030303030303030303 + 030303030303000002C105010000B300 + 0A000400020028000D0010000E070907 + 0A070B070C070D070E070F002B000302 + 0304002D000201000033008600840028 + 008005EEBDF3DDC1D2F5F38224332412 + 84E77641487938EA88721F26203E9792 + B5CB97EB70EF02E8F72B7491D4F2CFDC + 332ADF7F1778E854A88DDC2113FEC527 + A15171A04CB0C573793A7AEF9BBCA486 + B6B046B2149B46F4332903E5B7C438AD + D05E185EFBF45557475A8CCBF6ACED1A + 2EB416F916729D7CEF9CBD8334989304 + AFAE + + 00000: 16 03 01 00 E2 01 00 00 DE 03 03 03 03 03 03 03 + 00010: 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 + 00020: 03 03 03 03 03 03 03 03 03 03 03 00 00 02 C1 05 + 00030: 01 00 00 B3 00 0A 00 04 00 02 00 28 00 0D 00 10 + 00040: 00 0E 07 09 07 0A 07 0B 07 0C 07 0D 07 0E 07 0F + 00050: 00 2B 00 03 02 03 04 00 2D 00 02 01 00 00 33 00 + 00060: 86 00 84 00 28 00 80 05 EE BD F3 DD C1 D2 F5 F3 + 00070: 82 24 33 24 12 84 E7 76 41 48 79 38 EA 88 72 1F + 00080: 26 20 3E 97 92 B5 CB 97 EB 70 EF 02 E8 F7 2B 74 + 00090: 91 D4 F2 CF DC 33 2A DF 7F 17 78 E8 54 A8 8D DC + 000A0: 21 13 FE C5 27 A1 51 71 A0 4C B0 C5 73 79 3A 7A + 000B0: EF 9B BC A4 86 B6 B0 46 B2 14 9B 46 F4 33 29 03 + 000D0: E5 B7 C4 38 AD D0 5E 18 5E FB F4 55 57 47 5A 8C + 000E0: CB F6 AC ED 1A 2E B4 16 F9 16 72 9D 7C EF 9C BD + 000F0: 83 34 98 93 04 AF AE + + ---------------------------Server--------------------------- + + ServerHello message: + msg_type: 02 + length: 0000B6 + body: + legacy_version: 0303 + random: 83838383838383838383838383838383 + 83838383838383838383838383838383 + + legacy_session_id: + length: 00 + vector: -- + cipher_suite: + CipherSuite: C105 + compression_method: + CompressionMethod: 00 + extensions: + length: 008E + vector: + Extension: /* supported_versions */ + extension_type: 002B + extension_data: + length: 0002 + vector: + selected_version: + 0304 + Extension: /* key_share */ + extension_type: 0033 + extension_data: + length: 0084 + vector: + group: 0028 + key_exchange: + length: 0080 + vector: + 2F3C663FE74735A1C421160DF0F43266 + 185FD30B6E5D6E88FC4061FAEACAB338 + B10A1BD20CB0B4EE757E74A0027D409F + E937F01633A1E3F9A5518DEFD0F89F9D + 3D9F6CC651413DEC2C74366D83C47EE1 + DE4E421F65CD1163E94EA0C2E19ED45D + 35558B937D9BFDC5ECC2B2A21B4EC3D5 + 3B29579A8FD5E074811028FBCF17994F + + 00000: 02 00 00 B6 03 03 83 83 83 83 83 83 83 83 83 83 + 00010: 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 00020: 83 83 83 83 83 83 00 C1 05 00 00 8E 00 2B 00 02 + 00030: 03 04 00 33 00 84 00 28 00 80 2F 3C 66 3F E7 47 + 00040: 35 A1 C4 21 16 0D F0 F4 32 66 18 5F D3 0B 6E 5D + 00050: 6E 88 FC 40 61 FA EA CA B3 38 B1 0A 1B D2 0C B0 + 00060: B4 EE 75 7E 74 A0 02 7D 40 9F E9 37 F0 16 33 A1 + 00070: E3 F9 A5 51 8D EF D0 F8 9F 9D 3D 9F 6C C6 51 41 + 00080: 3D EC 2C 74 36 6D 83 C4 7E E1 DE 4E 42 1F 65 CD + 00090: 11 63 E9 4E A0 C2 E1 9E D4 5D 35 55 8B 93 7D 9B + 000A0: FD C5 EC C2 B2 A2 1B 4E C3 D5 3B 29 57 9A 8F D5 + 000B0: E0 74 81 10 28 FB CF 17 99 4F + + Record layer message: + type: 16 + legacy_record_version: 0303 + length: 00BA + fragment: 020000B6030383838383838383838383 + 83838383838383838383838383838383 + 83838383838300C10500008E002B0002 + 030400330084002800802F3C663FE747 + 35A1C421160DF0F43266185FD30B6E5D + 6E88FC4061FAEACAB338B10A1BD20CB0 + B4EE757E74A0027D409FE937F01633A1 + E3F9A5518DEFD0F89F9D3D9F6CC65141 + 3DEC2C74366D83C47EE1DE4E421F65CD + 1163E94EA0C2E19ED45D35558B937D9B + FDC5ECC2B2A21B4EC3D53B29579A8FD5 + E074811028FBCF17994F + + 00000: 16 03 03 00 BA 02 00 00 B6 03 03 83 83 83 83 83 + 00010: 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 00020: 83 83 83 83 83 83 83 83 83 83 83 00 C1 05 00 00 + 00030: 8E 00 2B 00 02 03 04 00 33 00 84 00 28 00 80 2F + 00040: 3C 66 3F E7 47 35 A1 C4 21 16 0D F0 F4 32 66 18 + 00050: 5F D3 0B 6E 5D 6E 88 FC 40 61 FA EA CA B3 38 B1 + 00060: 0A 1B D2 0C B0 B4 EE 75 7E 74 A0 02 7D 40 9F E9 + 00070: 37 F0 16 33 A1 E3 F9 A5 51 8D EF D0 F8 9F 9D 3D + 00080: 9F 6C C6 51 41 3D EC 2C 74 36 6D 83 C4 7E E1 DE + 00090: 4E 42 1F 65 CD 11 63 E9 4E A0 C2 E1 9E D4 5D 35 + 000A0: 55 8B 93 7D 9B FD C5 EC C2 B2 A2 1B 4E C3 D5 3B + 000B0: 29 57 9A 8F D5 E0 74 81 10 28 FB CF 17 99 4F + + ---------------------------Client--------------------------- + + d_C^res: + 00000: 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 + 00010: 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 + 00020: 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 + 00030: 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 + + Q_S^res: + 00000: 2F 3C 66 3F E7 47 35 A1 C4 21 16 0D F0 F4 32 66 + 00010: 18 5F D3 0B 6E 5D 6E 88 FC 40 61 FA EA CA B3 38 + 00020: B1 0A 1B D2 0C B0 B4 EE 75 7E 74 A0 02 7D 40 9F + 00030: E9 37 F0 16 33 A1 E3 F9 A5 51 8D EF D0 F8 9F 9D + 00040: 3D 9F 6C C6 51 41 3D EC 2C 74 36 6D 83 C4 7E E1 + 00050: DE 4E 42 1F 65 CD 11 63 E9 4E A0 C2 E1 9E D4 5D + 00060: 35 55 8B 93 7D 9B FD C5 EC C2 B2 A2 1B 4E C3 D5 + 00070: 3B 29 57 9A 8F D5 E0 74 81 10 28 FB CF 17 99 4F + + ECDHE: + 00000: 4D E6 0D 21 EA 8F B9 22 0D 14 64 23 B4 90 DA 40 + 00010: CC EB C4 3B C5 89 DB 79 B8 31 A4 7D 6B 06 30 07 + 00020: DD 03 40 5A 1B 79 76 B6 23 DC AA 69 B0 11 AE 10 + 00030: 6E 7E 41 74 38 5F 86 26 E1 21 B5 99 43 63 C9 9F + + ---------------------------Server--------------------------- + + d_S^res: + 00000: AA 3C A4 F4 A5 0A C0 5B 37 42 B1 35 B5 30 A9 F2 + 00010: 2A E4 F5 E1 85 30 1D EC 83 2E 77 BA 3B CD 6A F1 + 00020: 84 84 84 84 84 84 84 84 84 84 84 84 84 84 84 84 + 00030: 84 84 84 84 84 84 84 84 84 84 84 84 84 84 84 04 + + Q_C^res: + 00000: 05 EE BD F3 DD C1 D2 F5 F3 82 24 33 24 12 84 E7 + 00010: 76 41 48 79 38 EA 88 72 1F 26 20 3E 97 92 B5 CB + 00020: 97 EB 70 EF 02 E8 F7 2B 74 91 D4 F2 CF DC 33 2A + 00030: DF 7F 17 78 E8 54 A8 8D DC 21 13 FE C5 27 A1 51 + 00040: 71 A0 4C B0 C5 73 79 3A 7A EF 9B BC A4 86 B6 B0 + 00050: 46 B2 14 9B 46 F4 33 29 03 E5 B7 C4 38 AD D0 5E + 00060: 18 5E FB F4 55 57 47 5A 8C CB F6 AC ED 1A 2E B4 + 00070: 16 F9 16 72 9D 7C EF 9C BD 83 34 98 93 04 AF AE + + ECDHE: + 00000: 4D E6 0D 21 EA 8F B9 22 0D 14 64 23 B4 90 DA 40 + 00010: CC EB C4 3B C5 89 DB 79 B8 31 A4 7D 6B 06 30 07 + 00020: DD 03 40 5A 1B 79 76 B6 23 DC AA 69 B0 11 AE 10 + 00030: 6E 7E 41 74 38 5F 86 26 E1 21 B5 99 43 63 C9 9F + + ---------------------------Server--------------------------- + + EncryptedExtensions message: + msg_type: 08 + length: 000002 + body: + extensions: + length: 0000 + vector: -- + + 00000: 08 00 00 02 00 00 + + Record payload protection: + + EarlySecret = HKDF-Extract(Salt: 0^256, IKM: 0^256): + 00000: FB DE FB E5 27 FE EA 66 5A AB 92 77 A2 16 3B 83 + 00010: 43 08 4F D1 91 C4 60 66 26 0F AC 6F D1 43 6C 72 + + Derived #0 = Derive-Secret(EarlySecret, "derived", "") = + HKDF-Expand-Label(EarlySecret, "derived", "", 32): + 00000: DB C3 C8 26 D8 77 A3 B7 D2 D2 45 3D BF DC 6C FB + 00010: FB 11 51 B3 E8 4F 0C 8F 26 01 1D 8D 5B F3 ED F7 + + HandshakeSecret = HKDF-Extract(Salt: Derived #0, IKM: ECDHE): + 00000: 44 24 5E 2C 43 32 D1 F7 8B 0F 8D 16 F4 03 EB 69 + 00010: ED 2A 40 53 84 7C DC 39 FA 8B 3D 29 74 F7 45 E7 + + HM1 = (ClientHello, ServerHello) + + TH1 = Transcript-Hash(HM1): + 00000: 99 3B A7 22 12 4A F3 CB FD 47 71 E7 FA E3 2A C1 + 00010: D0 E9 27 8C F7 84 3F CB C6 20 E1 A0 08 5A 87 A1 + + server_handshake_traffic_secret (SHTS): + SHTS = Derive-Secret(HandshakeSecret, "s hs traffic", HM1) = + HKDF-Expand-Label(HandshakeSecret, "s hs traffic", TH1, 32): + 00000: 70 A5 F2 46 3D F6 0D BA A2 36 8B 67 FD 45 AE FF + 00010: 7C 1A 0B A4 2D 8A BD 72 41 5E CD 1D 94 E9 EF 54 + + server_write_key_hs = HKDF-Expand-Label(SHTS, "key", "", 32): + 00000: E1 37 64 B5 4B 9E 1B 47 D4 33 98 D6 D2 16 DF 24 + 00010: C2 89 A3 96 AB 6C 5B 52 4B BB 9C 06 F3 9F EF 01 + + server_write_iv_hs = HKDF-Expand-Label(SHTS, "iv", "", 16): + 00000: 69 69 FF AA A4 52 52 81 EE BB EB 4C BD 0B 64 0E + + server_record_write_key = TLSTREE(server_write_key_hs, 0): + 00000: 56 EE 18 13 72 72 49 C9 DC DF 35 13 78 7E DB 93 + 00010: DF 62 C6 1E E7 B1 26 C5 0F 26 C0 AA AF AE 00 E1 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + nonce: + 00000: 69 69 FF AA A4 52 52 81 EE BB EB 4C BD 0B 64 0E + + additional_data: + 00000: 17 03 03 00 17 + + TLSInnerPlaintext: + 00000: 08 00 00 02 00 00 16 + + TLSCiphertext: + 00000: 17 03 03 00 17 94 0E 5D 2C 75 3A E5 FE BD 20 01 + 00010: 2C C9 E3 EB 24 A3 79 84 1E 02 AB BE + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0017 + encrypted_record: 940E5D2C753AE5FEBD20012CC9E3EB24 + A379841E02ABBE + + 00000: 17 03 03 00 17 94 0E 5D 2C 75 3A E5 FE BD 20 01 + 00010: 2C C9 E3 EB 24 A3 79 84 1E 02 AB BE + + ---------------------------Server--------------------------- + + Certificate message: + msg_type: 0B + length: 000151 + body: + certificate_request_context: + length: 00 + vector: -- + certificate_list: + length: 00014D + vector: + ASN.1Cert: + length: 000148 + vector: 308201443081F2A00302010202023039 + 300A06082A85030701010302301B3119 + 301706035504031310676F73742E6578 + 616D706C652E636F6D301E170D323030 + 3232383131303833375A170D33303032 + 32353131303833375A301B3119301706 + 035504031310676F73742E6578616D70 + 6C652E636F6D305E301706082A850307 + 01010101300B06092A85030701020101 + 020343000440F383CEE83048B4EB14C7 + 1A7F6DE44A37CE11A6AC1750F1CFB8DA + D8A38CCDD8FD06656F7CFC075F4083C3 + 716221478F1EE24C6B1B70CCE3C72AFD + 2ACE65C775BCA321301F301D0603551D + 0E04160414F330FA7166DF095AF3A073 + BC3B8EA356D7DFAC71300A06082A8503 + 0701010302034100AB2EDA23F49B4862 + 3B0CFF5906B7DD3C23B473570B296A08 + 71DD15EF9A33201B97904A5CFA6C931C + 5473DC0C5A5F2FBB2E50CF587AE27C4D + 8E52EB80189DD08B + extensions: + length: 0000 + vector: -- + + 00000: 0B 00 01 51 00 00 01 4D 00 01 48 30 82 01 44 30 + 00010: 81 F2 A0 03 02 01 02 02 02 30 39 30 0A 06 08 2A + 00020: 85 03 07 01 01 03 02 30 1B 31 19 30 17 06 03 55 + 00030: 04 03 13 10 67 6F 73 74 2E 65 78 61 6D 70 6C 65 + 00040: 2E 63 6F 6D 30 1E 17 0D 32 30 30 32 32 38 31 31 + 00050: 30 38 33 37 5A 17 0D 33 30 30 32 32 35 31 31 30 + 00060: 38 33 37 5A 30 1B 31 19 30 17 06 03 55 04 03 13 + 00070: 10 67 6F 73 74 2E 65 78 61 6D 70 6C 65 2E 63 6F + 00080: 6D 30 5E 30 17 06 08 2A 85 03 07 01 01 01 01 30 + 00090: 0B 06 09 2A 85 03 07 01 02 01 01 02 03 43 00 04 + 000A0: 40 F3 83 CE E8 30 48 B4 EB 14 C7 1A 7F 6D E4 4A + 000B0: 37 CE 11 A6 AC 17 50 F1 CF B8 DA D8 A3 8C CD D8 + 000C0: FD 06 65 6F 7C FC 07 5F 40 83 C3 71 62 21 47 8F + 000D0: 1E E2 4C 6B 1B 70 CC E3 C7 2A FD 2A CE 65 C7 75 + 000E0: BC A3 21 30 1F 30 1D 06 03 55 1D 0E 04 16 04 14 + 000F0: F3 30 FA 71 66 DF 09 5A F3 A0 73 BC 3B 8E A3 56 + 00100: D7 DF AC 71 30 0A 06 08 2A 85 03 07 01 01 03 02 + 00110: 03 41 00 AB 2E DA 23 F4 9B 48 62 3B 0C FF 59 06 + 00120: B7 DD 3C 23 B4 73 57 0B 29 6A 08 71 DD 15 EF 9A + 00130: 33 20 1B 97 90 4A 5C FA 6C 93 1C 54 73 DC 0C 5A + 00140: 5F 2F BB 2E 50 CF 58 7A E2 7C 4D 8E 52 EB 80 18 + 00150: 9D D0 8B 00 00 + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_hs, 1): + 00000: 56 EE 18 13 72 72 49 C9 DC DF 35 13 78 7E DB 93 + 00010: DF 62 C6 1E E7 B1 26 C5 0F 26 C0 AA AF AE 00 E1 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 + + nonce: + 00000: 69 69 FF AA A4 52 52 81 EE BB EB 4C BD 0B 64 0F + + additional_data: + 00000: 17 03 03 01 66 + + TLSInnerPlaintext: + 00000: 0B 00 01 51 00 00 01 4D 00 01 48 30 82 01 44 30 + 00010: 81 F2 A0 03 02 01 02 02 02 30 39 30 0A 06 08 2A + 00020: 85 03 07 01 01 03 02 30 1B 31 19 30 17 06 03 55 + 00030: 04 03 13 10 67 6F 73 74 2E 65 78 61 6D 70 6C 65 + 00040: 2E 63 6F 6D 30 1E 17 0D 32 30 30 32 32 38 31 31 + 00050: 30 38 33 37 5A 17 0D 33 30 30 32 32 35 31 31 30 + 00060: 38 33 37 5A 30 1B 31 19 30 17 06 03 55 04 03 13 + 00070: 10 67 6F 73 74 2E 65 78 61 6D 70 6C 65 2E 63 6F + 00080: 6D 30 5E 30 17 06 08 2A 85 03 07 01 01 01 01 30 + 00090: 0B 06 09 2A 85 03 07 01 02 01 01 02 03 43 00 04 + 000A0: 40 F3 83 CE E8 30 48 B4 EB 14 C7 1A 7F 6D E4 4A + 000B0: 37 CE 11 A6 AC 17 50 F1 CF B8 DA D8 A3 8C CD D8 + 000C0: FD 06 65 6F 7C FC 07 5F 40 83 C3 71 62 21 47 8F + 000D0: 1E E2 4C 6B 1B 70 CC E3 C7 2A FD 2A CE 65 C7 75 + 000E0: BC A3 21 30 1F 30 1D 06 03 55 1D 0E 04 16 04 14 + 000F0: F3 30 FA 71 66 DF 09 5A F3 A0 73 BC 3B 8E A3 56 + 00100: D7 DF AC 71 30 0A 06 08 2A 85 03 07 01 01 03 02 + 00110: 03 41 00 AB 2E DA 23 F4 9B 48 62 3B 0C FF 59 06 + 00120: B7 DD 3C 23 B4 73 57 0B 29 6A 08 71 DD 15 EF 9A + 00130: 33 20 1B 97 90 4A 5C FA 6C 93 1C 54 73 DC 0C 5A + 00140: 5F 2F BB 2E 50 CF 58 7A E2 7C 4D 8E 52 EB 80 18 + 00150: 9D D0 8B 00 00 16 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0166 + encrypted_record: F57944FE9A599A76E7FE9C26E3FCE5BB + AC4DDCF68EF2E77624E33E80B6743E39 + 10502EE419A219B3BB6A1712D15458BB + 897D3DAC7A48769945C89237DFB86620 + CC31C456B4374B075905E42AB5333742 + 3463819982DC6D76A067C4FD83BD3E47 + 9CD9B7FD2926A5A63B1E88B1525DB976 + C7F409190F955AE9F0AC5F976A471F23 + 675DEB9B24E162D24F494ECDC483A070 + 7129F3BD17D0FAC4944F2B3BF140D616 + D654709297495B23898893B211505856 + EEC1A96BC4DCF78A016798E5500D662C + 54A74BDF6A7F300AC9B72299B4F15F6F + 449F396CE1D0C9243CBC1C86BECD5CAB + BFDF50197B7AFF4BE903D7E3311B729B + C32D09D2D0DCE06622985AE037DC2F87 + CB0C492F2D5106B259CC86E227CC8338 + C1DF6C63576B17DB9655FD255F156E1F + 4F767FAFB74471731E4225256818DE94 + 64218263D7CF7B87EB5222E76DE6C951 + E462CCCCC53E06387BB4FEDEFD34B9C1 + 3AB4EE3D49057CD2672F852A5F692408 + 29B92341CDC9 + + TLSCiphertext: + 00000: 17 03 03 01 66 F5 79 44 FE 9A 59 9A 76 E7 FE 9C + 00010: 26 E3 FC E5 BB AC 4D DC F6 8E F2 E7 76 24 E3 3E + 00020: 80 B6 74 3E 39 10 50 2E E4 19 A2 19 B3 BB 6A 17 + 00030: 12 D1 54 58 BB 89 7D 3D AC 7A 48 76 99 45 C8 92 + 00040: 37 DF B8 66 20 CC 31 C4 56 B4 37 4B 07 59 05 E4 + 00050: 2A B5 33 37 42 34 63 81 99 82 DC 6D 76 A0 67 C4 + 00060: FD 83 BD 3E 47 9C D9 B7 FD 29 26 A5 A6 3B 1E 88 + 00070: B1 52 5D B9 76 C7 F4 09 19 0F 95 5A E9 F0 AC 5F + 00080: 97 6A 47 1F 23 67 5D EB 9B 24 E1 62 D2 4F 49 4E + 00090: CD C4 83 A0 70 71 29 F3 BD 17 D0 FA C4 94 4F 2B + 000A0: 3B F1 40 D6 16 D6 54 70 92 97 49 5B 23 89 88 93 + 000B0: B2 11 50 58 56 EE C1 A9 6B C4 DC F7 8A 01 67 98 + 000C0: E5 50 0D 66 2C 54 A7 4B DF 6A 7F 30 0A C9 B7 22 + 000D0: 99 B4 F1 5F 6F 44 9F 39 6C E1 D0 C9 24 3C BC 1C + 000E0: 86 BE CD 5C AB BF DF 50 19 7B 7A FF 4B E9 03 D7 + 000F0: E3 31 1B 72 9B C3 2D 09 D2 D0 DC E0 66 22 98 5A + 00100: E0 37 DC 2F 87 CB 0C 49 2F 2D 51 06 B2 59 CC 86 + 00110: E2 27 CC 83 38 C1 DF 6C 63 57 6B 17 DB 96 55 FD + 00120: 25 5F 15 6E 1F 4F 76 7F AF B7 44 71 73 1E 42 25 + 00130: 25 68 18 DE 94 64 21 82 63 D7 CF 7B 87 EB 52 22 + 00140: E7 6D E6 C9 51 E4 62 CC CC C5 3E 06 38 7B B4 FE + 00150: DE FD 34 B9 C1 3A B4 EE 3D 49 05 7C D2 67 2F 85 + 00160: 2A 5F 69 24 08 29 B9 23 41 CD C9 + + ---------------------------Server--------------------------- + + HMCertificateVerify = (ClientHello, ServerHello, + EncryptedExtensions, Certificate) + + Transcript-Hash(HMCertificateVerify): + 00000: E0 CC 4B C1 4B EC 5D 13 19 2C DC 66 22 B4 FD A9 + 00010: 67 6A 1B 50 E4 56 83 0B B5 F0 7E 01 21 22 73 06 + + k (random for signature algorithm): + 00000: 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 + 00010: 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 + + sgn: + 00000: A0 AA 13 91 5C 5B 80 C6 02 E2 FD 85 80 4F 99 2C + 00010: 77 15 97 AD 37 85 7A D6 BC 2A 9D 7B C5 FE BE C3 + 00020: 7C 72 94 BA A2 3C F6 9D 03 E4 71 0B D7 08 13 FD + 00030: AC 59 6B C1 58 E7 56 BD 37 1C 44 2E 95 22 DE 87 + + CertificateVerify message: + msg_type: 0F + length: 000044 + body: + algorithm: 070A + signature: + length: 0040 + vector: + A0AA13915C5B80C602E2FD85804F992C + 771597AD37857AD6BC2A9D7BC5FEBEC3 + 7C7294BAA23CF69D03E4710BD70813FD + AC596BC158E756BD371C442E9522DE87 + + 00000: 0F 00 00 44 07 0A 00 40 A0 AA 13 91 5C 5B 80 C6 + 00010: 02 E2 FD 85 80 4F 99 2C 77 15 97 AD 37 85 7A D6 + 00020: BC 2A 9D 7B C5 FE BE C3 7C 72 94 BA A2 3C F6 9D + 00030: 03 E4 71 0B D7 08 13 FD AC 59 6B C1 58 E7 56 BD + 00040: 37 1C 44 2E 95 22 DE 87 + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_hs, 2): + 00000: 56 EE 18 13 72 72 49 C9 DC DF 35 13 78 7E DB 93 + 00010: DF 62 C6 1E E7 B1 26 C5 0F 26 C0 AA AF AE 00 E1 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 + + nonce: + 00000: 69 69 FF AA A4 52 52 81 EE BB EB 4C BD 0B 64 0C + + additional_data: + 00000: 17 03 03 00 59 + + TLSInnerPlaintext: + 00000: 0F 00 00 44 07 0A 00 40 A0 AA 13 91 5C 5B 80 C6 + 00010: 02 E2 FD 85 80 4F 99 2C 77 15 97 AD 37 85 7A D6 + 00020: BC 2A 9D 7B C5 FE BE C3 7C 72 94 BA A2 3C F6 9D + 00030: 03 E4 71 0B D7 08 13 FD AC 59 6B C1 58 E7 56 BD + 00040: 37 1C 44 2E 95 22 DE 87 16 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0059 + encrypted_record: 52631D5BFDF48254BDFB5F9E02A6A527 + 0163BCE1E0D818E8D74176535C6CDD25 + 2DE065AE77984A65ADBA036D59CF45B9 + A0047BABCCD0B28044D34BCFD09E6E46 + 27044B26FE5CA734FCB08607146F41A8 + 71C3F95384B48ADABC + + TLSCiphertext: + 00000: 17 03 03 00 59 52 63 1D 5B FD F4 82 54 BD FB 5F + 00010: 9E 02 A6 A5 27 01 63 BC E1 E0 D8 18 E8 D7 41 76 + 00020: 53 5C 6C DD 25 2D E0 65 AE 77 98 4A 65 AD BA 03 + 00030: 6D 59 CF 45 B9 A0 04 7B AB CC D0 B2 80 44 D3 4B + 00040: CF D0 9E 6E 46 27 04 4B 26 FE 5C A7 34 FC B0 86 + 00050: 07 14 6F 41 A8 71 C3 F9 53 84 B4 8A DA BC + + ---------------------------Server--------------------------- + + server_finished_key = HKDF-Expand-Label(SHTS, "finished", "", 32): + 00000: 53 F1 C0 38 8F 8A 70 C0 BC A0 DD 21 A0 30 F2 38 + 00010: 1C 34 37 CD 0E 7E C9 3D 0A 96 5E 25 63 2D D7 9A + + HMFinished = (ClientHello, ServerHello, EncryptedExtensions + Certificate, CertificateVerify) + + Transcript-Hash(HMFinished): + 00000: 03 EC 9B 1D 0B 37 41 42 45 72 BA C9 DF 3A A5 2C + 00010: 03 EF E9 E9 58 07 69 43 AF D8 58 19 BC 60 2F 46 + + FinishedHash = + HMAC(server_finished_key,Transcript-Hash(HMFinished)): + 00000: E0 BA A3 36 14 E0 69 69 7E 4D FA B0 71 B9 72 57 + 00010: 73 F8 FE 1A 32 6A 66 2D 0F 52 30 9B 45 B6 E0 31 + + Finished message: + msg_type: 14 + length: 000020 + body: + verify_data: E0BAA33614E069697E4DFAB071B97257 + 73F8FE1A326A662D0F52309B45B6E031 + + 00000: 14 00 00 20 E0 BA A3 36 14 E0 69 69 7E 4D FA B0 + 00010: 71 B9 72 57 73 F8 FE 1A 32 6A 66 2D 0F 52 30 9B + 00020: 45 B6 E0 31 + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_hs, 3): + 00000: 56 EE 18 13 72 72 49 C9 DC DF 35 13 78 7E DB 93 + 00010: DF 62 C6 1E E7 B1 26 C5 0F 26 C0 AA AF AE 00 E1 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 + + nonce: + 00000: 69 69 FF AA A4 52 52 81 EE BB EB 4C BD 0B 64 0D + + additional_data: + 00000: 17 03 03 00 35 + + TLSInnerPlaintext: + 00000: 14 00 00 20 E0 BA A3 36 14 E0 69 69 7E 4D FA B0 + 00010: 71 B9 72 57 73 F8 FE 1A 32 6A 66 2D 0F 52 30 9B + 00020: 45 B6 E0 31 16 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0035 + encrypted_record: 57B1706C4918F67EACCA457F7D5B537C + CE5036B4004C778022B97EE802320398 + 119404506680ADD7D6A6CD7C8153B755 + 3C6E646AD6 + + TLSCiphertext: + 00000: 17 03 03 00 35 57 B1 70 6C 49 18 F6 7E AC CA 45 + 00010: 7F 7D 5B 53 7C CE 50 36 B4 00 4C 77 80 22 B9 7E + 00020: E8 02 32 03 98 11 94 04 50 66 80 AD D7 D6 A6 CD + 00030: 7C 81 53 B7 55 3C 6E 64 6A D6 + + ---------------------------Server--------------------------- + Application Data: + HELO gost.example.com\r\n + + Record payload protection: + + Derived #1 = Derive-Secret(HandshakeSecret, "derived", "") = + HKDF-Expand-Label(HandshakeSecret, "derived", "", 32): + 00000: EA 3C 54 BB D1 4E F9 D7 50 77 6F AB E3 95 BE 2A + 00010: BD DB BB B7 1C 13 C2 BD 60 9E 35 15 79 4A FA 02 + + MainSecret = HKDF-Extract(Salt: Derived #1, IKM: 0^256): + 00000: 31 BB 1D 61 2C CD 53 32 68 8A 55 1A 48 CA 25 0F + 00010: 24 78 3D 4A B0 B4 A7 6D 3F E5 06 7A 26 16 A4 A3 + + HM2 = (ClientHello, ServerHello, EncryptedExtensions, Certificate, + CertificateVerify, Server Finished) + + TH2 = Transcript-Hash(HM2): + 00000: 9E BC 5F BE 32 D9 F4 0D 48 F8 EE CE BB 62 31 A5 + 00010: 33 C2 C0 EF 24 32 77 B9 6D 6F 7A D3 BB FD 14 94 + + server_application_traffic_secret (SATS): + SATS = Derive-Secret(MainSecret, "s ap traffic", HM2) = + HKDF-Expand-Label(MainSecret, "s ap traffic", TH2, 32): + 00000: 87 73 4F 4B 4C FD 17 B9 7B 83 4D 82 2D 9D 73 79 + 00010: F6 F5 E0 3B 80 B5 2A EB 2A FF 51 0E DD 83 DB D2 + + server_write_key_ap = HKDF-Expand-Label(SATS, "key", "", 32): + 00000: 47 5E 4C 51 4C C6 31 8C 3A 5F 00 0F 12 65 BD 1A + 00010: B5 F0 DE 1A F3 57 ED 00 79 EC 5F F0 AF BD 03 0C + + server_write_iv_ap = HKDF-Expand-Label(SATS, "iv", "", 16): + 00000: AF E9 1F 71 18 35 40 26 31 7E 1A B4 D8 22 17 B8 + + server_record_write_key = TLSTREE(server_write_key_ap, 0): + 00000: C8 FC 93 D7 C5 86 F2 B0 A3 10 1B AA 6A 97 9E 4E + 00010: 38 86 70 65 51 E8 11 87 E9 78 80 40 9C 7E 8E E9 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + nonce: + 00000: 2F E9 1F 71 18 35 40 26 31 7E 1A B4 D8 22 17 B8 + + additional_data: + 00000: 17 03 03 00 28 + + TLSInnerPlaintext: + 00000: 48 45 4C 4F 20 67 6F 73 74 2E 65 78 61 6D 70 6C + 00010: 65 2E 63 6F 6D 0D 0A 17 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0028 + encrypted_record: ABB8C372C79681DCE5C3C909DD039D59 + 8161FD3E6CE5D6F9CA5715BD6B5C1824 + 7FB26AC1AB396A4E + + TLSCiphertext: + 00000: 17 03 03 00 28 AB B8 C3 72 C7 96 81 DC E5 C3 C9 + 00010: 09 DD 03 9D 59 81 61 FD 3E 6C E5 D6 F9 CA 57 15 + 00020: BD 6B 5C 18 24 7F B2 6A C1 AB 39 6A 4E + + ---------------------------Client--------------------------- + + client_finished_key = HKDF-Expand-Label(CHTS, "finished", "", 32): + 00000: 2F 21 54 8C F5 27 78 69 AE 49 0D E7 BC 15 AC E6 + 00010: 39 F6 57 E3 58 2A 5A 63 4B 0A 91 56 95 D5 4C 42 + + HM2 = (ClientHello, ServerHello, EncryptedExtensions, Certificate, + CertificateVerify, Server Finished) + + TH2 = Transcript-Hash(HM2): + 00000: 9E BC 5F BE 32 D9 F4 0D 48 F8 EE CE BB 62 31 A5 + 00010: 33 C2 C0 EF 24 32 77 B9 6D 6F 7A D3 BB FD 14 94 + + FinishedHash = + HMAC(client_finished_key, TH2): + 00000: 08 5F C7 FD 79 B6 D1 11 CD 8D 3F F6 B2 3A 06 5A + 00010: 7A F7 A6 38 73 42 A5 F3 57 68 14 CD 00 47 19 D2 + + Finished message: + msg_type: 14 + length: 000020 + body: + verify_data: 085FC7FD79B6D111CD8D3FF6B23A065A + 7AF7A6387342A5F3576814CD004719D2 + + 00000: 14 00 00 20 08 5F C7 FD 79 B6 D1 11 CD 8D 3F F6 + 00010: B2 3A 06 5A 7A F7 A6 38 73 42 A5 F3 57 68 14 CD + 00020: 00 47 19 D2 + + Record payload protection: + + EarlySecret = HKDF-Extract(Salt: 0^256, IKM: 0^256): + 00000: FB DE FB E5 27 FE EA 66 5A AB 92 77 A2 16 3B 83 + 00010: 43 08 4F D1 91 C4 60 66 26 0F AC 6F D1 43 6C 72 + + Derived #0 = Derive-Secret(EarlySecret, "derived", "") = + HKDF-Expand-Label(EarlySecret, "derived", "", 32): + 00000: DB C3 C8 26 D8 77 A3 B7 D2 D2 45 3D BF DC 6C FB + 00010: FB 11 51 B3 E8 4F 0C 8F 26 01 1D 8D 5B F3 ED F7 + + HandshakeSecret = HKDF-Extract(Salt: Derived #0, IKM: ECDHE): + 00000: 44 24 5E 2C 43 32 D1 F7 8B 0F 8D 16 F4 03 EB 69 + 00010: ED 2A 40 53 84 7C DC 39 FA 8B 3D 29 74 F7 45 E7 + + HM1 = (ClientHello, ServerHello) + + TH1 = Transcript-Hash(HM1): + 00000: 99 3B A7 22 12 4A F3 CB FD 47 71 E7 FA E3 2A C1 + 00010: D0 E9 27 8C F7 84 3F CB C6 20 E1 A0 08 5A 87 A1 + + client_handshake_traffic_secret (CHTS): + CHTS = Derive-Secret(HandshakeSecret, "c hs traffic", HM1) = + HKDF-Expand-Label(HandshakeSecret, "c hs traffic", TH1, 32): + 00000: B3 F7 11 3D 35 26 55 4F E6 55 E5 6F AB 79 B1 A0 + 00010: 3D E3 35 96 E3 30 88 C7 78 37 19 A9 A4 B0 DC CD + + client_write_key_hs = HKDF-Expand-Label(CHTS, "key", "", 32): + 00000: 58 16 88 D7 6E FE 12 2B B5 5F 62 B3 8E F0 1B CC + 00010: 8C 88 DB 83 E9 EA 4D 55 D3 89 8C 53 72 1F C3 84 + + client_write_iv_hs = HKDF-Expand-Label(CHTS, "iv", "", 16): + 00000: 43 9A 07 45 3D 0B EA 0C 1D 1B EB 73 8E B5 B8 DD + + client_record_write_key = TLSTREE(client_write_key_hs, 0): + 00000: E1 C5 9B 41 69 D8 96 10 7F 78 45 68 93 A3 75 1E + 00010: 15 73 54 3D AD 8C B7 40 69 E6 81 4A 51 3B BB 1C + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + nonce: + 00000: 43 9A 07 45 3D 0B EA 0C 1D 1B EB 73 8E B5 B8 DD + + additional_data: + 00000: 17 03 03 00 35 + + TLSInnerPlaintext: + 00000: 14 00 00 20 08 5F C7 FD 79 B6 D1 11 CD 8D 3F F6 + 00010: B2 3A 06 5A 7A F7 A6 38 73 42 A5 F3 57 68 14 CD + 00020: 00 47 19 D2 16 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0035 + encrypted_record: C9C65EAAB4A80E04849A122EB0CC26A9 + CA6B5DD4DB7AD6813949F629FC09E052 + 2FF7ACDBBA93926C20008B8CCE865422 + 7B31D439F8 + + TLSCiphertext: + 00000: 17 03 03 00 35 C9 C6 5E AA B4 A8 0E 04 84 9A 12 + 00010: 2E B0 CC 26 A9 CA 6B 5D D4 DB 7A D6 81 39 49 F6 + 00020: 29 FC 09 E0 52 2F F7 AC DB BA 93 92 6C 20 00 8B + 00030: 8C CE 86 54 22 7B 31 D4 39 F8 + + ---------------------------Server--------------------------- + + NewSessionTicket message: + msg_type: 04 + length: 000035 + body: + ticket_lifetime: 00093A80 + ticket_age_add: 86868686 + ticket_nonce: + length: 08 + vector: 0000000000000000 + ticket: + length: 0020 + vector: 88888888888888888888888888888888 + 88888888888888888888888888888888 + extensions: + length: 0000 + vector: -- + + 00000: 04 00 00 35 00 09 3A 80 86 86 86 86 08 00 00 00 + 00010: 00 00 00 00 00 00 20 88 88 88 88 88 88 88 88 88 + 00020: 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 + 00030: 88 88 88 88 88 88 88 00 00 + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_ap, 1): + 00000: C8 FC 93 D7 C5 86 F2 B0 A3 10 1B AA 6A 97 9E 4E + 00010: 38 86 70 65 51 E8 11 87 E9 78 80 40 9C 7E 8E E9 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 + + nonce: + 00000: 2F E9 1F 71 18 35 40 26 31 7E 1A B4 D8 22 17 B9 + + additional_data: + 00000: 17 03 03 00 4A + + TLSInnerPlaintext: + 00000: 04 00 00 35 00 09 3A 80 86 86 86 86 08 00 00 00 + 00010: 00 00 00 00 00 00 20 88 88 88 88 88 88 88 88 88 + 00020: 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 + 00030: 88 88 88 88 88 88 88 00 00 16 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 004A + encrypted_record: CA6688A5DC22208DC8A8DE7E597292E3 + CB5D454945B8F06C7C50F1823D7B6BB0 + 021178AE3ADB2DE3994539FD696945CF + AA6919F3F1294CD41ED2A8EA75302869 + ACB994F3920B09D67186 + + TLSCiphertext: + 00000: 17 03 03 00 4A CA 66 88 A5 DC 22 20 8D C8 A8 DE + 00010: 7E 59 72 92 E3 CB 5D 45 49 45 B8 F0 6C 7C 50 F1 + 00020: 82 3D 7B 6B B0 02 11 78 AE 3A DB 2D E3 99 45 39 + 00030: FD 69 69 45 CF AA 69 19 F3 F1 29 4C D4 1E D2 A8 + 00040: EA 75 30 28 69 AC B9 94 F3 92 0B 09 D6 71 86 + + ---------------------------Server--------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Pad: 15360 bytes + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_ap, 2): + 00000: C8 FC 93 D7 C5 86 F2 B0 A3 10 1B AA 6A 97 9E 4E + 00010: 38 86 70 65 51 E8 11 87 E9 78 80 40 9C 7E 8E E9 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 + + nonce: + 00000: 2F E9 1F 71 18 35 40 26 31 7E 1A B4 D8 22 17 BA + + additional_data: + 00000: 17 03 03 40 11 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000410: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 00004000: 00 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 4011 + encrypted_record: 9B3AD6939F05A403EEB1A636E13989D9 + 1CCA6A45BE5B7CB5C980020627A1B2AD + 34AC4B5AAE5BD445C91C28325E4C7149 + 188D55EF27016D80AF440704820BCE22 + CE501EA619A4FF7CD9F722A28391CE8B + B86BF87D5A85555BEF59A9C9A1572F38 + 114E64FD04A0DB2E1787A585EA51DCAB + B95DAFB73D0B3FE3F0702C5E1AA01571 + 17D884783E5E6113F6CA8352F6CF49F9 + DB3B3DAB380BFD7BE04B0A [...] + 64E7027D926E0F95AB7F133B5921F996 + A81EB67B78449DD32F4511E013206524 + AD4AFACF0B1C1622282CB20A965E670C + C9A17E13F343AF3825AFD58B06915BDC + 9E49477F02830694F5AC7CC99C887F62 + CDAAEF0053766FB12BC9A082C157C347 + 21C5400C376088A660EE4329ED645D7C + 07D4DA1ABDF6F9A1B9D51BF3E09CFCC1 + A59CD96F07FC9ACF004EA1B20E6BBDAD + 7BBF0C9E2A1B + + TLSCiphertext: + 00000000: 17 03 03 40 11 9B 3A D6 93 9F 05 A4 03 EE B1 A6 + 00000010: 36 E1 39 89 D9 1C CA 6A 45 BE 5B 7C B5 C9 80 02 + 00000020: 06 27 A1 B2 AD 34 AC 4B 5A AE 5B D4 45 C9 1C 28 + 00000030: 32 5E 4C 71 49 18 8D 55 EF 27 01 6D 80 AF 44 07 + 00000040: 04 82 0B CE 22 CE 50 1E A6 19 A4 FF 7C D9 F7 22 + 00000050: A2 83 91 CE 8B B8 6B F8 7D 5A 85 55 5B EF 59 A9 + 00000060: C9 A1 57 2F 38 11 4E 64 FD 04 A0 DB 2E 17 87 A5 + 00000070: 85 EA 51 DC AB B9 5D AF B7 3D 0B 3F E3 F0 70 2C + 00000080: 5E 1A A0 15 71 17 D8 84 78 3E 5E 61 13 F6 CA 83 + 00000090: 52 F6 CF 49 F9 DB 3B 3D AB 38 0B FD 7B E0 4B 0A + [...] + 00003F80: 64 E7 02 7D 92 6E 0F 95 AB 7F 13 3B 59 21 F9 96 + 00003F90: A8 1E B6 7B 78 44 9D D3 2F 45 11 E0 13 20 65 24 + 00003FA0: AD 4A FA CF 0B 1C 16 22 28 2C B2 0A 96 5E 67 0C + 00003FB0: C9 A1 7E 13 F3 43 AF 38 25 AF D5 8B 06 91 5B DC + 00003FC0: 9E 49 47 7F 02 83 06 94 F5 AC 7C C9 9C 88 7F 62 + 00003FD0: CD AA EF 00 53 76 6F B1 2B C9 A0 82 C1 57 C3 47 + 00003FE0: 21 C5 40 0C 37 60 88 A6 60 EE 43 29 ED 64 5D 7C + 00003FF0: 07 D4 DA 1A BD F6 F9 A1 B9 D5 1B F3 E0 9C FC C1 + 00004000: A5 9C D9 6F 07 FC 9A CF 00 4E A1 B2 0E 6B BD AD + 00004010: 7B BF 0C 9E 2A 1B + + ---------------------------Server--------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Pad: 15360 bytes + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_ap, 3): + 00000: C8 FC 93 D7 C5 86 F2 B0 A3 10 1B AA 6A 97 9E 4E + 00010: 38 86 70 65 51 E8 11 87 E9 78 80 40 9C 7E 8E E9 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 + + nonce: + 00000: 2F E9 1F 71 18 35 40 26 31 7E 1A B4 D8 22 17 BB + + additional_data: + 00000: 17 03 03 40 11 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000410: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 00004000: 00 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 4011 + encrypted_record: F06C5032F8A7AD58CED14D5383ED969E + 628DE4F35CF9B6FCF5047D9B02261F56 + F724DE961F8FF9C27AE76FBAC0A18E96 + AA30CA7D8EBAD5B5135A0962515CC4F2 + A16EBAB9A08886ED4EFD9DFAEC158F94 + EFB0F90725C9114D9D8D904A18ABF184 + E74B07150B2F2F27CB8032064943C957 + 11E480E4F4FCE8E9F020D5C90489E734 + AEA10D91C7097AEC8CD6D5E3EEC764B0 + CD447FC07735F0F8D9D490 [...] + 3A79E7B3BCFD2B2478092911073A7CC9 + 6AC626C30DD0A5612DBBFF26E35AF0BB + 5CEC24EED391100533FB999D4873ED5D + 5E4693C5EEDC3ECC3C6EFF041B0A7F42 + 25A1092F4AADD9A508C7A56CB13A3F33 + E844E28C8ADCD45250F4EE29834C5CAA + C50B5EBF94501785664E78AE9B5FDBFA + DF730DED97985D659135F5DABAD883FF + AC6046A0F629881F76147646D8E2A867 + 3B14295621F7 + + + TLSCiphertext: + 00000000: 17 03 03 40 11 F0 6C 50 32 F8 A7 AD 58 CE D1 4D + 00000010: 53 83 ED 96 9E 62 8D E4 F3 5C F9 B6 FC F5 04 7D + 00000020: 9B 02 26 1F 56 F7 24 DE 96 1F 8F F9 C2 7A E7 6F + 00000030: BA C0 A1 8E 96 AA 30 CA 7D 8E BA D5 B5 13 5A 09 + 00000040: 62 51 5C C4 F2 A1 6E BA B9 A0 88 86 ED 4E FD 9D + 00000050: FA EC 15 8F 94 EF B0 F9 07 25 C9 11 4D 9D 8D 90 + 00000060: 4A 18 AB F1 84 E7 4B 07 15 0B 2F 2F 27 CB 80 32 + 00000070: 06 49 43 C9 57 11 E4 80 E4 F4 FC E8 E9 F0 20 D5 + 00000080: C9 04 89 E7 34 AE A1 0D 91 C7 09 7A EC 8C D6 D5 + 00000090: E3 EE C7 64 B0 CD 44 7F C0 77 35 F0 F8 D9 D4 90 + [...] + 00003F80: 3A 79 E7 B3 BC FD 2B 24 78 09 29 11 07 3A 7C C9 + 00003F90: 6A C6 26 C3 0D D0 A5 61 2D BB FF 26 E3 5A F0 BB + 00003FA0: 5C EC 24 EE D3 91 10 05 33 FB 99 9D 48 73 ED 5D + 00003FB0: 5E 46 93 C5 EE DC 3E CC 3C 6E FF 04 1B 0A 7F 42 + 00003FC0: 25 A1 09 2F 4A AD D9 A5 08 C7 A5 6C B1 3A 3F 33 + 00003FD0: E8 44 E2 8C 8A DC D4 52 50 F4 EE 29 83 4C 5C AA + 00003FE0: C5 0B 5E BF 94 50 17 85 66 4E 78 AE 9B 5F DB FA + 00003FF0: DF 73 0D ED 97 98 5D 65 91 35 F5 DA BA D8 83 FF + 00004000: AC 60 46 A0 F6 29 88 1F 76 14 76 46 D8 E2 A8 67 + 00004010: 3B 14 29 56 21 F7 + + ---------------------------Server--------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Pad: 15360 bytes + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_ap, 8): + 00000: D3 CD 87 D5 68 74 07 82 39 78 34 4C 06 B9 28 A8 + 00010: 58 98 B7 39 A3 1D 3D E5 FF 2B 78 8E F3 91 96 ED + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 + + nonce: + 00000: 2F E9 1F 71 18 35 40 26 31 7E 1A B4 D8 22 17 B0 + + additional_data: + 00000: 17 03 03 40 11 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000410: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 00004000: 00 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 4011 + encrypted_record: E3DF00F169A76FA19FE55FA304E0A552 + 5A28FDBD3DD4CA654B89140EFD69E263 + 28A65A77F5D8B2E2F73568F7A677E5DF + 8D225FAA8ED5FED98F09963FF1E82161 + 81595E9FA6989CCABC2150CA668D70EA + 8CB6F62BCC528D26B52FB27AB70F194A + 30E5C9085D9323D38745093070D15650 + 52468045F3398DC5BF93D6A983956E1D + 3077337B773DAF4B9A6BA5BC569A251D + 34FE23DF7B9343A0550094 [...] + 2B516EE4A4971FD26EFB9293981435E9 + FCC560B618B8ED0A52589E7342C25325 + 11C3D7C145559B8119BC02CB22CBF1EB + 915578E8468806B2D0728C591B617354 + CC47D51FF2363197A559018AD3498846 + AD167DD086BD12EF52179D45ABF06C28 + 97B0C1D8AAD49413E0CCC086586D537A + 296F9CEEB7E7E1DD2537540232C6BD71 + 619FC93BAE3FD8B0C95EA9915B6127B9 + 9F87884541F7 + + TLSCiphertext: + 00000000: 17 03 03 40 11 E3 DF 00 F1 69 A7 6F A1 9F E5 5F + 00000010: A3 04 E0 A5 52 5A 28 FD BD 3D D4 CA 65 4B 89 14 + 00000020: 0E FD 69 E2 63 28 A6 5A 77 F5 D8 B2 E2 F7 35 68 + 00000030: F7 A6 77 E5 DF 8D 22 5F AA 8E D5 FE D9 8F 09 96 + 00000040: 3F F1 E8 21 61 81 59 5E 9F A6 98 9C CA BC 21 50 + 00000050: CA 66 8D 70 EA 8C B6 F6 2B CC 52 8D 26 B5 2F B2 + 00000060: 7A B7 0F 19 4A 30 E5 C9 08 5D 93 23 D3 87 45 09 + 00000070: 30 70 D1 56 50 52 46 80 45 F3 39 8D C5 BF 93 D6 + 00000080: A9 83 95 6E 1D 30 77 33 7B 77 3D AF 4B 9A 6B A5 + 00000090: BC 56 9A 25 1D 34 FE 23 DF 7B 93 43 A0 55 00 94 + [...] + 00003F80: 2B 51 6E E4 A4 97 1F D2 6E FB 92 93 98 14 35 E9 + 00003F90: FC C5 60 B6 18 B8 ED 0A 52 58 9E 73 42 C2 53 25 + 00003FA0: 11 C3 D7 C1 45 55 9B 81 19 BC 02 CB 22 CB F1 EB + 00003FB0: 91 55 78 E8 46 88 06 B2 D0 72 8C 59 1B 61 73 54 + 00003FC0: CC 47 D5 1F F2 36 31 97 A5 59 01 8A D3 49 88 46 + 00003FD0: AD 16 7D D0 86 BD 12 EF 52 17 9D 45 AB F0 6C 28 + 00003FE0: 97 B0 C1 D8 AA D4 94 13 E0 CC C0 86 58 6D 53 7A + 00003FF0: 29 6F 9C EE B7 E7 E1 DD 25 37 54 02 32 C6 BD 71 + 00004000: 61 9F C9 3B AE 3F D8 B0 C9 5E A9 91 5B 61 27 B9 + 00004010: 9F 87 88 45 41 F7 + + ---------------------------Server--------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Pad: 15360 bytes + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_ap, 9): + 00000: D3 CD 87 D5 68 74 07 82 39 78 34 4C 06 B9 28 A8 + 00010: 58 98 B7 39 A3 1D 3D E5 FF 2B 78 8E F3 91 96 ED + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 + + nonce: + 00000: 2F E9 1F 71 18 35 40 26 31 7E 1A B4 D8 22 17 B1 + + additional_data: + 00000: 17 03 03 40 11 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000410: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 00004000: 00 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 4011 + encrypted_record: 4AFCD1257E2C8D4626BC0BFBB30F2F9C + A57A9D0DEC090B4248CAADDFE7AA4AEB + 770F285384FEA308CADE2EEF318148C2 + BED4870ABEE1955CCA41CE8344C3EDA4 + 7C2512CDD19FD54C7E0260BBC7BD8DD1 + EE9D4EBADD3D7915D0A029D7847CA05D + 078068CC8A792FED69A4E655A6E6D22D + A134ECA2BDECA1E59D3AE7313E45E785 + AF89A8F1890BFCC59F03F39C4FB2337C + 326D94FA04F5548619D6DC [...] + 79B6F56B6EBF8B8860436EFF9D8F03CC + 73BDF446D30F918AF8FF8BA2D078D243 + 1AC04657D7871203F15969F160820D7D + FCA78F65FF954CE5549F2C78AA3A0885 + 04527FC561B6AE06020A8772B75CE933 + 6CAC35B536A50DB26930BFA21E9EB56E + A20E39CC2BBBA66D41C2E8720AA0143D + 298D8036D7B0090A0214F58C5B1890A7 + 5B4783820395E39421F4357A49597EB0 + 64123818EACE + + TLSCiphertext: + 00000000: 17 03 03 40 11 4A FC D1 25 7E 2C 8D 46 26 BC 0B + 00000010: FB B3 0F 2F 9C A5 7A 9D 0D EC 09 0B 42 48 CA AD + 00000020: DF E7 AA 4A EB 77 0F 28 53 84 FE A3 08 CA DE 2E + 00000030: EF 31 81 48 C2 BE D4 87 0A BE E1 95 5C CA 41 CE + 00000040: 83 44 C3 ED A4 7C 25 12 CD D1 9F D5 4C 7E 02 60 + 00000050: BB C7 BD 8D D1 EE 9D 4E BA DD 3D 79 15 D0 A0 29 + 00000060: D7 84 7C A0 5D 07 80 68 CC 8A 79 2F ED 69 A4 E6 + 00000070: 55 A6 E6 D2 2D A1 34 EC A2 BD EC A1 E5 9D 3A E7 + 00000080: 31 3E 45 E7 85 AF 89 A8 F1 89 0B FC C5 9F 03 F3 + 00000090: 9C 4F B2 33 7C 32 6D 94 FA 04 F5 54 86 19 D6 DC + [...] + 00003F80: 79 B6 F5 6B 6E BF 8B 88 60 43 6E FF 9D 8F 03 CC + 00003F90: 73 BD F4 46 D3 0F 91 8A F8 FF 8B A2 D0 78 D2 43 + 00003FA0: 1A C0 46 57 D7 87 12 03 F1 59 69 F1 60 82 0D 7D + 00003FB0: FC A7 8F 65 FF 95 4C E5 54 9F 2C 78 AA 3A 08 85 + 00003FC0: 04 52 7F C5 61 B6 AE 06 02 0A 87 72 B7 5C E9 33 + 00003FD0: 6C AC 35 B5 36 A5 0D B2 69 30 BF A2 1E 9E B5 6E + 00003FE0: A2 0E 39 CC 2B BB A6 6D 41 C2 E8 72 0A A0 14 3D + 00003FF0: 29 8D 80 36 D7 B0 09 0A 02 14 F5 8C 5B 18 90 A7 + 00004000: 5B 47 83 82 03 95 E3 94 21 F4 35 7A 49 59 7E B0 + 00004010: 64 12 38 18 EA CE + + ---------------------------Client----------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Pad: 15360 bytes + + Record payload protection: + + Derived #1 = Derive-Secret(HandshakeSecret, "derived", "") = + HKDF-Expand-Label(HandshakeSecret, "derived", "", 32): + 00000: EA 3C 54 BB D1 4E F9 D7 50 77 6F AB E3 95 BE 2A + 00010: BD DB BB B7 1C 13 C2 BD 60 9E 35 15 79 4A FA 02 + + MainSecret = HKDF-Extract(Salt: Derived #1, IKM: 0^256): + 00000: 31 BB 1D 61 2C CD 53 32 68 8A 55 1A 48 CA 25 0F + 00010: 24 78 3D 4A B0 B4 A7 6D 3F E5 06 7A 26 16 A4 A3 + + HM2 = (ClientHello, ServerHello, EncryptedExtensions, Certificate, + CertificateVerify, Server Finished) + + TH2 = Transcript-Hash(HM2): + 00000: 9E BC 5F BE 32 D9 F4 0D 48 F8 EE CE BB 62 31 A5 + 00010: 33 C2 C0 EF 24 32 77 B9 6D 6F 7A D3 BB FD 14 94 + + client_application_traffic_secret (CATS): + CATS = Derive-Secret(MainSecret, "c ap traffic", HM2) = + HKDF-Expand-Label(MainSecret, "c ap traffic", TH2, 32): + 00000: 8A CF 74 6B EC 31 17 6C BD 14 2C 75 80 6C 27 0A + 00010: 0A EF 6F C3 8E 0D 8F DC B5 A8 85 25 36 3A DE 81 + + client_write_key_ap = HKDF-Expand-Label(CATS, "key", "", 32): + 00000: 7B E6 4E 2C 12 78 7B 5B 8C 87 56 C4 3D 92 FA EF + 00010: 64 F1 5A 3A 3C 10 81 AD 34 BC A5 06 F0 32 24 15 + + client_write_iv_ap = HKDF-Expand-Label(CATS, "iv", "", 16): + 00000: 31 09 57 EF 71 31 44 33 F5 76 CC 9B 00 AD 93 54 + + client_record_write_key = TLSTREE(client_write_key_ap, 0): + 00000: D4 9A 57 15 49 E7 48 94 9F A2 4B 88 34 23 2C A8 + 00010: 75 D3 7A 26 C4 BB 5C 62 A2 61 DA B3 72 65 05 26 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + nonce: + 00000: 31 09 57 EF 71 31 44 33 F5 76 CC 9B 00 AD 93 54 + + additional_data: + 00000: 17 03 03 40 11 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000410: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 00004000: 00 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 4011 + encrypted_record: EA6CB652C7CBE6B50560D0364DC94D90 + 2560DFE55D8B83C8AA919F5A1E5492E7 + 4CA5156F18BEC8EAB6971CAA2D2C1FF1 + 46EA5FEF5D62682601868FFCD2688F34 + 83899C31F6BA87538682E7F895F653C0 + 9BFE95ABF3EEDF7EBB261CCC593DFCB0 + 04F05119567148BB35F3C7B4F09713A6 + 247A047EF29B05F7720E375A6E3264F4 + 7922EAEBE3AA6D1E80832806D5F20E7C + 56662A7128B191829597DB [...] + 6A5184907D9FF8D3FC0994A3C850DDBC + 2D0420EB66EA177FCDD78F16246E2076 + 039C525604F79A007F472AC7A20A4574 + 1B9D96E38E565899D40A724B8A37FF68 + 702BF9A645D04962BBC9C66A35FFD219 + A08A385FE4CDD0A1F3F080BECDF01E45 + 68C338FAD2C850DFEAA98A7F1B95ECA1 + 72BA7F7526E3BFF2EFF2395CE4561867 + DC9DE8FD10F38BCA1E44B0207AF4CCE8 + 8155836330BC + + TLSCiphertext: + 00000000: 17 03 03 40 11 EA 6C B6 52 C7 CB E6 B5 05 60 D0 + 00000010: 36 4D C9 4D 90 25 60 DF E5 5D 8B 83 C8 AA 91 9F + 00000020: 5A 1E 54 92 E7 4C A5 15 6F 18 BE C8 EA B6 97 1C + 00000030: AA 2D 2C 1F F1 46 EA 5F EF 5D 62 68 26 01 86 8F + 00000040: FC D2 68 8F 34 83 89 9C 31 F6 BA 87 53 86 82 E7 + 00000050: F8 95 F6 53 C0 9B FE 95 AB F3 EE DF 7E BB 26 1C + 00000060: CC 59 3D FC B0 04 F0 51 19 56 71 48 BB 35 F3 C7 + 00000070: B4 F0 97 13 A6 24 7A 04 7E F2 9B 05 F7 72 0E 37 + 00000080: 5A 6E 32 64 F4 79 22 EA EB E3 AA 6D 1E 80 83 28 + 00000090: 06 D5 F2 0E 7C 56 66 2A 71 28 B1 91 82 95 97 DB + [...] + 00003F80: 6A 51 84 90 7D 9F F8 D3 FC 09 94 A3 C8 50 DD BC + 00003F90: 2D 04 20 EB 66 EA 17 7F CD D7 8F 16 24 6E 20 76 + 00003FA0: 03 9C 52 56 04 F7 9A 00 7F 47 2A C7 A2 0A 45 74 + 00003FB0: 1B 9D 96 E3 8E 56 58 99 D4 0A 72 4B 8A 37 FF 68 + 00003FC0: 70 2B F9 A6 45 D0 49 62 BB C9 C6 6A 35 FF D2 19 + 00003FD0: A0 8A 38 5F E4 CD D0 A1 F3 F0 80 BE CD F0 1E 45 + 00003FE0: 68 C3 38 FA D2 C8 50 DF EA A9 8A 7F 1B 95 EC A1 + 00003FF0: 72 BA 7F 75 26 E3 BF F2 EF F2 39 5C E4 56 18 67 + 00004000: DC 9D E8 FD 10 F3 8B CA 1E 44 B0 20 7A F4 CC E8 + 00004010: 81 55 83 63 30 BC + + ---------------------------Client----------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Pad: 15360 bytes + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_ap, 1): + 00000: D4 9A 57 15 49 E7 48 94 9F A2 4B 88 34 23 2C A8 + 00010: 75 D3 7A 26 C4 BB 5C 62 A2 61 DA B3 72 65 05 26 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 + + nonce: + 00000: 31 09 57 EF 71 31 44 33 F5 76 CC 9B 00 AD 93 55 + + additional_data: + 00000: 17 03 03 40 11 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000410: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 00004000: 00 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 4011 + encrypted_record: 0D486A03D03A020296EA0AD1D684A9F4 + AE35824129141D3434CEE064FD5E966F + 88D6E8903913417658E46C49B18BB0CC + B29B663D3F380A2CF9E5234BCD27F3A4 + E12EBF3A3C69DB7661B08FC1685FADDE + 50F68028A6E85EE12729D6F9CAD762FF + A6BAB5FC94AC65BAA36885DAF85C9B27 + C68F9E97AB85ECFA760CDD22F9A8C0BA + 6097D7960587CA708834516D9588592D + D1B8E05210BAA640FE6540 [...] + 55A9C5A6557D35B8F1A9804BFA0F2789 + 3EDC6AA0350E9630AFF6C9B06C3CE01D + 5BE51E87EBFFAC58230D074BE121F077 + 9D08F8177AFFFBB36DCEFDD0D0696873 + A772B9A1DA73C681B0F8359EC1C74B6E + 0452095C622C4C797F450CAA4F26975A + 311F41F31C6A617747298CC052A6376F + A46191658FEE5BD8D7A998E7F12E8838 + 7365BAAD4BA490114733FC15A58148E6 + 186484821A94 + + TLSCiphertext: + 00000000: 17 03 03 40 11 0D 48 6A 03 D0 3A 02 02 96 EA 0A + 00000010: D1 D6 84 A9 F4 AE 35 82 41 29 14 1D 34 34 CE E0 + 00000020: 64 FD 5E 96 6F 88 D6 E8 90 39 13 41 76 58 E4 6C + 00000030: 49 B1 8B B0 CC B2 9B 66 3D 3F 38 0A 2C F9 E5 23 + 00000040: 4B CD 27 F3 A4 E1 2E BF 3A 3C 69 DB 76 61 B0 8F + 00000050: C1 68 5F AD DE 50 F6 80 28 A6 E8 5E E1 27 29 D6 + 00000060: F9 CA D7 62 FF A6 BA B5 FC 94 AC 65 BA A3 68 85 + 00000070: DA F8 5C 9B 27 C6 8F 9E 97 AB 85 EC FA 76 0C DD + 00000080: 22 F9 A8 C0 BA 60 97 D7 96 05 87 CA 70 88 34 51 + 00000090: 6D 95 88 59 2D D1 B8 E0 52 10 BA A6 40 FE 65 40 + [...] + 00003F80: 55 A9 C5 A6 55 7D 35 B8 F1 A9 80 4B FA 0F 27 89 + 00003F90: 3E DC 6A A0 35 0E 96 30 AF F6 C9 B0 6C 3C E0 1D + 00003FA0: 5B E5 1E 87 EB FF AC 58 23 0D 07 4B E1 21 F0 77 + 00003FB0: 9D 08 F8 17 7A FF FB B3 6D CE FD D0 D0 69 68 73 + 00003FC0: A7 72 B9 A1 DA 73 C6 81 B0 F8 35 9E C1 C7 4B 6E + 00003FD0: 04 52 09 5C 62 2C 4C 79 7F 45 0C AA 4F 26 97 5A + 00003FE0: 31 1F 41 F3 1C 6A 61 77 47 29 8C C0 52 A6 37 6F + 00003FF0: A4 61 91 65 8F EE 5B D8 D7 A9 98 E7 F1 2E 88 38 + 00004000: 73 65 BA AD 4B A4 90 11 47 33 FC 15 A5 81 48 E6 + 00004010: 18 64 84 82 1A 94 + + ---------------------------Client----------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Pad: 15360 bytes + + Record payload protection: + + client_record_write_key = TLSTREE(client_write_key_ap, 8): + 00000: B8 2D 78 25 D1 5F AE 18 A7 01 32 28 B3 1C B0 C5 + 00010: 97 52 C6 40 9C 5F 78 99 EC C6 95 0F 74 63 C0 90 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 + + nonce: + 00000: 31 09 57 EF 71 31 44 33 F5 76 CC 9B 00 AD 93 5C + + additional_data: + 00000: 17 03 03 40 11 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000410: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 00004000: 00 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 4011 + encrypted_record: F8B5732A300C8EF05FB712A2972F4DB8 + 4BE783A959090398E989516B6A54F333 + 331049283186BD1C42EFD98003A476A2 + 408EACE0D7047FB536979386C26B5523 + F933A4F5BD7048B094EC5F5627EDFA98 + 99DE1AF8D9A493E481BA5DA0857BE15A + 3F21CA01E22092159BAA770569CFBE54 + F653BEFB4A8B32295DEFE992258F4581 + 257E936AF549E82D54EA6C09EF0D987B + F3A3E8453C1548CEF1C349 [...] + 0EF4E88899AA3481AEDAE0E257449F80 + A20CBDF070EC02211B6B9CBA9248B192 + CF75C88A085DBFF77ABCFB1D82DAA421 + 1B487A48230350CBA4F338DD0BFD36D8 + AAC5EE709456B7E317C78E7198FB7264 + 5B45EEFD3F93BF1C021F9E74A2ED2BCC + 1CF5D367B553C7E7E9D80DD2447C7D13 + D0345FEF2976696DFE579E5F71740C71 + 3124CFBAD66C7BB5BC21AAAE2F1E0860 + 5C248ADAF8BA + + TLSCiphertext: + 00000000: 17 03 03 40 11 F8 B5 73 2A 30 0C 8E F0 5F B7 12 + 00000010: A2 97 2F 4D B8 4B E7 83 A9 59 09 03 98 E9 89 51 + 00000020: 6B 6A 54 F3 33 33 10 49 28 31 86 BD 1C 42 EF D9 + 00000030: 80 03 A4 76 A2 40 8E AC E0 D7 04 7F B5 36 97 93 + 00000040: 86 C2 6B 55 23 F9 33 A4 F5 BD 70 48 B0 94 EC 5F + 00000050: 56 27 ED FA 98 99 DE 1A F8 D9 A4 93 E4 81 BA 5D + 00000060: A0 85 7B E1 5A 3F 21 CA 01 E2 20 92 15 9B AA 77 + 00000070: 05 69 CF BE 54 F6 53 BE FB 4A 8B 32 29 5D EF E9 + 00000080: 92 25 8F 45 81 25 7E 93 6A F5 49 E8 2D 54 EA 6C + 00000090: 09 EF 0D 98 7B F3 A3 E8 45 3C 15 48 CE F1 C3 49 + [...] + 00003F80: 0E F4 E8 88 99 AA 34 81 AE DA E0 E2 57 44 9F 80 + 00003F90: A2 0C BD F0 70 EC 02 21 1B 6B 9C BA 92 48 B1 92 + 00003FA0: CF 75 C8 8A 08 5D BF F7 7A BC FB 1D 82 DA A4 21 + 00003FB0: 1B 48 7A 48 23 03 50 CB A4 F3 38 DD 0B FD 36 D8 + 00003FC0: AA C5 EE 70 94 56 B7 E3 17 C7 8E 71 98 FB 72 64 + 00003FD0: 5B 45 EE FD 3F 93 BF 1C 02 1F 9E 74 A2 ED 2B CC + 00003FE0: 1C F5 D3 67 B5 53 C7 E7 E9 D8 0D D2 44 7C 7D 13 + 00003FF0: D0 34 5F EF 29 76 69 6D FE 57 9E 5F 71 74 0C 71 + 00004000: 31 24 CF BA D6 6C 7B B5 BC 21 AA AE 2F 1E 08 60 + 00004010: 5C 24 8A DA F8 BA + + ---------------------------Client----------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Pad: 15360 bytes + + Record payload protection: + + client_record_write_key = TLSTREE(client_write_key_ap, 9): + 00000: B8 2D 78 25 D1 5F AE 18 A7 01 32 28 B3 1C B0 C5 + 00010: 97 52 C6 40 9C 5F 78 99 EC C6 95 0F 74 63 C0 90 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 + + nonce: + 00000: 31 09 57 EF 71 31 44 33 F5 76 CC 9B 00 AD 93 5D + + additional_data: + 00000: 17 03 03 40 11 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000410: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 00004000: 00 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 4011 + encrypted_record: C1719B62D4F5E295AB8A4A2CBD6BBEF3 + 0F07297D96004EBABE315090247510A6 + BEE6395676956B4249B16B52CE9FE171 + B1F4693F48B3446D48A99B6224537FBB + 9BC8BF54AEA688D21E39F17840DB9F33 + 632EA196922B7E15D6AE080F9F3B33F2 + FABE63BB66E21C590785EFAEBE75BB1E + 17C9E5F58A1B1D1101DE95F9BF346C62 + 1C63CABEB6D7245DB75F18DA495F129A + 652CE6B7E0FE47FB210D6A [...] + 2AF9D515B26C3D8F37F9BF5F3A766D8B + 03189A78605069179FB9CF9B1A449DC0 + 4F0FE37E67FDF9A0341B1F0D64AA2871 + D4DFEF10EC7DFE7475CFE364BB4D9453 + A9F176829887148F3E8C0EEE858F9C17 + C0B753C145D13BD2A96B23822F73DC6C + FD623DE3CB70F8D507E436C20E393940 + F3A36C913C0BCDFE672C903C5522AA41 + 0B318DD1268D035C59D3E11FF273B1D7 + 715E2FBF3ACA + + TLSCiphertext: + 00000000: 17 03 03 40 11 C1 71 9B 62 D4 F5 E2 95 AB 8A 4A + 00000010: 2C BD 6B BE F3 0F 07 29 7D 96 00 4E BA BE 31 50 + 00000020: 90 24 75 10 A6 BE E6 39 56 76 95 6B 42 49 B1 6B + 00000030: 52 CE 9F E1 71 B1 F4 69 3F 48 B3 44 6D 48 A9 9B + 00000040: 62 24 53 7F BB 9B C8 BF 54 AE A6 88 D2 1E 39 F1 + 00000050: 78 40 DB 9F 33 63 2E A1 96 92 2B 7E 15 D6 AE 08 + 00000060: 0F 9F 3B 33 F2 FA BE 63 BB 66 E2 1C 59 07 85 EF + 00000070: AE BE 75 BB 1E 17 C9 E5 F5 8A 1B 1D 11 01 DE 95 + 00000080: F9 BF 34 6C 62 1C 63 CA BE B6 D7 24 5D B7 5F 18 + 00000090: DA 49 5F 12 9A 65 2C E6 B7 E0 FE 47 FB 21 0D 6A + [...] + 00003F80: 2A F9 D5 15 B2 6C 3D 8F 37 F9 BF 5F 3A 76 6D 8B + 00003F90: 03 18 9A 78 60 50 69 17 9F B9 CF 9B 1A 44 9D C0 + 00003FA0: 4F 0F E3 7E 67 FD F9 A0 34 1B 1F 0D 64 AA 28 71 + 00003FB0: D4 DF EF 10 EC 7D FE 74 75 CF E3 64 BB 4D 94 53 + 00003FC0: A9 F1 76 82 98 87 14 8F 3E 8C 0E EE 85 8F 9C 17 + 00003FD0: C0 B7 53 C1 45 D1 3B D2 A9 6B 23 82 2F 73 DC 6C + 00003FE0: FD 62 3D E3 CB 70 F8 D5 07 E4 36 C2 0E 39 39 40 + 00003FF0: F3 A3 6C 91 3C 0B CD FE 67 2C 90 3C 55 22 AA 41 + 00004000: 0B 31 8D D1 26 8D 03 5C 59 D3 E1 1F F2 73 B1 D7 + 00004010: 71 5E 2F BF 3A CA + + ---------------------------Server--------------------------- + Alert message: + level: 01 + description: 00 + + 00000: 01 00 + + Record payload protection: + + client_record_write_key = TLSTREE(client_write_key_ap, 10): + 00000: D3 CD 87 D5 68 74 07 82 39 78 34 4C 06 B9 28 A8 + 00010: 58 98 B7 39 A3 1D 3D E5 FF 2B 78 8E F3 91 96 ED + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A + + nonce: + 00000: 2F E9 1F 71 18 35 40 26 31 7E 1A B4 D8 22 17 B2 + + additional_data: + 00000: 17 03 03 00 13 + + TLSInnerPlaintext: + 00000: 01 00 15 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0013 + encrypted_record: 7CBC00AD5D29E301739394D31942C6A1 + 6658E9 + + TLSCiphertext: + 00000: 17 03 03 00 13 7C BC 00 AD 5D 29 E3 01 73 93 94 + 00010: D3 19 42 C6 A1 66 58 E9 + + ---------------------------Client--------------------------- + Alert message: + level: 01 + description: 00 + + 00000: 01 00 + + Record payload protection: + + client_record_write_key = TLSTREE(client_write_key_ap, 10): + 00000: B8 2D 78 25 D1 5F AE 18 A7 01 32 28 B3 1C B0 C5 + 00010: 97 52 C6 40 9C 5F 78 99 EC C6 95 0F 74 63 C0 90 + + + seqnum: + 00000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A + + nonce: + 00000: 31 09 57 EF 71 31 44 33 F5 76 CC 9B 00 AD 93 5E + + additional_data: + 00000: 17 03 03 00 13 + + TLSInnerPlaintext: + 00000: 01 00 15 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0013 + encrypted_record: CB19F306C3641754BE4FC95390DF06F9 + CD44AA + + TLSCiphertext: + 00000: 17 03 03 00 13 CB 19 F3 06 C3 64 17 54 BE 4F C9 + 00010: 53 90 DF 06 F9 CD 44 AA + +A.2. Example 2 + +A.2.1. Test Case + + Test examples are given for the following instance of the TLS13_GOST + profile: + + 1. Full TLS Handshake is used. + + 2. PSK with ECDHE key exchange mode is used. The elliptic curve + GC256B is used for ECDHE shared secret calculation. + + 3. Authentication is used on the server and client sides. The + external PSK is used for the mutual authentication. + + 4. TLS_GOSTR341112_256_WITH_MAGMA_MGM_L cipher suite is negotiated. + + 5. Four Application Data records are sent during the operation of + the Record protocol. The sequence numbers are selected to + demonstrate the operation of the TLSTREE function. + + 6. Alert protocol is used for closure of the connection. + +A.2.2. Test Examples + + ePSK: + 00000: 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 00000: 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + + + ---------------------------Client--------------------------- + + ClientHello1 message: + msg_type: 01 + length: 00007B + body: + legacy_version: 0303 + random: 01010101010101010101010101010101 + 01010101010101010101010101010101 + legacy_session_id: + length: 00 + vector: -- + cipher_suites: + length: 0002 + vector: + CipherSuite: C104 + compression_methods: + length: 01 + vector: + CompressionMethod: 00 + extensions: + length: 0050 + vector: + Extension: /* supported_groups */ + extension_type: 000A + extension_data: + length: 0006 + vector: + named_group_list: + length: 0004 + vector: + /* GC256B */ + 0023 + /* GC512C */ + 0028 + Extension: /* supported_versions */ + extension_type: 002B + extension_data: + length: 0003 + vector: + versions: + length: 02 + vector: + 0304 + Extension: /* psk_key_exchange_modes */ + extension_type: 002D + extension_data: + length: 0002 + vector: + ke_modes: + length: 01 + vector: + /* psk_dhe_ke */ + 01 + Extension: /* key_share */ + extension_type: 0033 + extension_data: + length: 0002 + client_shares: + length: 0000 + vector: -- + Extension: /* pre_shared_key */ + extension_type: 0029 + extension_data: + length: 002F + vector: + identities: + length: 000A + vector: + identity: + length: 0004 + vector: 6550534B + obfuscated_ticket_age: 00000000 + binders: + length: 0021 + vector: + binder: + length: 20 + vector: 6F3A0B91F2945EF7056DB74302BC34B6 + DF77A88E09C587508AB6287C6C0514AD + + Truncate(ClientHello1): + 0000: 01 00 00 7B 03 03 01 01 01 01 01 01 01 01 01 01 + 0010: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 + 0020: 01 01 01 01 01 01 00 00 02 C1 04 01 00 00 50 00 + 0030: 0A 00 06 00 04 00 23 00 28 00 2B 00 03 02 03 04 + 0040: 00 2D 00 02 01 01 00 33 00 02 00 00 00 29 00 2F + 0050: 00 0A 00 04 65 50 53 4B 00 00 00 00 + + Hash(Truncate(ClientHello1)): + 0000: CC 9C A9 FC 18 DF 7A 2F 5F 63 27 D7 7B EA DC F1 + 0010: A7 3D 80 97 7F EB EA B4 F0 D3 83 39 30 00 2B 8D + + EarlySecret = HKDF-Extract(Salt: 0^Hlen, IKM: ePSK): + 00000: 42 30 7A 99 68 18 34 0D D0 56 2F 7F EB E6 2A B5 + 00010: 70 F3 BC 88 9C A9 29 3A 89 0D F2 09 B9 1B BB F3 + + binder_key = Derive-Secret(EarlySecret, "ext binder", "") = + HKDF-Expand-Label(EarlySecret, "ext binder", "", 32): + 00000: A4 37 62 C3 5E 75 54 1A 15 58 A0 8D 15 50 D3 29 + 00010: 4C C3 F9 0C 73 99 EC C0 50 B9 15 37 A2 4C D5 E4 + + finished_binder_key = + HKDF-Expand-Label(binder_key, "finished", "", 32): + 00000: F5 6F 59 C2 E2 F8 E7 7C 69 80 1F B1 7D B4 C1 8B + 00010: ED 96 EB 32 FC D7 AB 95 AD D6 B1 CF F1 73 E6 65 + + binder = HMAC(finished_binder_key, Hash(Truncate(ClientHello1))): + 00000: 6F 3A 0B 91 F2 94 5E F7 05 6D B7 43 02 BC 34 B6 + 00010: DF 77 A8 8E 09 C5 87 50 8A B6 28 7C 6C 05 14 AD + + 0000: 01 00 00 7B 03 03 01 01 01 01 01 01 01 01 01 01 + 0010: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 + 0020: 01 01 01 01 01 01 00 00 02 C1 04 01 00 00 50 00 + 0030: 0A 00 06 00 04 00 23 00 28 00 2B 00 03 02 03 04 + 0040: 0A 07 0B 07 0C 07 0D 07 0E 07 0F 00 2B 00 03 02 + 0050: 00 2D 00 02 01 01 00 33 00 02 00 00 00 29 00 2F + 0060: 00 0A 00 04 65 50 53 4B 00 00 00 00 00 21 20 6F + 0070: 3A 0B 91 F2 94 5E F7 05 6D B7 43 02 BC 34 B6 DF + 0080: 77 A8 8E 09 C5 87 50 8A B6 28 7C 6C 05 14 AD + + Record layer message: + type: 16 + legacy_record_version: 0301 + length: 007F + fragment: 0100007B030301010101010101010101 + 01010101010101010101010101010101 + 010101010101000002C1040100005000 + 0A0006000400230028002B0003020304 + 0A070B070C070D070E070F002B000302 + 002D000201010033000200000029002F + 000A00046550534B000000000021206F + 3A0B91F2945EF7056DB74302BC34B6DF + 77A88E09C587508AB6287C6C0514AD + + 00000: 16 03 01 00 7F 01 00 00 7B 03 03 01 01 01 01 01 + 00010: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 + 00020: 01 01 01 01 01 01 01 01 01 01 01 00 00 02 C1 04 + 00030: 01 00 00 50 00 0A 00 06 00 04 00 23 00 28 00 2B + 00040: 00 03 02 03 04 0A 07 0B 07 0C 07 0D 07 0E 07 0F + 00050: 00 2B 00 03 02 00 2D 00 02 01 01 00 33 00 02 00 + 00060: 00 00 29 00 2F 00 0A 00 04 65 50 53 4B 00 00 00 + 00070: 00 00 21 20 6F 3A 0B 91 F2 94 5E F7 05 6D B7 43 + 00080: 02 BC 34 B6 DF 77 A8 8E 09 C5 87 50 8A B6 28 7C + 00090: 6C 05 14 AD + + + ---------------------------Server--------------------------- + + HelloRetryRequest message: + msg_type: 02 + length: 000034 + body: + legacy_version: 0303 + random: CF21AD74E59A6111BE1D8C021E65B891 + C2A211167ABB8C5E079E09E2C8A8339C + legacy_session_id: + length: 00 + vector: -- + cipher_suite: + CipherSuite: C104 + compression_method: + CompressionMethod: 00 + extensions: + length: 000C + vector: + Extension: /* supported_versions */ + extension_type: 002B + extension_data: + length: 0002 + vector: + selected_version: + 0304 + Extension: /* key_share */ + extension_type: 0033 + extension_data: + length: 0002 + selected_group: 0023 + + 00000: 02 00 00 34 03 03 CF 21 AD 74 E5 9A 61 11 BE 1D + 00010: 8C 02 1E 65 B8 91 C2 A2 11 16 7A BB 8C 5E 07 9E + 00020: 09 E2 C8 A8 33 9C 00 C1 04 00 00 0C 00 2B 00 02 + 00030: 03 04 00 33 00 02 00 23 + + Record layer message: + type: 16 + legacy_record_version: 0303 + length: 0038 + fragment: 020000340303CF21AD74E59A6111BE1D + 8C021E65B891C2A211167ABB8C5E079E + 09E2C8A8339C00C10400000C002B0002 + 0304003300020023 + + 00000: 16 03 03 00 38 02 00 00 34 03 03 CF 21 AD 74 E5 + 00010: 9A 61 11 BE 1D 8C 02 1E 65 B8 91 C2 A2 11 16 7A + 00020: BB 8C 5E 07 9E 09 E2 C8 A8 33 9C 00 C1 04 00 00 + 00030: 0C 00 2B 00 02 03 04 00 33 00 02 00 23 + + ---------------------------Client--------------------------- + + ClientHello2 message: + msg_type: 01 + length: 0000BF + body: + legacy_version: 0303 + random: 01010101010101010101010101010101 + 01010101010101010101010101010101 + legacy_session_id: + length: 00 + vector: -- + cipher_suites: + length: 0002 + vector: + CipherSuite: C104 + compression_methods: + length: 01 + vector: + CompressionMethod: 00 + extensions: + length: 0094 + vector: + Extension: /* supported_groups */ + extension_type: 000A + extension_data: + length: 0006 + vector: + named_group_list: + length: 0004 + vector: + /* GC256B */ + 0023 + /* GC512C */ + 0028 + Extension: /* supported_versions */ + extension_type: 002B + extension_data: + length: 0003 + vector: + versions: + length: 02 + vector: + 0304 + Extension: /* psk_key_exchange_modes */ + extension_type: 002D + extension_data: + length: 0002 + vector: + ke_modes: + length: 01 + vector: + /* psk_dhe_ke */ + 01 + Extension: /* key_share */ + extension_type: 0033 + extension_data: + length: 0046 + client_shares: + length: 0044 + vector: + group: 0023 + key_exchange: + length: 0040 + vector: + D35AA795C452450949591D60E7D5C076 + 056D6646F3B80708CDC2E7034DE85F68 + D1122DC32A3B986D40FF910622A06C12 + 26D9EC3A7D3A52E0A37C282C47602A43 + Extension: /* pre_shared_key */ + extension_type: 0029 + extension_data: + length: 002F + vector: + identities: + length: 000A + vector: + identity: + length: 0004 + vector: 6550534B + obfuscated_ticket_age: 00000000 + binders: + length: 0021 + vector: + binder: + length: 20 + vector: 0BF74AA3933B7D1A66961B6E2CFB6A28 + 04D696BB607710E3F56DDA91F56B57CB + + Truncate(ClientHello2): + 0000: 01 00 00 BF 03 03 01 01 01 01 01 01 01 01 01 01 + 0010: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 + 0020: 01 01 01 01 01 01 00 00 02 C1 04 01 00 00 94 00 + 0030: 0A 00 06 00 04 00 23 00 28 00 2B 00 03 02 03 04 + 0040: 00 2D 00 02 01 01 00 33 00 46 00 44 00 23 00 40 + 0050: D3 5A A7 95 C4 52 45 09 49 59 1D 60 E7 D5 C0 76 + 0060: 05 6D 66 46 F3 B8 07 08 CD C2 E7 03 4D E8 5F 68 + 0070: D1 12 2D C3 2A 3B 98 6D 40 FF 91 06 22 A0 6C 12 + 0080: 26 D9 EC 3A 7D 3A 52 E0 A3 7C 28 2C 47 60 2A 43 + 0090: 00 29 00 2F 00 0A 00 04 65 50 53 4B 00 00 00 00 + + finished_binder_key: + 00000: F5 6F 59 C2 E2 F8 E7 7C 69 80 1F B1 7D B4 C1 8B + 00010: ED 96 EB 32 FC D7 AB 95 AD D6 B1 CF F1 73 E6 65 + + BinderMsg = (FE 00 00 20 | Hash(ClientHello1), HelloRetryRequest, + Truncate(ClientHello2)) + + Hash(BinderMsg) = + 73 7C 63 74 1B 3A EA DF C8 73 DF 6E EA 81 19 32 + BF CE 93 4F AA 85 84 F1 44 F8 77 13 E0 D0 CA 32 + + binder = HMAC(finished_binder_key, Hash(BinderMsg)) = + 0B F7 4A A3 93 3B 7D 1A 66 96 1B 6E 2C FB 6A 28 + 04 D6 96 BB 60 77 10 E3 F5 6D DA 91 F5 6B 57 CB + + + 0000: 01 00 00 BF 03 03 01 01 01 01 01 01 01 01 01 01 + 0010: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 + 0020: 01 01 01 01 01 01 00 00 02 C1 04 01 00 00 94 00 + 0030: 0A 00 06 00 04 00 23 00 28 00 2B 00 03 02 03 04 + 0040: 00 2D 00 02 01 01 00 33 00 46 00 44 00 23 00 40 + 0050: D3 5A A7 95 C4 52 45 09 49 59 1D 60 E7 D5 C0 76 + 0060: 05 6D 66 46 F3 B8 07 08 CD C2 E7 03 4D E8 5F 68 + 0070: D1 12 2D C3 2A 3B 98 6D 40 FF 91 06 22 A0 6C 12 + 0080: 26 D9 EC 3A 7D 3A 52 E0 A3 7C 28 2C 47 60 2A 43 + 0090: 00 29 00 2F 00 0A 00 04 65 50 53 4B 00 00 00 00 + 00A0: 00 21 20 0B F7 4A A3 93 3B 7D 1A 66 96 1B 6E 2C + 00B0: FB 6A 28 04 D6 96 BB 60 77 10 E3 F5 6D DA 91 F5 + 00C0: 6B 57 CB + + + Record layer message: + type: 16 + legacy_record_version: 0303 + length: 00C3 + fragment: 010000BF030301010101010101010101 + 01010101010101010101010101010101 + 010101010101000002C1040100009400 + 0A0006000400230028002B0003020304 + 002D0002010100330046004400230040 + D35AA795C452450949591D60E7D5C076 + 056D6646F3B80708CDC2E7034DE85F68 + D1122DC32A3B986D40FF910622A06C12 + 26D9EC3A7D3A52E0A37C282C47602A43 + 0029002F000A00046550534B00000000 + 0021200BF74AA3933B7D1A66961B6E2C + FB6A2804D696BB607710E3F56DDA91F5 + 6B57CB + + 00000: 16 03 03 00 C3 01 00 00 BF 03 03 01 01 01 01 01 + 00010: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 + 00020: 01 01 01 01 01 01 01 01 01 01 01 00 00 02 C1 04 + 00030: 01 00 00 94 00 0A 00 06 00 04 00 23 00 28 00 2B + 00040: 00 03 02 03 04 00 2D 00 02 01 01 00 33 00 46 00 + 00050: 44 00 23 00 40 D3 5A A7 95 C4 52 45 09 49 59 1D + 00060: 60 E7 D5 C0 76 05 6D 66 46 F3 B8 07 08 CD C2 E7 + 00070: 03 4D E8 5F 68 D1 12 2D C3 2A 3B 98 6D 40 FF 91 + 00080: 06 22 A0 6C 12 26 D9 EC 3A 7D 3A 52 E0 A3 7C 28 + 00090: 2C 47 60 2A 43 00 29 00 2F 00 0A 00 04 65 50 53 + 000A0: 4B 00 00 00 00 00 21 20 0B F7 4A A3 93 3B 7D 1A + 000B0: 66 96 1B 6E 2C FB 6A 28 04 D6 96 BB 60 77 10 E3 + 000C0: F5 6D DA 91 F5 6B 57 CB + + ---------------------------Server--------------------------- + + ServerHello message: + msg_type: 02 + length: 00007C + body: + legacy_version: 0303 + random: 82828282828282828282828282828282 + 82828282828282828282828282828282 + + + legacy_session_id: + length: 00 + vector: -- + cipher_suite: + CipherSuite: C104 + compression_method: + CompressionMethod: 00 + extensions: + length: 0054 + vector: + Extension: /* supported_versions */ + extension_type: 002B + extension_data: + length: 0002 + vector: + selected_version: + 0304 + Extension: /* key_share */ + extension_type: 0033 + extension_data: + length: 0044 + vector: + group: 0023 + key_exchange: + length: 0040 + vector: + 3D2FB067E106CC9980FB8842811164BA + 708BBB5038D5EDFBEE1D5E5DFBE6F74F + 1931217C67C2BDF46253DB9CE3487241 + F2DBD84E2DABDF65455851B0B19AEFEC + Extension: /* pre_shared_key */ + extension_type: 0029 + extension_data: + length: 0002 + selected_identity: 0000 + + 00000: 02 00 00 7C 03 03 82 82 82 82 82 82 82 82 82 82 + 00010: 82 82 82 82 82 82 82 82 82 82 82 82 82 82 82 82 + 00020: 82 82 82 82 82 82 00 C1 04 00 00 54 00 2B 00 02 + 00030: 03 04 00 33 00 44 00 23 00 40 3D 2F B0 67 E1 06 + 00040: CC 99 80 FB 88 42 81 11 64 BA 70 8B BB 50 38 D5 + 00050: ED FB EE 1D 5E 5D FB E6 F7 4F 19 31 21 7C 67 C2 + 00060: BD F4 62 53 DB 9C E3 48 72 41 F2 DB D8 4E 2D AB + 00070: DF 65 45 58 51 B0 B1 9A EF EC 00 29 00 02 00 00 + + + Record layer message: + type: 16 + legacy_record_version: 0303 + length: 0080 + fragment: 020000410303933EA21E49C31BC3A345 + 6165889684CAA5576CE7924A24F58113 + 808DBD9EF85610C3802A561550EC78D6 + ED51AC2439D7E7C101000009FF010001 + 0000170000 + + 00000: 16 03 03 00 80 02 00 00 7C 03 03 82 82 82 82 82 + 00010: 82 82 82 82 82 82 82 82 82 82 82 82 82 82 82 82 + 00020: 82 82 82 82 82 82 82 82 82 82 82 00 C1 04 00 00 + 00030: 54 00 2B 00 02 03 04 00 33 00 44 00 23 00 40 3D + 00040: 2F B0 67 E1 06 CC 99 80 FB 88 42 81 11 64 BA 70 + 00050: 8B BB 50 38 D5 ED FB EE 1D 5E 5D FB E6 F7 4F 19 + 00060: 31 21 7C 67 C2 BD F4 62 53 DB 9C E3 48 72 41 F2 + 00070: DB D8 4E 2D AB DF 65 45 58 51 B0 B1 9A EF EC 00 + 00080: 29 00 02 00 00 + + + ---------------------------Client--------------------------- + + d_C^res: + 00000: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 + 00010: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 + + + Q_S^res: + 00000: 3D 2F B0 67 E1 06 CC 99 80 FB 88 42 81 11 64 BA + 00010: 70 8B BB 50 38 D5 ED FB EE 1D 5E 5D FB E6 F7 4F + 00020: 19 31 21 7C 67 C2 BD F4 62 53 DB 9C E3 48 72 41 + 00030: F2 DB D8 4E 2D AB DF 65 45 58 51 B0 B1 9A EF EC + + + + ECDHE: + 00000: 98 5A 86 59 D5 5A 8D 48 E0 E6 77 13 96 58 0B 2C + 00010: DC DA 37 E9 2A EE 18 14 D1 0E 1B F2 A4 4F 0D 24 + + + ---------------------------Server--------------------------- + + d_S^res: + 00000: 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 00010: 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + + + Q_C^res: + 00000: D3 5A A7 95 C4 52 45 09 49 59 1D 60 E7 D5 C0 76 + 00010: 05 6D 66 46 F3 B8 07 08 CD C2 E7 03 4D E8 5F 68 + 00020: D1 12 2D C3 2A 3B 98 6D 40 FF 91 06 22 A0 6C 12 + 00030: 26 D9 EC 3A 7D 3A 52 E0 A3 7C 28 2C 47 60 2A 43 + + + ECDHE: + 00000: 98 5A 86 59 D5 5A 8D 48 E0 E6 77 13 96 58 0B 2C + 00010: DC DA 37 E9 2A EE 18 14 D1 0E 1B F2 A4 4F 0D 24 + + ---------------------------Server--------------------------- + + EncryptedExtensions message: + msg_type: 08 + length: 000002 + body: + extensions: + length: 0000 + vector: -- + + 00000: 08 00 00 02 00 00 + + Record payload protection: + + EarlySecret = HKDF-Extract(Salt: 0^256, IKM: ePSK): + 00000: 42 30 7A 99 68 18 34 0D D0 56 2F 7F EB E6 2A B5 + 00010: 70 F3 BC 88 9C A9 29 3A 89 0D F2 09 B9 1B BB F3 + + Derived #0 = Derive-Secret(EarlySecret, "derived", "") = + HKDF-Expand-Label(EarlySecret, "derived", "", 32): + 00000: 6B 4E 9C 49 C5 C6 F1 7F 60 B2 B8 4B 55 0A 16 38 + 00010: 14 09 5B 80 88 8E C0 B0 CA 52 E4 09 0C B3 F8 BE + + + HandshakeSecret = HKDF-Extract(Salt: Derived #0, IKM: ECDHE): + 00000: A9 CB E6 58 50 2F 3F D1 18 66 51 5F D6 15 E9 88 + 00010: 0D 1E 61 B5 28 34 BB FD 5F 19 C2 4C 53 C8 79 7F + + + HM1 = (FE 00 00 20 | Hash(ClientHello1), HelloRetryRequest, + ClientHello2, ServerHello) + + TH1 = Transcript-Hash(HM1): + 00000: 88 8D 5D 1E 15 98 65 05 97 3E F2 0F 9A FA F5 71 + 00010: 20 A3 66 C2 D2 19 91 D1 5E 25 07 0C 3D 07 D5 E9 + + server_handshake_traffic_secret (SHTS): + SHTS = Derive-Secret(HandshakeSecret, "s hs traffic", HM1) = + HKDF-Expand-Label(HandshakeSecret, "s hs traffic", TH1, 32): + 00000: 4E F8 68 E5 5B 27 F8 88 8A 6F 82 DA A7 0B 01 1B + 00010: DA B1 77 95 10 F0 88 78 A0 22 2B 3E 2C 76 E6 83 + + server_write_key_hs = HKDF-Expand-Label(SHTS, "key", "", 32): + 00000: DB 61 9B 58 F4 41 1E 33 4F 07 EA C7 7C EF EF CA + 00010: 78 41 F5 40 88 B8 D0 D5 CE 6A 62 C9 82 85 C6 81 + + server_write_iv_hs = HKDF-Expand-Label(SHTS, "iv", "", 16): + 00000: FC 9E 2A C6 63 04 C2 5B + + server_record_write_key = TLSTREE(server_write_key_hs, 0): + 00000: 3C 7D F3 5E AC F4 FE 71 EA 6A DC E0 DC 44 5D D3 + 00010: A9 29 EF CD 08 3F 18 2F BD 51 42 BA 68 6D 38 84 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 + + nonce: + 00000: 7C 9E 2A C6 63 04 C2 5B + + additional_data: + 00000: 17 03 03 00 0F + + TLSInnerPlaintext: + 00000: 08 00 00 02 00 00 16 + + TLSCiphertext: + 00000: 17 03 03 00 0F 49 67 A7 E1 AE 7B FB 37 5A 0F 4B + 00010: 25 45 91 17 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 000F + encrypted_record: 4967A7E1AE7BFB375A0F4B + 25459117 + + 00000: 17 03 03 00 0F 49 67 A7 E1 AE 7B FB 37 5A 0F 4B + 00010: 25 45 91 17 + + ---------------------------Server--------------------------- + + server_finished_key = HKDF-Expand-Label(SHTS, "finished", "", 32): + 00000: AF 41 F7 7A CB 18 B4 C5 9D E0 F7 8D 46 D5 AE 95 + 00010: 7A A4 92 A7 D8 D8 2A 36 F4 B2 09 B8 20 7C 79 03 + + HMFinished = (FE 00 00 20 | Hash(ClientHello1), HelloRetryRequest, + ClientHello2, ServerHello, EncryptedExtensions) + + Transcript-Hash(HMFinished): + 00000: E0 5D D6 C9 DE BA 09 3D 72 AD 6F 4A 7D 0E 11 95 + 00010: FC E7 AE 31 93 F2 FF 5B 2D 0B F6 14 8E CB E7 B9 + + FinishedHash = + HMAC(server_finished_key,Transcript-Hash(HMFinished)): + 00000: 96 14 5B 61 68 E0 1C 4C F2 99 50 96 EE 12 C8 6B + 00010: 1F 53 1F 96 0A 48 9D E9 C3 44 2A 24 33 E9 AE EE + + Finished message: + msg_type: 14 + length: 000020 + body: + verify_data: 96145B6168E01C4CF2995096EE12C86B + 1F531F960A489DE9C3442A2433E9AEEE + + 00000: 14 00 00 20 96 14 5B 61 68 E0 1C 4C F2 99 50 96 + 00010: EE 12 C8 6B 1F 53 1F 96 0A 48 9D E9 C3 44 2A 24 + 00020: 33 E9 AE EE + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_hs, 1): + 00000: 3C 7D F3 5E AC F4 FE 71 EA 6A DC E0 DC 44 5D D3 + 00010: A9 29 EF CD 08 3F 18 2F BD 51 42 BA 68 6D 38 84 + + seqnum: + 00000: 00 00 00 00 00 00 00 01 + + nonce: + 00000: 7C 9E 2A C6 63 04 C2 5A + + additional_data: + 00000: 17 03 03 00 2D + + TLSInnerPlaintext: + 00000: 14 00 00 20 96 14 5B 61 68 E0 1C 4C F2 99 50 96 + 00010: EE 12 C8 6B 1F 53 1F 96 0A 48 9D E9 C3 44 2A 24 + 00020: 33 E9 AE EE 16 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 002D + encrypted_record: 3BFB2AEADBC349FD89AFB8E481F8426B + CC6B7F5D975FE05E5B28755C00BF353F + CA6A48E9F0145993C40CE06F37 + + TLSCiphertext: + 00000: 17 03 03 00 2D 3B FB 2A EA DB C3 49 FD 89 AF B8 + 00010: E4 81 F8 42 6B CC 6B 7F 5D 97 5F E0 5E 5B 28 75 + 00020: 5C 00 BF 35 3F CA 6A 48 E9 F0 14 59 93 C4 0C E0 + 00030: 6F 37 + + + ---------------------------Client--------------------------- + + EarlySecret = HKDF-Extract(Salt: 0^256, IKM: ePSK): + 00000: 42 30 7A 99 68 18 34 0D D0 56 2F 7F EB E6 2A B5 + 00010: 70 F3 BC 88 9C A9 29 3A 89 0D F2 09 B9 1B BB F3 + + Derived #0 = Derive-Secret(EarlySecret, "derived", "") = + HKDF-Expand-Label(EarlySecret, "derived", "", 32): + 00000: 6B 4E 9C 49 C5 C6 F1 7F 60 B2 B8 4B 55 0A 16 38 + 00010: 14 09 5B 80 88 8E C0 B0 CA 52 E4 09 0C B3 F8 BE + + HandshakeSecret = HKDF-Extract(Salt: Derived #0, IKM: ECDHE): + 00000: A9 CB E6 58 50 2F 3F D1 18 66 51 5F D6 15 E9 88 + 00010: 0D 1E 61 B5 28 34 BB FD 5F 19 C2 4C 53 C8 79 7F + + HM1 = (FE 00 00 20 | Hash(ClientHello1), HelloRetryRequest, + ClientHello2, ServerHello) + + TH1 = Transcript-Hash(HM1): + 00000: 88 8D 5D 1E 15 98 65 05 97 3E F2 0F 9A FA F5 71 + 00010: 20 A3 66 C2 D2 19 91 D1 5E 25 07 0C 3D 07 D5 E9 + + client_handshake_traffic_secret (CHTS): + CHTS = Derive-Secret(HandshakeSecret, "c hs traffic", HM1) = + HKDF-Expand-Label(HandshakeSecret, "c hs traffic", TH1, 32): + 00000: DF 00 4B 79 A1 D3 51 55 97 1B 0E 84 C8 91 99 7F + 00010: FE E6 D0 1B 27 04 23 CC 74 64 4B 25 47 3E 78 60 + + client_finished_key = HKDF-Expand-Label(CHTS, "finished", "", 32): + 00000: 1F A6 7D 28 9F F2 A6 85 C7 BE 13 FD F5 60 A6 D5 + 00010: A9 F5 EA 85 63 AD 6C C7 B4 85 30 76 59 A5 55 81 + + HM2 = (FE 00 00 20 | Hash(ClientHello1), HelloRetryRequest, + ClientHello2, ServerHello, + EncryptedExtensions, Server Finished) + + TH2 =Transcript-Hash(HM2): + 00000: 53 06 24 EE 07 6F FF E1 04 DC 15 EB B4 2D 78 8F + 00010: 1E 4F EB 3E 8C 2D CF A5 CB 85 D7 2F 81 D0 6D 15 + + FinishedHash = HMAC(client_finished_key, TH2): + 00000: BB 83 09 94 BE 38 A9 8F FC A3 BF D2 35 CD 80 7E + 00010: 81 82 1E 67 37 AB 98 31 43 DC A9 7B 9E E0 23 25 + + Finished message: + msg_type: 14 + length: 000020 + body: + verify_data: BB830994BE38A98FFCA3BFD235CD807E + 81821E6737AB983143DCA97B9EE02325 + + 00000: 14 00 00 20 BB 83 09 94 BE 38 A9 8F FC A3 BF D2 + 00010: 35 CD 80 7E 81 82 1E 67 37 AB 98 31 43 DC A9 7B + 00020: 9E E0 23 25 + + Record payload protection: + + client_write_key_hs = HKDF-Expand-Label(CHTS, "key", "", 32): + 00000: DF 66 60 1E DD D6 4E 96 1D FC 7D D0 21 2E F2 25 + 00010: C0 05 33 E6 DA A4 AD 24 18 5E BE B2 24 B5 46 B8 + + client_write_iv_hs = HKDF-Expand-Label(CHTS, "iv", "", 16): + 00000: E8 94 3C 9F A2 88 56 A1 + + client_record_write_key = TLSTREE(client_write_key_hs, 0): + 00000: BD 00 9F FC 04 A0 52 9E 60 78 EB A5 A0 7A DE 74 + 00010: 93 7F F3 A1 AB 75 F7 AE 05 19 04 78 51 9B 6D F3 + + seqnum: + 00000: 00 00 00 00 00 00 00 00 + + nonce: + 00000: 68 94 3C 9F A2 88 56 A1 + + additional_data: + 00000: 17 03 03 00 2D + + TLSInnerPlaintext: + 00000: 14 00 00 20 BB 83 09 94 BE 38 A9 8F FC A3 BF D2 + 00010: 35 CD 80 7E 81 82 1E 67 37 AB 98 31 43 DC A9 7B + 00020: 9E E0 23 25 16 + + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 002D + encrypted_record: 14254CA6B9EBCC4A951A3D1F1040B0B1 + 45446DF131946CEECBDB6A8EC534F194 + 223281B56532A703C492160E2C + + TLSCiphertext: + 00000: 17 03 03 00 2D 14 25 4C A6 B9 EB CC 4A 95 1A 3D + 00010: 1F 10 40 B0 B1 45 44 6D F1 31 94 6C EE CB DB 6A + 00020: 8E C5 34 F1 94 22 32 81 B5 65 32 A7 03 C4 92 16 + 00030: 0E 2C + + + ---------------------------Server--------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + Record payload protection: + Derived #1 = Derive-Secret(HandshakeSecret, "derived", "") = + HKDF-Expand-Label(HandshakeSecret, "derived", "", 32): + 00000: BC 4D 6F E3 D9 43 78 21 1D 3D 64 1C 75 92 EB AA + 00010: 7A A2 96 47 9C 57 BD D1 E1 4C 7B 04 9F 6D F1 CD + + MainSecret = HKDF-Extract(Salt: Derived #1, IKM: 0^256): + 00000: DB FF 82 86 2E 54 A1 41 3E 6C 2E D8 2C 6D A5 AF + 00010: FD BF DE 12 30 2E 49 75 5B 61 F2 06 32 E1 0A 42 + + HM2 = (FE 00 00 20 | Hash(ClientHello1), HelloRetryRequest, + ClientHello2, ServerHello, + EncryptedExtensions, Server Finished) + + TH2 = Transcript-Hash(HM2): + 00000: 53 06 24 EE 07 6F FF E1 04 DC 15 EB B4 2D 78 8F + 00010: 1E 4F EB 3E 8C 2D CF A5 CB 85 D7 2F 81 D0 6D 15 + + SATS = Derive-Secret(MainSecret, "s ap traffic", HM2) = + HKDF-Expand-Label(MainSecret, "s ap traffic", TH2, 32): + 00000: 52 91 26 2B EC B5 22 69 34 3A E8 27 9B 43 54 B1 + 00010: 89 22 D5 15 04 60 8B A7 21 C4 72 46 7E EE E8 78 + + server_write_key_ap = HKDF-Expand-Label(SATS, "key", "", 32): + 00000: 15 D9 2C 51 47 B2 13 10 ED ED F5 5B 3D 7A B7 76 + 00000: 81 7D 6F E2 FC F2 30 D7 E3 F2 92 75 F6 E2 41 EC + + server_write_iv_ap = HKDF-Expand-Label(SATS, "iv", "", 8): + 00000: 71 2E 2F 11 CD 50 6E B9 + + server_record_write_key = TLSTREE(server_write_key_ap, 0): + 00000: 7B B8 81 55 35 98 DE F5 34 FC AF 9B 77 A3 35 5B + 00010: C3 BC A3 87 4D 67 40 F6 CB F5 C1 B6 D3 5C 65 ED + + seqnum: + 00000: 00 00 00 00 00 00 00 00 + + nonce: + 00000: 71 2E 2F 11 CD 50 6E B9 + + additional_data: + 00000: 17 03 03 04 09 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0409 + encrypted_record: 7CAA82039F67326C2D735EE809B57750 + 945F5CE2B0C47B8EF1ECADA3D3F1AD9E + 3FBA5926FDB2B61197D08B8B1399167B + 6C249C90C0A3101452FD72078FBFB057 + 31E06215019395DDCF44AA763DCB1ACA + 8B3F47D033FBA12E7C0FBB4DFBDABD8B + 97E996E8E36231BE8015412B90CCCFBB + E2BC967E597FC2E7B251A9BBEBAA245B + 63139387203DB90BD1BF5300A5B577BF + 46793DB1AA30FEDFD1E6A5 + [...] + E1D55816BFD6BFFBF6E6FB23D86117D2 + 47441BC211D078199C1F8340BE808BA6 + E5BE092B9E081E95D4A57672A07970A6 + 1FEF2F4B12A0F401FA30B813FE7CD1BF + 881485157381B8489EC36296C6EE7538 + 0FB1DAA1B1473358FD87AA41D5DBA089 + F528BD5F3B41B34002D945D7E0C49EFA + 54A4EFB0DA4049F5F248B3F7D46FEC05 + A25BBE0A5120106BC21C1EA25EFF3125 + E079CA0F7FFA56FD89C1A80DA0A3 + + TLSCiphertext: + 00000000: 17 03 03 04 09 7C AA 82 03 9F 67 32 6C 2D 73 5E + 00000010: E8 09 B5 77 50 94 5F 5C E2 B0 C4 7B 8E F1 EC AD + 00000020: A3 D3 F1 AD 9E 3F BA 59 26 FD B2 B6 11 97 D0 8B + 00000030: 8B 13 99 16 7B 6C 24 9C 90 C0 A3 10 14 52 FD 72 + 00000040: 07 8F BF B0 57 31 E0 62 15 01 93 95 DD CF 44 AA + 00000050: 76 3D CB 1A CA 8B 3F 47 D0 33 FB A1 2E 7C 0F BB + 00000060: 4D FB DA BD 8B 97 E9 96 E8 E3 62 31 BE 80 15 41 + 00000070: 2B 90 CC CF BB E2 BC 96 7E 59 7F C2 E7 B2 51 A9 + 00000080: BB EB AA 24 5B 63 13 93 87 20 3D B9 0B D1 BF 53 + 00000090: 00 A5 B5 77 BF 46 79 3D B1 AA 30 FE DF D1 E6 A5 + [...] + 00000370: E1 D5 58 16 BF D6 BF FB F6 E6 FB 23 D8 61 17 D2 + 00000380: 47 44 1B C2 11 D0 78 19 9C 1F 83 40 BE 80 8B A6 + 00000390: E5 BE 09 2B 9E 08 1E 95 D4 A5 76 72 A0 79 70 A6 + 000003A0: 1F EF 2F 4B 12 A0 F4 01 FA 30 B8 13 FE 7C D1 BF + 000003B0: 88 14 85 15 73 81 B8 48 9E C3 62 96 C6 EE 75 38 + 000003C0: 0F B1 DA A1 B1 47 33 58 FD 87 AA 41 D5 DB A0 89 + 000003D0: F5 28 BD 5F 3B 41 B3 40 02 D9 45 D7 E0 C4 9E FA + 000003E0: 54 A4 EF B0 DA 40 49 F5F2 48 B3 F7 D4 6F EC 05 + 000003F0: A2 5B BE 0A 51 20 10 6B C2 1C 1E A2 5E FF 31 25 + 00000400: E0 79 CA 0F 7F FA 56 FD 89 C1 A8 0D A0 A3 + + + ---------------------------Server--------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_ap, 1): + 00000: 7B B8 81 55 35 98 DE F5 34 FC AF 9B 77 A3 35 5B + 00010: C3 BC A3 87 4D 67 40 F6 CB F5 C1 B6 D3 5C 65 ED + + seqnum: + 00000: 00 00 00 00 00 00 00 01 + + nonce: + 00000: 71 2E 2F 11 CD 50 6E B8 + + additional_data: + 00000: 17 03 03 04 09 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0409 + encrypted_record: DC593FC6FAFC5191242B632E144504A2 + 61AEF332970FF8316FA4DE507BFB471E + A83C713FF950791078FD9A3178D02682 + 66E12BC970FFB1EE4A56600DF32ABF9F + A318FF45C91CDEF42E1C1D450059729B + 1BB6925F773A1E8F304E7AB143F0FC16 + EF16BC4E0DF60D76DE43390F9CD257DE + D256209B1675378FE6822CBB19A53620 + BD5B240282CF4977F1C572AB3B1DD6CF + 497F2757286B7E49CF80C7 [...] + EE2E29D3F79640D9CA3C35181B9CE939 + CA16A862AC460424B6AEF6B89D533406 + 7724CCF2466A804F09FAB3EBE737F99C + 6498EFF2379CAD6596C3C352F4426876 + 95ACBC4FB44B5D069FB66605E47945FE + 2F11509FF7B5961BE8AB43EC2060D822 + A994D97C59C8058C951708029AE0BEDA + 8045ECA025FE02E6D2EFAF13202012E9 + E34358DE79E561CCEC8F549E70073EE6 + 938F4A1AAE97465970D65260604C + + + TLSCiphertext: + 00000000: 17 03 03 04 09 DC 59 3F C6 FA FC 51 91 24 2B 63 + 00000010: 2E 14 45 04 A2 61 AE F3 32 97 0F F8 31 6F A4 DE + 00000020: 50 7B FB 47 1E A8 3C 71 3F F9 50 79 10 78 FD 9A + 00000030: 31 78 D0 26 82 66 E1 2B C9 70 FF B1 EE 4A 56 60 + 00000040: 0D F3 2A BF 9F A3 18 FF 45 C9 1C DE F4 2E 1C 1D + 00000050: 45 00 59 72 9B 1B B6 92 5F 77 3A 1E 8F 30 4E 7A + 00000060: B1 43 F0 FC 16 EF 16 BC 4E 0D F6 0D 76 DE 43 39 + 00000070: 0F 9C D2 57 DE D2 56 20 9B 16 75 37 8F E6 82 2C + 00000080: BB 19 A5 36 20 BD 5B 24 02 82 CF 49 77 F1 C5 72 + 00000090: AB 3B 1D D6 CF 49 7F 27 57 28 6B 7E 49 CF 80 C7 + [...] + 00000370: EE 2E 29 D3 F7 96 40 D9 CA 3C 35 18 1B 9C E9 39 + 00000380: CA 16 A8 62 AC 46 04 24 B6 AE F6 B8 9D 53 34 06 + 00000390: 77 24 CC F2 46 6A 80 4F 09 FA B3 EB E7 37 F9 9C + 000003A0: 64 98 EF F2 37 9C AD 65 96 C3 C3 52 F4 42 68 76 + 000003B0: 95 AC BC 4F B4 4B 5D 06 9F B6 66 05 E4 79 45 FE + 000003C0: 2F 11 50 9F F7 B5 96 1B E8 AB 43 EC 20 60 D8 22 + 000003D0: A9 94 D9 7C 59 C8 05 8C 95 17 08 02 9A E0 BE DA + 000003E0: 80 45 EC A0 25 FE 02 E6 D2 EF AF 13 20 20 12 E9 + 000003F0: E3 43 58 DE 79 E5 61 CC EC 8F 54 9E 70 07 3E E6 + 00000400: 93 8F 4A 1A AE 97 46 59 70 D6 52 60 60 4C + + + ---------------------------Server--------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_ap, 128): + 00000: 93 D5 D6 E1 03 6F DF B3 EF BF 31 E6 DA 5E EC E6 + 00010: 85 17 1C 97 7F F9 CD 6C 3A 3F 67 C0 22 4A B6 EB + + seqnum: + 00000: 00 00 00 00 00 00 00 80 + nonce: + 00000: 71 2E 2F 11 CD 50 6E 39 + + additional_data: + 00000: 17 03 03 04 09 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0409 + encrypted_record: 56A7E2F32541DB0EE1563F8CA79EB129 + 3192E2122BA8A89A6CF05B151D205AEC + EB60321D0F637A98880814BEF639FC08 + A1E8222D95A54E5593F8BB9CF520D3FA + 7D38D960E00665BB736A7AFF49D7A7BA + D092DDB1714655EDF1A9A24F4727DA7E + 873135F2A0534FAF7825EA99401FE1F0 + 1E8C4246D2B55CEBE768FA205B3F7890 + 9827B912C6AA9FDDE3CFCA47F2D9E2E2 + 0FBEE9606D0E0105A7C97A [...] + A72D5F8E43ABC13984593F16DCECBE7B + 26AF73FDC82D7BE1F913B846D2612531 + BA0F05FF0C52DEFC8674AF3A1AE27393 + FC092D45DCD0F71E2B54B60EC618C2A4 + 5BE72EC19B5FB263C2DC780FF3093FD5 + D2F75185E437BE8BB3E5C26F9E0E71B3 + C5D6CCA2E0D2F44BB1ACDA17B189F21E + C97C748502A2155E3ADC3CCC1BA14EEB + 7CDAA018253FCB57D53A12F548C5456C + DDA00385EE1C0826AB58E964007C + + TLSCiphertext: + 00000000: 17 03 03 04 09 56 A7 E2 F3 25 41 DB 0E E1 56 3F + 00000010: 8C A7 9E B1 29 31 92 E2 12 2B A8 A8 9A 6C F0 5B + 00000020: 15 1D 20 5A EC EB 60 32 1D 0F 63 7A 98 88 08 14 + 00000030: BE F6 39 FC 08 A1 E8 22 2D 95 A5 4E 55 93 F8 BB + 00000040: 9C F5 20 D3 FA 7D 38 D9 60 E0 06 65 BB 73 6A 7A + 00000050: FF 49 D7 A7 BA D0 92 DD B1 71 46 55 ED F1 A9 A2 + 00000060: 4F 47 27 DA 7E 87 31 35 F2 A0 53 4F AF 78 25 EA + 00000070: 99 40 1F E1 F0 1E 8C 42 46 D2 B5 5C EB E7 68 FA + 00000080: 20 5B 3F 78 90 98 27 B9 12 C6 AA 9F DD E3 CF CA + 00000090: 47 F2 D9 E2 E2 0F BE E9 60 6D 0E 01 05 A7 C9 7A + [...] + 00000370: A7 2D 5F 8E 43 AB C1 39 84 59 3F 16 DC EC BE 7B + 00000380: 26 AF 73 FD C8 2D 7B E1 F9 13 B8 46 D2 61 25 31 + 00000390: BA 0F 05 FF 0C 52 DE FC 86 74 AF 3A 1A E2 73 93 + 000003A0: FC 09 2D 45 DC D0 F7 1E 2B 54 B6 0E C6 18 C2 A4 + 000003B0: 5B E7 2E C1 9B 5F B2 63 C2 DC 78 0F F3 09 3F D5 + 000003C0: D2 F7 51 85 E4 37 BE 8B B3 E5 C2 6F 9E 0E 71 B3 + 000003D0: C5 D6 CC A2 E0 D2 F4 4B B1 AC DA 17 B1 89 F2 1E + 000003E0: C9 7C 74 85 02 A2 15 5E 3A DC 3C CC 1B A1 4E EB + 000003F0: 7C DA A0 18 25 3F CB 57 D5 3A 12 F5 48 C5 45 6C + 00000400: DD A0 03 85 EE 1C 08 26 AB 58 E9 64 00 7C + + + ---------------------------Server--------------------------- + + Application data: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_ap, 129): + 00000: 93 D5 D6 E1 03 6F DF B3 EF BF 31 E6 DA 5E EC E6 + 00010: 85 17 1C 97 7F F9 CD 6C 3A 3F 67 C0 22 4A B6 EB + + seqnum: + 00000: 00 00 00 00 00 00 00 81 + + nonce: + 00000: 71 2E 2F 11 CD 50 6E 38 + + additional_data: + 00000: 17 03 03 04 09 + + TLSInnerPlaintext: + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + [...] + 000003F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00000400: 17 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 0409 + encrypted_record: EE73C4CAE69FD30BC4B3A66CA571CD9F + 3C7AA2C2BA9F428A82249720F717738F + 8C35AC7745B701F3B0CEE993EB2CFDAB + 4468B22297A8286C2572DE366AC38B70 + 471B26A1EC4F19D68E7EDA0A231C3BD1 + 98013FA05BAC92E774A370EB10C0CBD9 + 15BACD0117A885804B9A475B44A6F3E8 + 7D7BCA40F3F52EF4AB624B6EDD3094F9 + 86269E409F8BB76CEB4BE26D4B1AF54C + 0A14D41C291EB8E181F79A [...] + 10C401A9423D02804B51DDBFE5925294 + ADEE0067193FED8F66CBEED9475873B8 + 8A730496487E8E7F45FC05EEE9C628AF + E9236696F41A1505AA7392BF71C7EED3 + 78035013ADE1EF07DE5A0230669E133E + 0D18B6C977A7FE94F4D22AB29CBAA6B5 + CDDBF4B35598C0007F3BA69D3FA2730D + F51D867E1E47CFDE22CAEACD4C5AFD97 + 088AEB92D12CE3C685C4E517730B8339 + 4FC8514264E2F15E51CE439DED1D + + TLSCiphertext: + 00000000: 17 03 03 04 09 EE 73 C4 CA E6 9F D3 0B C4 B3 A6 + 00000010: 6C A5 71 CD 9F 3C 7A A2 C2 BA 9F 42 8A 82 24 97 + 00000020: 20 F7 17 73 8F 8C 35 AC 77 45 B7 01 F3 B0 CE E9 + 00000030: 93 EB 2C FD AB 44 68 B2 22 97 A8 28 6C 25 72 DE + 00000040: 36 6A C3 8B 70 47 1B 26 A1 EC 4F 19 D6 8E 7E DA + 00000050: 0A 23 1C 3B D1 98 01 3F A0 5B AC 92 E7 74 A3 70 + 00000060: EB 10 C0 CB D9 15 BA CD 01 17 A8 85 80 4B 9A 47 + 00000070: 5B 44 A6 F3 E8 7D 7B CA 40 F3 F5 2E F4 AB 62 4B + 00000080: 6E DD 30 94 F9 86 26 9E 40 9F 8B B7 6C EB 4B E2 + 00000090: 6D 4B 1A F5 4C 0A 14 D4 1C 29 1E B8 E1 81 F7 9A + [...] + 00000370: 10 C4 01 A9 42 3D 02 80 4B 51 DD BF E5 92 52 94 + 00000380: AD EE 00 67 19 3F ED 8F 66 CB EE D9 47 58 73 B8 + 00000390: 8A 73 04 96 48 7E 8E 7F 45 FC 05 EE E9 C6 28 AF + 000003A0: E9 23 66 96 F4 1A 15 05 AA 73 92 BF 71 C7 EE D3 + 000003B0: 78 03 50 13 AD E1 EF 07 DE 5A 02 30 66 9E 13 3E + 000003C0: 0D 18 B6 C9 77 A7 FE 94 F4 D2 2A B2 9C BA A6 B5 + 000003D0: CD DB F4 B3 55 98 C0 00 7F 3B A6 9D 3F A2 73 0D + 000003E0: F5 1D 86 7E 1E 47 CF DE 22 CA EA CD 4C 5A FD 97 + 000003F0: 08 8A EB 92 D1 2C E3 C6 85 C4 E5 17 73 0B 83 39 + 00000400: 4F C8 51 42 64 E2 F1 5E 51 CE 43 9D ED 1D + + ---------------------------Server--------------------------- + Alert message: + level: 01 + description: 00 + + 00000: 01 00 + + Record payload protection: + + server_record_write_key = TLSTREE(server_write_key_ap, 130): + 00000: 93 D5 D6 E1 03 6F DF B3 EF BF 31 E6 DA 5E EC E6 + 00010: 85 17 1C 97 7F F9 CD 6C 3A 3F 67 C0 22 4A B6 EB + + seqnum: + 00000: 00 00 00 00 00 00 00 82 + + nonce: + 00000: 71 2E 2F 11 CD 50 6E 3B + + additional_data: + 00000: 17 03 03 00 0B + + TLSInnerPlaintext: + 00000: 01 00 15 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 000B + encrypted_record: 447A3FAE8F86C135189B10 + + TLSCiphertext: + 00000: 17 03 03 00 0B 44 7A 3F AE 8F 86 C1 35 18 9B 10 + + ---------------------------Client--------------------------- + Alert message: + level: 01 + description: 00 + + 00000: 01 00 + + Record payload protection: + + Derived #1 = Derive-Secret(HandshakeSecret, "derived", "") = + HKDF-Expand-Label(HandshakeSecret, "derived", "", 32): + 00000: BC 4D 6F E3 D9 43 78 21 1D 3D 64 1C 75 92 EB AA + 00010: 7A A2 96 47 9C 57 BD D1 E1 4C 7B 04 9F 6D F1 CD + + MainSecret = HKDF-Extract(Salt: Derived #1, IKM: 0^256): + 00000: DB FF 82 86 2E 54 A1 41 3E 6C 2E D8 2C 6D A5 AF + 00010: FD BF DE 12 30 2E 49 75 5B 61 F2 06 32 E1 0A 42 + + HM2 = (FE 00 00 20 | Hash(ClientHello1), HelloRetryRequest, + ClientHello2, ServerHello, EncryptedExtensions, + Server Finished) + + TH2 = Transcript-Hash(HM2): + 00000: 53 06 24 EE 07 6F FF E1 04 DC 15 EB B4 2D 78 8F + 00010: 1E 4F EB 3E 8C 2D CF A5 CB 85 D7 2F 81 D0 6D 15 + + client_application_traffic_secret (CATS): + CATS = Derive-Secret(MainSecret, "c ap traffic", HM2) = + HKDF-Expand-Label(MainSecret, "c ap traffic", TH2, 32): + 20 D9 85 D5 B8 4D 9D 8D 4E 5E CF CD BC DD 67 41 + 55 F1 82 F7 28 7B 18 4D A5 53 42 5C 6C 64 57 83 + + client_write_key_ap = HKDF-Expand-Label(CATS, "key", "", 32): + 00000: EB D2 71 DE 19 FE E1 8B B1 99 8F 69 AF 5B 6A E1 + 00010: 89 58 E8 D3 70 2F 12 FB B5 B0 3F 6F D6 91 FE FA + + client_write_iv_ap = HKDF-Expand-Label(CATS, "iv", "", 8): + 00000: 18 FB 03 8D BF 72 41 E6 + + client_record_write_key = TLSTREE(client_write_key_ap, 0): + 00000: 86 2A 74 18 0B 4A E4 C2 D1 5F 4A 62 ED 8A 4A 75 + 00010: B0 8D 72 B0 46 AF DE CB 3A 8E F0 C2 67 F4 56 BD + + seqnum: + 00000: 00 00 00 00 00 00 00 00 + + nonce: + 00000: 18 FB 03 8D BF 72 41 E6 + + additional_data: + 00000: 17 03 03 00 0B + + TLSInnerPlaintext: + 00000: 01 00 15 + + Record layer message: + type: 17 + legacy_record_version: 0303 + length: 000B + encrypted_record: 464AEEAD391D97987169F3 + + TLSCiphertext: + 00000: 17 03 03 00 0B 46 4A EE AD 39 1D 97 98 71 69 F3 + +Contributors + + Lilia Akhmetzyanova + CryptoPro + Email: lah@cryptopro.ru + + + Alexandr Sokolov + CryptoPro + Email: sokolov@cryptopro.ru + + + Vasily Nikolaev + CryptoPro + Email: nikolaev@cryptopro.ru + + +Authors' Addresses + + Stanislav Smyshlyaev (editor) + CryptoPro + 18, Suschevsky val + Moscow + 127018 + Russian Federation + Phone: +7 (495) 995-48-20 + Email: svs@cryptopro.ru + + + Evgeny Alekseev + CryptoPro + 18, Suschevsky val + Moscow + 127018 + Russian Federation + Email: alekseev@cryptopro.ru + + + Ekaterina Griboedova + CryptoPro + 18, Suschevsky val + Moscow + 127018 + Russian Federation + Email: griboedovaekaterina@gmail.com + + + Alexandra Babueva + CryptoPro + 18, Suschevsky val + Moscow + 127018 + Russian Federation + Email: babueva@cryptopro.ru + + + Lidiia Nikiforova + CryptoPro + 18, Suschevsky val + Moscow + 127018 + Russian Federation + Email: nikiforova@cryptopro.ru |