| rfc9367.original.xml | rfc9367.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!-- draft submitted in xml v3 --> | ||||
| <!DOCTYPE rfc [ | <!DOCTYPE rfc [ | |||
| <!ENTITY nbsp " "> | <!ENTITY nbsp " "> | |||
| <!ENTITY zwsp "​"> | <!ENTITY zwsp "​"> | |||
| <!ENTITY nbhy "‑"> | <!ENTITY nbhy "‑"> | |||
| <!ENTITY wj "⁠"> | <!ENTITY wj "⁠"> | |||
| ]> | ]> | |||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-smyshlyaev-tls13 | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-smyshlyaev-tls13- | |||
| -gost-suites-08" ipr="trust200902" obsoletes="" updates="" submissionType="IETF | gost-suites-08" number="9367" submissionType="independent" category="info" ipr=" | |||
| " category="info" | trust200902" obsoletes="" updates="" xml:lang="en" tocInclude="true" tocDepth="4 | |||
| xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" vers | " symRefs="true" sortRefs="true" version="3"> | |||
| ion="3"> | ||||
| <front> | <front> | |||
| <title abbrev="GOST Cipher Suites for TLS 1.3"> | <title abbrev="GOST Cipher Suites for TLS 1.3"> | |||
| GOST Cipher Suites for Transport Layer Security (TLS) Protocol Versi on 1.3 | GOST Cipher Suites for Transport Layer Security (TLS) Protocol Versi on 1.3 | |||
| </title> | </title> | |||
| <seriesInfo name="Internet-Draft" value="draft-smyshlyaev-tls13-gost-suites- | <seriesInfo name="RFC" value="9367"/> | |||
| 08"/> | ||||
| <author fullname="Stanislav Smyshlyaev" initials="S.V." role="editor" surnam | <author fullname="Stanislav Smyshlyaev" initials="S." role="editor" surname= | |||
| e="Smyshlyaev"> | "Smyshlyaev"> | |||
| <organization>CryptoPro</organization> | <organization>CryptoPro</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>18, Suschevsky val </street> | <street>18, Suschevsky val</street> | |||
| <city>Moscow</city> | <city>Moscow</city> | |||
| <code>127018</code> | <code>127018</code> | |||
| <country>Russian Federation</country> | <country>Russian Federation</country> | |||
| </postal> | </postal> | |||
| <phone>+7 (495) 995-48-20</phone> | <phone>+7 (495) 995-48-20</phone> | |||
| <email>svs@cryptopro.ru</email> | <email>svs@cryptopro.ru</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Evgeny Alekseev" initials="E.K." surname="Alekseev"> | <author fullname="Evgeny Alekseev" initials="E." surname="Alekseev"> | |||
| <organization>CryptoPro</organization> | <organization>CryptoPro</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>18, Suschevsky val </street> | <street>18, Suschevsky val</street> | |||
| <city>Moscow</city> | <city>Moscow</city> | |||
| <code>127018</code> | <code>127018</code> | |||
| <country>Russian Federation</country> | <country>Russian Federation</country> | |||
| </postal> | </postal> | |||
| <email>alekseev@cryptopro.ru</email> | <email>alekseev@cryptopro.ru</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Ekaterina Griboedova" initials="E.S." surname="Griboedova" > | <author fullname="Ekaterina Griboedova" initials="E." surname="Griboedova"> | |||
| <organization>CryptoPro</organization> | <organization>CryptoPro</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>18, Suschevsky val </street> | <street>18, Suschevsky val</street> | |||
| <city>Moscow</city> | <city>Moscow</city> | |||
| <code>127018</code> | <code>127018</code> | |||
| <country>Russian Federation</country> | <country>Russian Federation</country> | |||
| </postal> | </postal> | |||
| <email>griboedova.e.s@gmail.com</email> | <email>griboedovaekaterina@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Alexandra Babueva" initials="A.A." surname="Babueva"> | <author fullname="Alexandra Babueva" initials="A." surname="Babueva"> | |||
| <organization>CryptoPro</organization> | <organization>CryptoPro</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>18, Suschevsky val </street> | <street>18, Suschevsky val</street> | |||
| <city>Moscow</city> | <city>Moscow</city> | |||
| <code>127018</code> | <code>127018</code> | |||
| <country>Russian Federation</country> | <country>Russian Federation</country> | |||
| </postal> | </postal> | |||
| <email>babueva@cryptopro.ru</email> | <email>babueva@cryptopro.ru</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Lidiia Nikiforova" initials="L.O." surname="Nikiforova"> | <author fullname="Lidiia Nikiforova" initials="L." surname="Nikiforova"> | |||
| <organization>CryptoPro</organization> | <organization>CryptoPro</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>18, Suschevsky val </street> | <street>18, Suschevsky val</street> | |||
| <city>Moscow</city> | <city>Moscow</city> | |||
| <code>127018</code> | <code>127018</code> | |||
| <country>Russian Federation</country> | <country>Russian Federation</country> | |||
| </postal> | </postal> | |||
| <email>nikiforova@cryptopro.ru</email> | <email>nikiforova@cryptopro.ru</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year="2022"/> | <date year="2023" month="February" /> | |||
| <!--если не указываем число и месяц, они подставляются автоматически--> | ||||
| <area>General</area> | <keyword>GOST</keyword> | |||
| <!--как в rfc7748--> | <keyword>cipher suite</keyword> | |||
| <workgroup>Network Working Group</workgroup> | <keyword>TLS 1.3</keyword> | |||
| <keyword>GOST, cipher suite, TLS 1.3, signature scheme</keyword> | <keyword>signature scheme</keyword> | |||
| <abstract> | <abstract> | |||
| <t> | <t> | |||
| The purpose of this document is to make the Russian cryptographi | The purpose of this document is to make the Russian | |||
| c standards | cryptographic standards available to the Internet community | |||
| available to the Internet community for their implementation in | for their implementation in the Transport Layer Security (TLS) | |||
| the Transport Layer Security (TLS) | ||||
| Protocol Version 1.3. | Protocol Version 1.3. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document defines the cipher suites, signature schemes, and | This document defines the cipher suites, signature schemes, | |||
| key | and key exchange mechanisms for using Russian cryptographic | |||
| exchange mechanisms for using Russian cryptographic standards, c | standards, called GOST algorithms, with TLS Version 1.3. Additi | |||
| alled | onally, this document | |||
| GOST algorithms, with Transport Layer Security (TLS) Version 1.3 | specifies a profile of TLS 1.3 with GOST algorithms to | |||
| . | facilitate interoperable implementations. The IETF has not | |||
| Additionally, this document specifies a profile of TLS 1.3 with | endorsed the cipher suites, signature schemes, or key | |||
| GOST | exchange mechanisms described in this document. | |||
| algorithms to facilitate interoperable implementations. The IETF | ||||
| has not endorsed the cipher suites, | ||||
| signature schemes, key exchange mechanism described in this docu | ||||
| ment. | ||||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="Introduction" numbered="true" toc="default"> | <section anchor="Introduction" numbered="true" toc="default"> | |||
| <name>Introduction</name> | <name>Introduction</name> | |||
| <t> | <t> | |||
| This document defines four new cipher suites (the TLS13_GOST cip | This document defines four new cipher suites (the TLS13_GOST | |||
| her suites) and seven new signature schemes (the TLS13_GOST signature schemes) | cipher suites) and seven new signature schemes (the TLS13_GOST | |||
| for the Transport Layer Security (TLS) Protocol Version 1.3, tha | signature schemes) for the Transport Layer Security (TLS) | |||
| t are based on Russian cryptographic standards | Protocol Version 1.3 that are based on Russian cryptographic | |||
| GOST R 34.12-2015 <xref target="RFC7801" format="default"/>, GO | standards GOST R 34.12-2015 <xref target="RFC7801" | |||
| ST R 34.11-2012 <xref target="RFC6986" format="default"/> and GOST R 34.10-2012 | format="default"/>, GOST R 34.11-2012 <xref target="RFC6986" | |||
| <xref target="RFC7091" format="default"/>. | format="default"/>, and GOST R 34.10-2012 <xref | |||
| target="RFC7091" format="default"/>. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The TLS13_GOST cipher suites (see <xref target="CipherSuites" fo rmat="default"/>) have the following values: | The TLS13_GOST cipher suites (see <xref target="CipherSuites" fo rmat="default"/>) have the following values: | |||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | <ul spacing="normal" empty="true"> | |||
| <li> | <li>TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L = {0xC1, 0x03}</li> | |||
| TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L = {0xC1, 0x03} | <li>TLS_GOSTR341112_256_WITH_MAGMA_MGM_L = {0xC1, 0x04}</li> <li>TLS_GOST | |||
| ; | R341112_256_WITH_KUZNYECHIK_MGM_S = {0xC1, 0x05}</li> | |||
| TLS_GOSTR341112_256_WITH_MAGMA_MGM_L = {0xC1, 0x04}; | <li>TLS_GOSTR341112_256_WITH_MAGMA_MGM_S = {0xC1, 0x06} | |||
| TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S = {0xC1, 0x05} | ||||
| ; | ||||
| TLS_GOSTR341112_256_WITH_MAGMA_MGM_S = {0xC1, 0x06}. | ||||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| Each TLS13_GOST cipher suite specifies a pair (record protection | Each TLS13_GOST cipher suite specifies a pair (record | |||
| algorithm, hash algorithm) such that: | protection algorithm, hash algorithm) such that: | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| The record protection algorithm is the AEAD algorithm (s | The record protection algorithm is the Authenticated Enc | |||
| ee <xref target="AEAD" format="default"/>) based on the GOST R 34.12-2015 block | ryption with Associated Data (AEAD) algorithm | |||
| cipher | (see <xref target="AEAD" format="default"/>) based on | |||
| <xref target="RFC7801" format="default"/> in the Multili | the GOST R 34.12-2015 block cipher <xref | |||
| near Galois Mode (MGM) <xref target="RFC9058" format="default"/> and the externa | target="RFC7801" format="default"/> in the Multilinear | |||
| l re-keying approach | Galois Mode (MGM) <xref target="RFC9058" | |||
| (see <xref target="RFC8645" format="default"/>) intended | format="default"/> and the external re-keying approach | |||
| for increasing the lifetime of symmetric keys used to protect records. | (see <xref target="RFC8645" format="default"/>) | |||
| intended for increasing the lifetime of symmetric keys | ||||
| used to protect records. | ||||
| </li> | </li> | |||
| <li> | <li> | |||
| The hash algorithm is the GOST R 34.11-2012 algorithm <x ref target="RFC6986" format="default"/>. | The hash algorithm is the GOST R 34.11-2012 algorithm <x ref target="RFC6986" format="default"/>. | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| Note: The TLS13_GOST cipher suites are divided into two types (d | Note: The TLS13_GOST cipher suites are divided into two types: t | |||
| epending on the key lifetime limitations, see <xref target="TLSTREE" format="def | he "_S" (strong) cipher suites and the | |||
| ault"/> and | "_L" (light) cipher suites (depending on the key lifetime | |||
| <xref target="SNMAX" format="default"/>): the "_S" (strong) ciph | limitations, see Sections <xref target="TLSTREE" | |||
| er suites and the "_L" (light) cipher suites. | format="counter"/> and | |||
| <xref target="SNMAX" format="counter"/>). | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The TLS13_GOST signature schemes have the following values: | The TLS13_GOST signature schemes have the following values: | |||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | <ul empty="true" spacing="normal"> | |||
| <li> | <li> | |||
| gostr34102012_256a = 0x0709; | gostr34102012_256a = 0x0709 | |||
| </li> | </li> | |||
| <li> | <li> | |||
| gostr34102012_256b = 0x070A; | gostr34102012_256b = 0x070A | |||
| </li> | </li> | |||
| <li> | <li> | |||
| gostr34102012_256c = 0x070B; | gostr34102012_256c = 0x070B | |||
| </li> | </li> | |||
| <li> | <li> | |||
| gostr34102012_256d = 0x070C; | gostr34102012_256d = 0x070C | |||
| </li> | </li> | |||
| <li> | <li> | |||
| gostr34102012_512a = 0x070D; | gostr34102012_512a = 0x070D | |||
| </li> | </li> | |||
| <li> | <li> | |||
| gostr34102012_512b = 0x070E; | gostr34102012_512b = 0x070E | |||
| </li> | </li> | |||
| <li> | <li> | |||
| gostr34102012_512c = 0x070F. | gostr34102012_512c = 0x070F | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| Each TLS13_GOST signature scheme specifies a pair (signature alg orithm, elliptic curve) such that: | Each TLS13_GOST signature scheme specifies a pair (signature alg orithm, elliptic curve) such that: | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| The signature algorithm is the GOST R 34.10-2012 algorit hm <xref target="RFC7091" format="default"/>. | The signature algorithm is the GOST R 34.10-2012 algorit hm <xref target="RFC7091" format="default"/>. | |||
| </li> | </li> | |||
| <li> | <li> | |||
| The elliptic curve is one of the curves defined in <xref target="EllipticCurve" format="default"/>. | The elliptic curve is one of the curves defined in <xref target="EllipticCurve" format="default"/>. | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| Also, this document specifies the key exchange mechanism with GO ST algorithms for TLS 1.3 protocol (see <xref target="KE" format="default"/>). | This document also specifies the key exchange mechanism with GOS T algorithms for the TLS 1.3 protocol (see <xref target="KE" format="default"/>) . | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Additionally, this document specifies a TLS13_GOST profile of th e TLS 1.3 protocol with GOST algorithms so that implementers can produce interop erable implementations. | Additionally, this document specifies a TLS13_GOST profile of th e TLS 1.3 protocol with GOST algorithms so that implementers can produce interop erable implementations. | |||
| It uses TLS13_GOST cipher suites, TLS13_GOST signature schemes, key exchange mechanism that defined in this document. | It uses TLS13_GOST cipher suites, TLS13_GOST signature schemes, and key exchange mechanisms that are defined in this document. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
| <name>Conventions Used in This Document</name> | <name>Conventions Used in This Document</name> | |||
| <t> | <t> | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NO | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
| T", "SHOULD", "SHOULD NOT", | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
| document are to be interpreted | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| as described in BCP 14 <xref target="RFC2119" format="default"/> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| <xref target="RFC8174" format="default"/> when, and only when, | be interpreted as | |||
| they appear in all capitals, as shown here. | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
| </t> | when, and only when, they appear in all capitals, as shown here. | |||
| </t> | ||||
| </section> | </section> | |||
| <section anchor="Definition" numbered="true" toc="default"> | <section anchor="Definition" numbered="true" toc="default"> | |||
| <name>Basic Terms and Definitions</name> | <name>Basic Terms and Definitions</name> | |||
| <t> | <t> | |||
| This document follows the terminology from <xref target="I-D.ietf-tls- rfc8446bis" format="default"/> for "main secret". | This document follows the terminology from <xref target="I-D.ietf-tls- rfc8446bis" format="default"/> for "main secret". | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document uses the following terms and definitions for the sets and operations | This document uses the following terms and definitions for the sets and operations | |||
| on the elements of these sets: | on the elements of these sets: | |||
| </t> | </t> | |||
| <dl newline="false" spacing="normal" indent="16"> | <dl newline="false" spacing="normal" indent="16"> | |||
| <dt>B_t</dt> | <dt>B_t</dt> | |||
| <dd> | <dd> | |||
| the set of byte strings of length t, t >= 0, for t = | The set of byte strings of length t, t >= 0; for t | |||
| 0 the | = 0, the B_t set consists of a single empty string of | |||
| B_t set consists of a single empty string of zero length | 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 | |||
| If A is an element in B_t, then A = (a_1, a_2, | in {0, ... , 255}. | |||
| ... , a_t), where a_1, a_2, ... , a_t are in {0, ... , 2 | ||||
| 55}; | ||||
| </dd> | </dd> | |||
| <dt>B*</dt> | <dt>B*</dt> | |||
| <dd> | <dd> | |||
| the set of all byte strings of a finite length | The set of all byte strings of a finite length | |||
| (hereinafter referred to as strings), including the empt | (hereinafter referred to as strings) including the | |||
| y | empty string. | |||
| string; | ||||
| </dd> | </dd> | |||
| <dt>A[i..j]</dt> | <dt>A[i..j]</dt> | |||
| <dd> | <dd> | |||
| 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; | 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. | |||
| </dd> | </dd> | |||
| <dt>A[i]</dt> | <dt>A[i]</dt> | |||
| <dd> | <dd> | |||
| the integer a_i in {0, ... , 255}, where A = (a_1, a_2, ... , a_t) in B_t and 1<=i<=t; | The integer a_i in {0, ... , 255}, where A = (a_1, a_2, ... , a_t) in B_t and 1<=i<=t. | |||
| </dd> | </dd> | |||
| <dt>|A|</dt> | <dt>|A|</dt> | |||
| <dd> | <dd> | |||
| the length of the byte string A in bytes; | The length of the byte string A in bytes. | |||
| </dd> | </dd> | |||
| <dt>A | C</dt> | <dt>A | C</dt> | |||
| <dd> | <dd> | |||
| the concatenation of strings A and C both belonging to B | The concatenation of strings A and C both belonging to | |||
| *, i.e., | B*; i.e., a string in B_{|A|+|C|}, where the left | |||
| a string in B_{|A|+|C|}, where the left substring in | substring in B_|A| is equal to A and the right | |||
| B_|A| is equal to A, and the right substring in B_|C| is | substring in B_|C| is equal to C. | |||
| equal to C; | ||||
| </dd> | </dd> | |||
| <dt>i & j</dt> | <dt>i & j</dt> | |||
| <dd> | <dd> | |||
| bitwise AND of integers i and j; | Bitwise AND of integers i and j. | |||
| </dd> | </dd> | |||
| <dt>STR_t</dt> | <dt>STR_t</dt> | |||
| <dd> | <dd> | |||
| the transformation that maps an integer i = 256<sup>t-1< /sup> * i_1 + ... + 256 * i_{t-1} + i_t | The transformation that maps an integer i = 256<sup>t-1< /sup> * i_1 + ... + 256 * i_{t-1} + i_t | |||
| into the byte string STR_t(i) = (i_1, ... , i_t) in B_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 b ig-endian format); | (the interpretation of the integer as a byte string in b ig-endian format). | |||
| </dd> | </dd> | |||
| <dt>str_t</dt> | <dt>str_t</dt> | |||
| <dd> | <dd> | |||
| the transformation that maps an integer i = 256<sup>t-1< /sup> * i_t + ... + 256 * i_2 + i_1 | The transformation that maps an integer i = 256<sup>t-1< /sup> * i_t + ... + 256 * i_2 + i_1 | |||
| into the byte string str_t(i) = (i_1, ... , i_t) in B_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 l ittle-endian format); | (the interpretation of the integer as a byte string in l ittle-endian format). | |||
| </dd> | </dd> | |||
| <dt>k</dt> | <dt>k</dt> | |||
| <dd> | <dd> | |||
| the length of the block cipher key in bytes; | The length of the block cipher key in bytes. | |||
| </dd> | </dd> | |||
| <dt>n</dt> | <dt>n</dt> | |||
| <dd> | <dd> | |||
| the length of the block cipher block in bytes; | The length of the block cipher block in bytes. | |||
| </dd> | </dd> | |||
| <dt>IVlen</dt> | <dt>IVlen</dt> | |||
| <dd> | <dd> | |||
| the length of the initialization vector in bytes; | The length of the initialization vector in bytes. | |||
| </dd> | </dd> | |||
| <dt>S</dt> | <dt>S</dt> | |||
| <dd> | <dd> | |||
| the length of the authentication tag in bytes; | The length of the authentication tag in bytes. | |||
| </dd> | </dd> | |||
| <dt>E_i</dt> | <dt>E_i</dt> | |||
| <dd> | <dd> | |||
| the elliptic curve indicated by the client in "supported _groups" extension; | The elliptic curve indicated by the client in "supported _groups" extension. | |||
| </dd> | </dd> | |||
| <dt>O_i</dt> | <dt>O_i</dt> | |||
| <dd> | <dd> | |||
| the zero point of the elliptic curve E_i; | The zero point of the elliptic curve E_i. | |||
| </dd> | </dd> | |||
| <dt>m_i</dt> | <dt>m_i</dt> | |||
| <dd> | <dd> | |||
| the order of group of points belonging to the elliptic cur ve E_i; | The order of the group of points belonging to the elliptic curve E_i. | |||
| </dd> | </dd> | |||
| <dt>q_i</dt> | <dt>q_i</dt> | |||
| <dd> | <dd> | |||
| the order of the cyclic subgroup of the group of points be longing to the elliptic curve E_i; | The order of the cyclic subgroup of the group of points be longing to the elliptic curve E_i. | |||
| </dd> | </dd> | |||
| <dt>h_i</dt> | <dt>h_i</dt> | |||
| <dd> | <dd> | |||
| the cofactor of the cyclic subgroup which is equal to m_i / q_i; | The cofactor of the cyclic subgroup that is equal to m_i / q_i. | |||
| </dd> | </dd> | |||
| <dt>Q_sign</dt> | <dt>Q_sign</dt> | |||
| <dd> | <dd> | |||
| the public key stored in endpoint's certificate; | The public key stored in the endpoint's certificate. | |||
| </dd> | </dd> | |||
| <dt>d_sign</dt> | <dt>d_sign</dt> | |||
| <dd> | <dd> | |||
| the private key that corresponds to the Q_sign key; | The private key that corresponds to the Q_sign key. | |||
| </dd> | </dd> | |||
| <dt>P_i</dt> | <dt>P_i</dt> | |||
| <dd> | <dd> | |||
| the point of the elliptic curve E_i of the order q_i; | The point of the elliptic curve E_i of the order q_i. | |||
| </dd> | </dd> | |||
| <dt>(d_C^i, Q_C^i)</dt> | <dt>(d_C^i, Q_C^i)</dt> | |||
| <dd> | <dd> | |||
| the client's ephemeral key pair which consists of the priv ate key and the public key corresponding to the elliptic curve E_i; | The client's ephemeral key pair that consists of the priva te key and the public key corresponding to the elliptic curve E_i. | |||
| </dd> | </dd> | |||
| <dt>(d_S^i, Q_S^i)</dt> | <dt>(d_S^i, Q_S^i)</dt> | |||
| <dd> | <dd> | |||
| the server's ephemeral key pair which consists of the priv ate key and the public key corresponding to the elliptic curve E_i. | The server's ephemeral key pair that consists of the priva te key and the public key corresponding to the elliptic curve E_i. | |||
| </dd> | </dd> | |||
| </dl> | </dl> | |||
| </section> | </section> | |||
| <section anchor="CipherSuites" numbered="true" toc="default"> | <section anchor="CipherSuites" numbered="true" toc="default"> | |||
| <name>Cipher Suite Definition</name> | <name>Cipher Suite Definition</name> | |||
| <t> | <t> | |||
| This section defines the following four TLS13_GOST cipher suites : | This section defines the following four TLS13_GOST cipher suites : | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <ul spacing="normal"> | |||
| <li>CipherSuite TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L = {0xC1, 0x03};</li> | ||||
| CipherSuite TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L = {0xC1, 0x03}; | <li>CipherSuite TLS_GOSTR341112_256_WITH_MAGMA_MGM_L = {0xC1, 0x04};</li> | |||
| CipherSuite TLS_GOSTR341112_256_WITH_MAGMA_MGM_L = {0xC1, 0x04}; | <li>CipherSuite TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S = {0xC1, 0x05};</li> | |||
| CipherSuite TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S = {0xC1, 0x05}; | <li>CipherSuite TLS_GOSTR341112_256_WITH_MAGMA_MGM_S = {0xC1, 0x06}.</li> | |||
| CipherSuite TLS_GOSTR341112_256_WITH_MAGMA_MGM_S = {0xC1, 0x06}; | </ul> | |||
| <t> | ||||
| ]]></artwork> | Each cipher suite specifies a pair consisting of a record protection algorithm ( | |||
| <t> | see <xref target="RecordProtection" format="default"/>) and a hash algorithm (<x | |||
| Each cipher suite specifies a pair of a record protection algori | ref target="HASH" format="default"/>). | |||
| thm (see <xref target="RecordProtection" format="default"/>) and a hash algorith | ||||
| m (<xref target="HASH" format="default"/>). | ||||
| </t> | </t> | |||
| <section anchor="RecordProtection" numbered="true" toc="default"> | <section anchor="RecordProtection" numbered="true" toc="default"> | |||
| <name>Record Protection Algorithm</name> | <name>Record Protection Algorithm</name> | |||
| <t> | <t> | |||
| In accordance with Section 5.2 of <xref target="RFC8446" for | In accordance with <xref target="RFC8446" section="5.2" sect | |||
| mat="default"/>, the record protection algorithm translates a TLSPlaintext struc | ionFormat="of"/>, the record protection algorithm translates a TLSPlaintext stru | |||
| ture into a TLSCiphertext structure. | cture into a TLSCiphertext structure. | |||
| If the TLS13_GOST cipher suite is negotiated, the encrypted_ | If the TLS13_GOST cipher suite is negotiated, the encrypted_ | |||
| record field of the TLSCiphertext structure MUST be set to the AEADEncrypted val | record field of the TLSCiphertext structure <bcp14>MUST</bcp14> be set to the AE | |||
| ue computed as follows: | ADEncrypted value computed as follows: | |||
| </t> | ||||
| <t indent="3"> AEADEncrypted = | ||||
| AEAD-Encrypt(sender_record_write_key, nonce, | ||||
| additional_data, plaintext), | ||||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | ||||
| <li> | ||||
| AEADEncrypted = AEAD-Encrypt(sender_record_write_key | ||||
| , nonce, additional_data, plaintext), | ||||
| </li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| where | where | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| the AEAD-Encrypt function is defined in <xref target ="AEAD" format="default"/>; | the AEAD-Encrypt function is defined in <xref target ="AEAD" format="default"/>; | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t> | <t> | |||
| the sender_record_write_key is a key derived from se nder_write_key (see Section 7.3 of <xref target="RFC8446" format="default"/>) us ing | the sender_record_write_key is a key derived from se nder_write_key (see <xref target="RFC8446" section="7.3" sectionFormat="of"/>) u sing | |||
| the TLSTREE function defined in <xref target="TLSTRE E" format="default"/> and sequence number seqnum as follows: | the TLSTREE function defined in <xref target="TLSTRE E" format="default"/> and sequence number seqnum as follows: | |||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | <ul empty="true" spacing="normal"> | |||
| <li> | <li> | |||
| sender_record_write_key = TLSTREE(sender_wri te_key, seqnum); | sender_record_write_key = TLSTREE(sender_wri te_key, seqnum); | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| the nonce is a value derived from sequence number se | the nonce is a value derived from sequence number se | |||
| qnum and sender_write_iv (see Section 7.3 | qnum and sender_write_iv (see | |||
| of <xref target="RFC8446" format="default"/>) in acc | <xref target="RFC8446" section="7.3" sectionFormat= | |||
| ordance with Section 5.3 of <xref target="RFC8446" format="default"/>; | "of"/>) in accordance with <xref target="RFC8446" section="5.3" sectionFormat="o | |||
| f"/>; | ||||
| </li> | </li> | |||
| <li> | <li> | |||
| the additional_data value is a record header that is generated in accordance with Section 5.2 of <xref target="RFC8446" format="defa ult"/>; | the additional_data value is a record header that is generated in accordance with <xref target="RFC8446" section="5.2" sectionFormat ="of"/>; | |||
| </li> | </li> | |||
| <li> | <li> | |||
| the plaintext value is the TLSInnerPlaintext structu re encoded in accordance with Section 5.2 of <xref target="RFC8446" format="defa ult"/>. | the plaintext value is the TLSInnerPlaintext structu re encoded in accordance with <xref target="RFC8446" section="5.2" sectionFormat ="of"/>. | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| Note1: The AEAD-Encrypt function is exactly the same as the AEAD-Encrypt function defined in <xref target="RFC8446" format="default"/>, such that the key | Note 1: The AEAD-Encrypt function is exactly the same as the AEAD-Encrypt function defined in <xref target="RFC8446" format="default"/>, suc h that the key | |||
| (the first argument) is calculated from sender_write_key and sequence number seqnum for each message separately to support the external | (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 <xref target="RFC8645" forma t="default"/>. | re-keying approach according to <xref target="RFC8645" forma t="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note2: Sequence number is a value in the range 0-SNMAX, wher | Note 2: Sequence number is a value in the range 0-SNMAX, | |||
| e the SNMAX value is defined in <xref target="SNMAX" format="default"/>. | where the SNMAX value is defined in <xref target="SNMAX" | |||
| The SNMAX parameter is specified by a particular TLS13_GOST | format="default"/>. The SNMAX parameter is specified by a | |||
| cipher suite to limit an amount of data that can be encrypted under | particular TLS13_GOST cipher suite to limit an amount of | |||
| the same traffic key material (sender_write_key, sender_writ | data that can be encrypted under the same traffic key | |||
| e_iv). | material (sender_write_key, sender_write_iv). | |||
| </t> | ||||
| <t> | ||||
| The record deprotection algorithm reverses the process of th | ||||
| e record protection. In order to decrypt and verify a protected record with sequ | ||||
| ence number | ||||
| seqnum the algorithm takes as an input: sender_record_write_ | ||||
| key, which is derived from sender_write_key, nonce, additional_data and the AEAD | ||||
| Encrypted value. | ||||
| The algorithm outputs the res value which is either plaintex | ||||
| t or an error indicating that the decryption failed. | ||||
| If a TLS13_GOST cipher suite is negotiated, the res value MU | ||||
| ST be computed as follows: | ||||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | ||||
| <li> | ||||
| res = AEAD-Decrypt(sender_record_write_key, nonce, a | ||||
| dditional_data, AEADEncrypted), | ||||
| </li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| where the AEAD-Decrypt function is defined in <xref target=" | The record deprotection algorithm reverses the process of th | |||
| AEAD" format="default"/>. | e record protection. | |||
| In order to decrypt and verify a protected record with seque | ||||
| nce | ||||
| number seqnum, the algorithm takes sender_record_write_key a | ||||
| s an input, which | ||||
| is derived from sender_write_key, nonce, additional_data, an | ||||
| d 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 <b | ||||
| cp14>MUST</bcp14> be computed as follows: | ||||
| </t> | </t> | |||
| <t indent="3"> | ||||
| res = AEAD-Decrypt(sender_record_write_key, nonce, additio | ||||
| nal_data, AEADEncrypted),</t> | ||||
| <t> where the AEAD-Decrypt function is as defined in <xref ta | ||||
| rget="AEAD" format="default"/>. | ||||
| </t> | ||||
| <t> | <t> | |||
| Note: The AEAD-Decrypt function is exactly the same as the A EAD-Decrypt function defined in <xref target="RFC8446" format="default"/>, such that the key | Note: The AEAD-Decrypt function is exactly the same as the A EAD-Decrypt function defined in <xref target="RFC8446" format="default"/>, 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 | (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 <xref target="RFC8645" forma t="default"/>. | re-keying approach according to <xref target="RFC8645" forma t="default"/>. | |||
| </t> | </t> | |||
| <section anchor="AEAD" numbered="true" toc="default"> | <section anchor="AEAD" numbered="true" toc="default"> | |||
| <name>AEAD Algorithm</name> | <name>AEAD Algorithm</name> | |||
| <t> | <t> | |||
| The AEAD-Encrypt and AEAD-Decrypt functions are defined as follows. | The AEAD-Encrypt and AEAD-Decrypt functions are defined as follows: | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| <sourcecode type="pseudocode"><![CDATA[ | ||||
| +-------------------------------------------------------------------+ | +-------------------------------------------------------------------+ | |||
| | AEAD-Encrypt(K, nonce, A, P) | | | AEAD-Encrypt(K, nonce, A, P) | | |||
| |-------------------------------------------------------------------| | |-------------------------------------------------------------------| | |||
| | Input: | | | Input: | | |||
| | - encryption key K in B_k, | | | - encryption key K in B_k, | | |||
| | - unique vector nonce in B_IVlen, | | | - unique vector nonce in B_IVlen, | | |||
| | - additional authenticated data A in B_r, r >= 0, | | | - additional authenticated data A in B_r, r >= 0, | | |||
| | - plaintext P in B_t, t >= 0. | | | - plaintext P in B_t, t >= 0. | | |||
| | Output: | | | Output: | | |||
| | - ciphertext C in B_{|P|}, | | | - ciphertext C in B_{|P|}, | | |||
| skipping to change at line 430 ¶ | skipping to change at line 454 ¶ | |||
| | - additional authenticated data A in B_r, r >= 0, | | | - additional authenticated data A in B_r, r >= 0, | | |||
| | - ciphertext C in B_t, t >= 0, | | | - ciphertext C in B_t, t >= 0, | | |||
| | - authentication tag T in B_S. | | | - authentication tag T in B_S. | | |||
| | Output: | | | Output: | | |||
| | - plaintext P in B_{|C|} or FAIL. | | | - plaintext P in B_{|C|} or FAIL. | | |||
| |-------------------------------------------------------------------| | |-------------------------------------------------------------------| | |||
| | 1. MGMnonce = STR_1(nonce[1] & 0x7f) | nonce[2..IVlen]; | | | 1. MGMnonce = STR_1(nonce[1] & 0x7f) | nonce[2..IVlen]; | | |||
| | 2. res' = MGM-Decrypt(K, MGMnonce, A, C, T); | | | 2. res' = MGM-Decrypt(K, MGMnonce, A, C, T); | | |||
| | 3. IF res' = FAIL then return FAIL; | | | 3. IF res' = FAIL then return FAIL; | | |||
| | 4. IF res' = (A, P) then return P. | | | 4. IF res' = (A, P) then return P. | | |||
| +-------------------------------------------------------------------+ | +-------------------------------------------------------------------+]]></source | |||
| code> | ||||
| ]]></artwork> | ||||
| <t> | <t> | |||
| where | where | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| the MGM-Encrypt and MGM-Decrypt functions are de | the MGM-Encrypt and MGM-Decrypt functions are | |||
| fined in <xref target="RFC9058" format="default"/>. The length of authentication | defined in <xref target="RFC9058" | |||
| tag T is equal to n bytes (S = n). | format="default"/>;</li> <li>the length of | |||
| The length of the nonce parameter is equal to n | authentication tag T is equal to n bytes (S = | |||
| bytes (IVlen = n). | n);</li> <li>the length of the nonce parameter | |||
| is equal to n bytes (IVlen = n). | ||||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| Cipher suites TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L and TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S MUST use Kuznyechik <xref target=" RFC7801" format="default"/> | Cipher suites TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L and TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S <bcp14>MUST</bcp14> use Kuznyechik <xref target="RFC7801" format="default"/> | |||
| 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). | 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). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Cipher suites TLS_GOSTR341112_256_WITH_MAGMA_MGM_L and T LS_GOSTR341112_256_WITH_MAGMA_MGM_S MUST use Magma <xref target="RFC8891" format ="default"/> | Cipher suites TLS_GOSTR341112_256_WITH_MAGMA_MGM_L and T LS_GOSTR341112_256_WITH_MAGMA_MGM_S <bcp14>MUST</bcp14> use Magma <xref target=" RFC8891" format="default"/> | |||
| 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). | 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). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="TLSTREE" numbered="true" toc="default"> | <section anchor="TLSTREE" numbered="true" toc="default"> | |||
| <name>TLSTREE</name> | <name>TLSTREE</name> | |||
| <t> | <t> | |||
| The TLS13_GOST cipher suites use the TLSTREE function to support the external re-keying approach (see <xref target="RFC8645" format="def ault"/>). The TLSTREE function is defined as follows: | The TLS13_GOST cipher suites use the TLSTREE function to support the external re-keying approach (see <xref target="RFC8645" format="def ault"/>). The TLSTREE function is defined as follows: | |||
| </t> | </t><t indent="3">TLSTREE(K_root, i) = KDF_3(KDF_2(KDF_1(K_root, STR_8 | |||
| <ul empty="true" spacing="normal"> | (i & C_1)), STR_8(i & C_2)), STR_8(i & C_3)), | |||
| <li> | </t> | |||
| TLSTREE(K_root, i) = KDF_3(KDF_2(KDF_1(K_root, S | ||||
| TR_8(i & C_1)), STR_8(i & C_2)), STR_8(i & C_3)), | ||||
| </li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| where | where | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| K_root in B_32; | K_root in B_32; | |||
| </li> | </li> | |||
| <li> | <li> | |||
| i in {0, 1, ... , 2^64 - 1}; | i in {0, 1, ... , 2^64 - 1}; | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t> | <t> | |||
| KDF_j(K, D), j = 1, 2, 3, is the key derivation function defined as follows: </t> | KDF_j(K, D), j = 1, 2, 3, is the key derivation function defined as follows: </t> | |||
| <ul spacing="normal"> | ||||
| <li> | ||||
| KDF_1(K, D) = KDF_GOSTR3411_2012_256(K, "level1" | ||||
| , D),</li> | ||||
| <li> | ||||
| KDF_2(K, D) = KDF_GOSTR3411_2012_256(K, "level2" | ||||
| , D),</li> | ||||
| <li> | ||||
| KDF_3(K, D) = KDF_GOSTR3411_2012_256(K, "level3" | ||||
| , D),</li></ul> | ||||
| <t> | <t> | |||
| KDF_1(K, D) = KDF_GOSTR3411_2012_256(K, "level1" | where the KDF_GOSTR3411_2012_256 function is def | |||
| , D),</t> | ined in <xref target="RFC7836" format="default"/>, K in B_32, D in B_8; | |||
| <t> | ||||
| KDF_2(K, D) = KDF_GOSTR3411_2012_256(K, "level2" | ||||
| , D),</t> | ||||
| <t> | ||||
| KDF_3(K, D) = KDF_GOSTR3411_2012_256(K, "level3" | ||||
| , D),</t> | ||||
| <t> | ||||
| where the KDF_GOSTR3411_2012_256 function is def | ||||
| ined in <xref target="RFC7836" format="default"/>, K in B_32, D in B_8. | ||||
| </t> | ||||
| </li> | ||||
| <li> | ||||
| C_1, C_2, C_3 are the constants defined by each | ||||
| cipher suite as follows: | ||||
| </li> | ||||
| </ul> | ||||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| +------------------------------------------+----------------------+ | </t></li> | |||
| | 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 | ||||
| ]]></artwork> | <li><t> | |||
| C_1, C_2, C_3 are the constants defined by each | ||||
| cipher suite as follows: | ||||
| </t></li> | ||||
| </ul> | ||||
| <table> | ||||
| <thead> | ||||
| <tr> | ||||
| <th>CipherSuites</th> | ||||
| <th>C_1, C_2, C_3</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L</td> | ||||
| <td><t>C_1=0xf800000000000000</t> | ||||
| <t>C_2=0xfffffff000000000</t> | ||||
| <t>C_3=0xffffffffffffe000</t></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>TLS_GOSTR341112_256_WITH_MAGMA_MGM_L</td> | ||||
| <td><t>C_1=0xffe0000000000000</t> | ||||
| <t>C_2=0xffffffffc0000000</t> | ||||
| <t>C_3=0xffffffffffffff80</t></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S</td> | ||||
| <td><t>C_1=0xffffffffe0000000</t> | ||||
| <t>C_2=0xffffffffffff0000</t> | ||||
| <t>C_3=0xfffffffffffffff8</t></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>TLS_GOSTR341112_256_WITH_MAGMA_MGM_S</td> | ||||
| <td><t>C_1=0xfffffffffc000000</t> | ||||
| <t>C_2=0xffffffffffffe000</t> | ||||
| <t>C_3=0xffffffffffffffff</t></td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| <section anchor="SNMAX" numbered="true" toc="default"> | <section anchor="SNMAX" numbered="true" toc="default"> | |||
| <name>SNMAX parameter</name> | <name>SNMAX Parameter</name> | |||
| <t> | <t> | |||
| The SNMAX parameter is the maximum number of records enc rypted under the same traffic key material (sender_write_key and sender_write_iv ) | The SNMAX parameter is the maximum number of records enc rypted under the same traffic key material (sender_write_key and sender_write_iv ) | |||
| and is defined by each cipher suite as follows: | and is defined by each cipher suite as follows: | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <table> | |||
| <thead> | ||||
| +------------------------------------------+--------------------+ | <tr> | |||
| | 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 | ||||
| ]]></artwork> | <th>CipherSuites</th> | |||
| <th>SNMAX</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L</td> | ||||
| <td>SNMAX = 2^64 - 1</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>TLS_GOSTR341112_256_WITH_MAGMA_MGM_L</td> | ||||
| <td>SNMAX = 2^64 - 1</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S</td> | ||||
| <td>SNMAX = 2^42 - 1</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>TLS_GOSTR341112_256_WITH_MAGMA_MGM_S</td> | ||||
| <td>SNMAX = 2^39 - 1</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="HASH" numbered="true" toc="default"> | <section anchor="HASH" numbered="true" toc="default"> | |||
| <name>Hash Algorithm</name> | <name>Hash Algorithm</name> | |||
| <t> | <t> | |||
| The Hash algorithm is used for the key derivation process (s | The Hash algorithm is used for the key derivation process (s | |||
| ee Section 7.1 of <xref target="RFC8446" format="default"/>), | ee <xref target="RFC8446" section="7.1" sectionFormat="of"/>), | |||
| Finished message calculation (see Section 4.4.4 of <xref tar | Finished message calculation (see <xref target="RFC8446" sec | |||
| get="RFC8446" format="default"/>), Transcript-Hash function computation | tion="4.4.4" sectionFormat="of"/>), Transcript-Hash function computation | |||
| (see Section 4.4.1 of <xref target="RFC8446" format="default | (see <xref target="RFC8446" section="4.4.1" sectionFormat="o | |||
| "/>), PSK binder value calculation (see Section 4.2.11.2 of <xref target="RFC844 | f"/>), Pre-Shared Key (PSK) binder value calculation (see <xref target="RFC8446" | |||
| 6" format="default"/>), | section="4.2.11.2" sectionFormat="of"/>), | |||
| external re-keying approach (see <xref target="TLSTREE" form | external re-keying approach (see <xref target="TLSTREE" form | |||
| at="default"/>) and other purposes. | at="default"/>), and other purposes. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If a TLS13_GOST cipher suite is negotiated, the Hash algorit | If a TLS13_GOST cipher suite is negotiated, the Hash algorit | |||
| hm MUST be the GOST R 34.11-2012 | hm <bcp14>MUST</bcp14> be the GOST R 34.11-2012 | |||
| hash algorithm <xref target="RFC6986" format="default"/> wit | hash algorithm <xref target="RFC6986" format="default"/> wit | |||
| h 32-byte (256-bit) hash value. | h a 32-byte (256-bit) hash value. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="SSD" numbered="true" toc="default"> | <section anchor="SSD" numbered="true" toc="default"> | |||
| <name>Signature Scheme Definition</name> | <name>Signature Scheme Definition</name> | |||
| <t> | <t> | |||
| This section defines the following seven TLS13_GOST signature sc hemes: | This section defines the following seven TLS13_GOST signature sc hemes: | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode name="" type=""><![CDATA[ | |||
| enum { | enum { | |||
| gostr34102012_256a(0x0709), | gostr34102012_256a(0x0709), | |||
| gostr34102012_256b(0x070A), | gostr34102012_256b(0x070A), | |||
| gostr34102012_256c(0x070B), | gostr34102012_256c(0x070B), | |||
| gostr34102012_256d(0x070C), | gostr34102012_256d(0x070C), | |||
| gostr34102012_512a(0x070D), | gostr34102012_512a(0x070D), | |||
| gostr34102012_512b(0x070E), | gostr34102012_512b(0x070E), | |||
| gostr34102012_512c(0x070F) | gostr34102012_512c(0x070F) | |||
| } SignatureScheme; | } SignatureScheme;]]></sourcecode> | |||
| ]]></artwork> | ||||
| <t> | <t> | |||
| One of the TLS13_GOST signature schemes listed above SHOULD be u sed with the TLS13_GOST profile. | One of the TLS13_GOST signature schemes listed above <bcp14>SHOU LD</bcp14> be used with the TLS13_GOST profile. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Each signature scheme specifies a pair of the signature algorith | ||||
| m (see <xref target="SignatureAlgorithm" format="default"/>) and the elliptic cu | Each signature scheme specifies a pair consisting of the signature algorit | |||
| rve (see <xref target="EllipticCurve" format="default"/>). | hm (see <xref | |||
| The procedure to calculate the signature value using TLS13_GOST | target="SignatureAlgorithm" format="default"/>) and the elliptic curve | |||
| signature schemes is defined in <xref target="SIGN" format="default"/>. | (see <xref target="EllipticCurve" format="default"/>). The procedure to | |||
| calculate the signature value using TLS13_GOST signature schemes is | ||||
| defined in <xref target="SIGN" format="default"/>. | ||||
| </t> | </t> | |||
| <section anchor="SignatureAlgorithm" numbered="true" toc="default"> | <section anchor="SignatureAlgorithm" numbered="true" toc="default"> | |||
| <name>Signature Algorithm</name> | <name>Signature Algorithm</name> | |||
| <t> | <t> | |||
| Signature algorithms corresponding to the TLS13_GOST signatu re schemes are defined as follows: | Signature algorithms corresponding to the TLS13_GOST signatu re schemes are defined as follows: | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| +------------------+--------------------------------------+--------+ | <table> | |||
| | SignatureScheme | Signature Algorithm | Refe- | | <thead> | |||
| | Value | | rences | | <tr> | |||
| +------------------+--------------------------------------+--------+ | <th>SignatureScheme Value</th> | |||
| |gostr34102012_256a|GOST R 34.10-2012 , 32-byte key length|RFC 7091| | <th>Signature Algorithm</th> | |||
| +------------------+--------------------------------------+--------+ | <th>References</th> | |||
| |gostr34102012_256b|GOST R 34.10-2012 , 32-byte key length|RFC 7091| | </tr> | |||
| +------------------+--------------------------------------+--------+ | </thead> | |||
| |gostr34102012_256c|GOST R 34.10-2012 , 32-byte key length|RFC 7091| | <tbody> | |||
| +------------------+--------------------------------------+--------+ | <tr> | |||
| |gostr34102012_256d|GOST R 34.10-2012 , 32-byte key length|RFC 7091| | <td>gostr34102012_256a</td> | |||
| +------------------+--------------------------------------+--------+ | <td>GOST R 34.10-2012, 32-byte key length</td> | |||
| |gostr34102012_512a|GOST R 34.10-2012 , 64-byte key length|RFC 7091| | <td>RFC 7091</td> | |||
| +------------------+--------------------------------------+--------+ | </tr><tr> | |||
| |gostr34102012_512b|GOST R 34.10-2012 , 64-byte key length|RFC 7091| | <td>gostr34102012_256b</td> | |||
| +------------------+--------------------------------------+--------+ | <td>GOST R 34.10-2012, 32-byte key length</td> | |||
| |gostr34102012_512c|GOST R 34.10-2012 , 64-byte key length|RFC 7091| | <td>RFC 7091</td></tr><tr> | |||
| +------------------+--------------------------------------+--------+ | <td>gostr34102012_256c</td> | |||
| Table 3 | <td>GOST R 34.10-2012, 32-byte key length</td> | |||
| <td>RFC 7091</td></tr><tr> | ||||
| ]]></artwork> | <td>gostr34102012_256d</td> | |||
| <td>GOST R 34.10-2012, 32-byte key length</td> | ||||
| <td>RFC 7091</td></tr><tr> | ||||
| <td>gostr34102012_512a</td> | ||||
| <td>GOST R 34.10-2012, 64-byte key length</td> | ||||
| <td>RFC 7091</td></tr><tr> | ||||
| <td>gostr34102012_512b</td> | ||||
| <td>GOST R 34.10-2012, 64-byte key length</td> | ||||
| <td>RFC 7091</td></tr><tr> | ||||
| <td>gostr34102012_512c</td> | ||||
| <td>GOST R 34.10-2012, 64-byte key length</td> | ||||
| <td>RFC 7091</td></tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| <section anchor="EllipticCurve" numbered="true" toc="default"> | <section anchor="EllipticCurve" numbered="true" toc="default"> | |||
| <name>Elliptic Curve</name> | <name>Elliptic Curve</name> | |||
| <t> | <t> | |||
| Elliptic curves corresponding to the TLS13_GOST signature sc hemes are defined as follows: | Elliptic curves corresponding to the TLS13_GOST signature sc hemes are defined as follows: | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <table> | |||
| <thead> | ||||
| <tr> | ||||
| +------------------+--------------------------------------+--------+ | <th>SignatureScheme Value</th> | |||
| | SignatureScheme | Curve Identifier Value | Refe- | | <th>Curve Identifier Value</th> | |||
| | Value | | rences | | <th>References</th> | |||
| +------------------+--------------------------------------+--------+ | </tr> | |||
| |gostr34102012_256a| id-tc26-gost-3410-2012-256-paramSetA |RFC 7836| | </thead> | |||
| +------------------+--------------------------------------+--------+ | <tbody> | |||
| |gostr34102012_256b|id-GostR3410-2001-CryptoPro-A-ParamSet|RFC 4357| | <tr> | |||
| +------------------+--------------------------------------+--------+ | <td>gostr34102012_256a</td> | |||
| |gostr34102012_256c|id-GostR3410-2001-CryptoPro-B-ParamSet|RFC 4357| | <td>id-tc26-gost-3410-2012-256-paramSetA</td> | |||
| +------------------+--------------------------------------+--------+ | <td>RFC 7836</td> | |||
| |gostr34102012_256d|id-GostR3410-2001-CryptoPro-C-ParamSet|RFC 4357| | </tr><tr> | |||
| +------------------+--------------------------------------+--------+ | ||||
| |gostr34102012_512a| id-tc26-gost-3410-12-512-paramSetA |RFC 7836| | ||||
| +------------------+--------------------------------------+--------+ | ||||
| |gostr34102012_512b| id-tc26-gost-3410-12-512-paramSetB |RFC 7836| | ||||
| +------------------+--------------------------------------+--------+ | ||||
| |gostr34102012_512c| id-tc26-gost-3410-2012-512-paramSetC |RFC 7836| | ||||
| +------------------+--------------------------------------+--------+ | ||||
| Table 4 | ||||
| ]]></artwork> | <td>gostr34102012_256b</td> | |||
| <td>id-GostR3410-2001-CryptoPro-A-ParamSet</td> | ||||
| <td>RFC 4357</td> | ||||
| </tr><tr> | ||||
| <td>gostr34102012_256c</td> | ||||
| <td>id-GostR3410-2001-CryptoPro-B-ParamSet</td> | ||||
| <td>RFC 4357</td> | ||||
| </tr><tr> | ||||
| <td>gostr34102012_256d</td> | ||||
| <td>id-GostR3410-2001-CryptoPro-C-ParamSet</td> | ||||
| <td>RFC 4357</td> | ||||
| </tr><tr> | ||||
| <td>gostr34102012_512a</td> | ||||
| <td>id-tc26-gost-3410-12-512-paramSetA</td> | ||||
| <td>RFC 7836</td> | ||||
| </tr><tr> | ||||
| <td>gostr34102012_512b</td> | ||||
| <td>id-tc26-gost-3410-12-512-paramSetB</td> | ||||
| <td>RFC 7836</td> | ||||
| </tr><tr> | ||||
| <td>gostr34102012_512c</td> | ||||
| <td>id-tc26-gost-3410-2012-512-paramSetC</td> | ||||
| <td>RFC 7836</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| <section anchor="SIGN" numbered="true" toc="default"> | <section anchor="SIGN" numbered="true" toc="default"> | |||
| <name>SIGN function</name> | <name>SIGN Function</name> | |||
| <t> | <t> | |||
| If the TLS13_GOST signature scheme is used, the signature va lue in the CertificateVerify message (see <xref target="CV" format="default"/>) | If the TLS13_GOST signature scheme is used, the signature va lue in the CertificateVerify message (see <xref target="CV" format="default"/>) | |||
| MUST be calculated using the SIGN function defined as follow s: | <bcp14>MUST</bcp14> be calculated using the SIGN function de fined as follows: | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode type="pseudocode"><![CDATA[ | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | SIGN(d_sign, M) | | | SIGN(d_sign, M) | | |||
| |-----------------------------------------------------| | |-----------------------------------------------------| | |||
| | Input: | | | Input: | | |||
| | - the sign key d_sign: 0 < d_sign < q; | | | - the sign key d_sign: 0 < d_sign < q; | | |||
| | - the byte string M in B*. | | | - the byte string M in B*. | | |||
| | Output: | | | Output: | | |||
| | - signature value sgn in B_{2*l}. | | | - signature value sgn in B_{2*l}. | | |||
| |-----------------------------------------------------| | |-----------------------------------------------------| | |||
| | 1. (r, s) = SIGNGOST(d_sign, M) | | | 1. (r, s) = SIGNGOST(d_sign, M) | | |||
| | 2. Return str_l(r) | str_l(s). | | | 2. Return str_l(r) | str_l(s). | | |||
| |-----------------------------------------------------+ | |-----------------------------------------------------+]]></sourcecode> | |||
| ]]></artwork> | ||||
| <t> | <t> | |||
| where | where | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| q is the subgroup order of group of points of the el liptic curve; | q is the subgroup order of the group of points of th e elliptic curve; | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t> | <t> | |||
| l is defined as follows: | l is defined as follows: | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| l = 32 for the gostr34102012_256a, gostr3410 2012_256b, gostr34102012_256c | l = 32 for the gostr34102012_256a, gostr3410 2012_256b, gostr34102012_256c, | |||
| and gostr34102012_256d signature schemes; | and gostr34102012_256d signature schemes; | |||
| </li> | </li> | |||
| <li> | <li> | |||
| l = 64 for the gostr34102012_512a, gostr3410 2012_512b and gostr34102012_512c | l = 64 for the gostr34102012_512a, gostr3410 2012_512b, and gostr34102012_512c | |||
| signature schemes; | signature schemes; | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| SIGNGOST is an algorithm which takes a private key d | 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) | sign and a message M as an input and returns a pair of integers (r, s) | |||
| calculated during signature generation process in ac | that is calculated during the signature generation p | |||
| cordance with the GOST R 34.10-2012 signature algorithm | rocess in accordance with the GOST R 34.10-2012 signature algorithm | |||
| (see Section 6.1 of <xref target="RFC7091" format="d | (see <xref target="RFC7091" section="6.1" sectionFor | |||
| efault"/>). | mat="of"/>). | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| Note: The signature value sgn is the concatenation of two st rings that are byte representations of r and s values in the little-endian forma t. | Note: The signature value sgn is the concatenation of two st rings that are byte representations of r and s values in the little-endian forma t. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="KEA" numbered="true" toc="default"> | <section anchor="KEA" numbered="true" toc="default"> | |||
| <name>Key Exchange and Authentication</name> | <name>Key Exchange and Authentication</name> | |||
| <t> | <t> | |||
| Key exchange and authentication process in case of using the TLS | The key exchange and authentication process for using the | |||
| 13_GOST profile is defined in | TLS13_GOST profile is defined in Sections <xref target="KE" | |||
| <xref target="KE" format="default"/>, <xref target="Auth" format | format="counter"/>, <xref target="Auth" format="counter"/>, and | |||
| ="default"/> and <xref target="HandshakeMessages" format="default"/>. | <xref target="HandshakeMessages" format="counter"/>. | |||
| </t> | </t> | |||
| <section anchor="KE" numbered="true" toc="default"> | <section anchor="KE" numbered="true" toc="default"> | |||
| <name>Key Exchange</name> | <name>Key Exchange</name> | |||
| <t> | <t> | |||
| TLS13_GOST profile supports three basic key exchange modes w hich are defined in <xref target="RFC8446" format="default"/>: ECDHE, PSK-only a nd PSK with ECDHE. | The TLS13_GOST profile supports three basic key exchange mod es that are defined in <xref target="RFC8446" format="default"/>: Ephemeral Elli ptic Curve Diffie-Hellman (ECDHE), PSK-only, and PSK with ECDHE. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note: In accordance with <xref target="RFC8446" format="defa | Note: In accordance with <xref target="RFC8446" format="defa | |||
| ult"/> TLS 1.3 also supports key exchange modes based on Diffie-Hellman protocol | ult"/>, TLS 1.3 also supports key exchange modes based on the Diffie-Hellman pro | |||
| over finite fields. However, TLS13_GOST profile MUST use mod | tocol | |||
| es based on Diffie-Hellman protocol over elliptic curves. | over finite fields. However, the TLS13_GOST profile <bcp14>M | |||
| UST</bcp14> use modes based on the Diffie-Hellman protocol over elliptic curves. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| In accordance with <xref target="RFC8446" format="default"/> PSKs can be divided into two types: | In accordance with <xref target="RFC8446" format="default"/> , PSKs can be divided into two types: | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| internal PSKs which can be established during the pr evious connection; | internal PSKs that can be established during the pre vious connection; | |||
| </li> | </li> | |||
| <li> | <li> | |||
| external PSKs which can be established out of band. | external PSKs that can be established out of band. | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| If the TLS13_GOST profile is used, PSK-only key exchange mod | If the TLS13_GOST profile is used, PSK-only key exchange mod | |||
| e SHOULD be established via the internal PSKs, and external PSKs | e <bcp14>SHOULD</bcp14> be established via the internal PSKs, and external PSKs | |||
| SHOULD be used only in PSK with ECDHE mode (see more in <xre | <bcp14>SHOULD</bcp14> be used only in PSK with ECDHE mode (s | |||
| f target="Security" format="default"/>). | ee more in <xref target="Security" format="default"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the TLS13_GOST profile is used and ECDHE or PSK with ECDH E key exchange mode is used, the ECDHE shared secret SHOULD be calculated | If the TLS13_GOST profile is used and ECDHE or PSK with ECDH E key exchange mode is used, the ECDHE shared secret <bcp14>SHOULD</bcp14> be ca lculated | |||
| in accordance with <xref target="ECDHE" format="default"/> o n the basis of one of the elliptic curves defined in <xref target="SGR" format=" default"/>. | in accordance with <xref target="ECDHE" format="default"/> o n the basis of one of the elliptic curves defined in <xref target="SGR" format=" default"/>. | |||
| </t> | </t> | |||
| <section anchor="ECDHE" numbered="true" toc="default"> | <section anchor="ECDHE" numbered="true" toc="default"> | |||
| <name>ECDHE Shared Secret Calculation</name> | <name>ECDHE Shared Secret Calculation</name> | |||
| <t> | <t> | |||
| If the TLS13_GOST profile is used, ECDHE shared secr | If the TLS13_GOST profile is used, the ECDHE shared | |||
| et SHOULD be calculated in accordance with <xref target="ClientECDHECalc" format | secret <bcp14>SHOULD</bcp14> be calculated in accordance with Sections <xref tar | |||
| ="default"/> | get="ClientECDHECalc" format="counter"/> | |||
| and <xref target="ServerECDHECalc" format="default"/ | and <xref target="ServerECDHECalc" format="counter"/ | |||
| >. The public ephemeral keys used to obtain ECDHE shared secret SHOULD be repres | >. The public ephemeral keys used to obtain the ECDHE shared secret <bcp14>SHOUL | |||
| ented in the format | D</bcp14> be represented in the format | |||
| described in <xref target="EphKeyRepr" format="defau lt"/>. | described in <xref target="EphKeyRepr" format="defau lt"/>. | |||
| </t> | </t> | |||
| <section anchor="ClientECDHECalc" numbered="true" toc="default"> | <section anchor="ClientECDHECalc" numbered="true" toc="default"> | |||
| <name>ECDHE Shared Secret Calculation on Client Side</name> | <name>ECDHE Shared Secret Calculation on the Client Side</name> | |||
| <t> | ||||
| The client calculates ECDHE shared secret in accorda | ||||
| nce with the following steps: | ||||
| </t> | ||||
| <t> | ||||
| 1. Chooses from all supported curves E_1, ..., E_R t | ||||
| he set of curves E_{i_1}, ..., E_{i_r}, 1 <= i_1 <= i_r <= R, where | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| r >= 1 in case of the first ClientHello m | ||||
| essage; | ||||
| </li> | ||||
| <li> | ||||
| r = 1 in case of responding to the HelloRetr | ||||
| yRequest message, E_{i_1} corresponds to the curve | ||||
| indicated in the "key_share" extension in th | ||||
| e HelloRetryRequest message. | ||||
| </li> | ||||
| </ul> | ||||
| <t> | ||||
| 2. 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 i | ||||
| n {i_1, ..., i_r}: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| d_C^i is chosen from {1, ..., q_i - 1} at ra | ||||
| ndom; | ||||
| </li> | ||||
| <li> | ||||
| Q_C^i = d_C^i * P_i. | ||||
| </li> | ||||
| </ul> | ||||
| <t> | ||||
| 3. Sends the ClientHello message specified in accord | ||||
| ance with Section 4.1.2 of <xref target="RFC8446" format="default"/> | ||||
| and <xref target="HelloMessages" format="default"/>, | ||||
| which contains: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| "key_share" extension with public ephemeral | ||||
| keys Q_C^{i_1}, ..., Q_C^{i_r} built in accordance with | ||||
| Section 4.2.8 of <xref target="RFC8446" form | ||||
| at="default"/>; | ||||
| </li> | ||||
| <li> | ||||
| "supported_groups" extension with supported | ||||
| curves E_1, ..., E_R built in accordance with | ||||
| Section 4.2.7 of <xref target="RFC8446" form | ||||
| at="default"/>. | ||||
| </li> | ||||
| </ul> | ||||
| <t> | ||||
| Note: The client MAY send an empty "key_share" exten | ||||
| sion in the first ClientHello message to request a group | ||||
| selection from the server in the HelloRetryRequest m | ||||
| essage and to generate an ephemeral key for the selected group only. | ||||
| The ECDHE shared secret may be calculated without se | ||||
| nding 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. | ||||
| </t> | ||||
| <t> | ||||
| 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 <xref target="RFC8446" format= | ||||
| "default"/>. | ||||
| If the ServerHello message is received, the client p | ||||
| roceeds to the next step. In other cases, the client MUST terminate the | ||||
| connection with the "unexpected_message" alert. | ||||
| </t> | ||||
| <t> | ||||
| 5. Extracts curve E_res and ephemeral key Q_S^res, r | ||||
| es in {1, ..., R}, from the ServerHello message and checks whether | ||||
| Q_S^res belongs to E_res. If this check fails, the c | ||||
| lient MUST terminate the connection with "handshake_failure" alert. | ||||
| </t> | ||||
| <t> | ||||
| 6. Generates Q^ECDHE: | ||||
| </t> | ||||
| <ul empty="true" spacing="normal"> | ||||
| <li> | ||||
| Q^ECDHE = (X^ECDHE, Y^ECDHE) = (h_res * d_C^ | ||||
| res) * Q_S^res. | ||||
| </li> | ||||
| </ul> | ||||
| <t> | ||||
| 7. The client MUST check whether the calculated shar | ||||
| ed secret Q^ECDHE is not equal to the zero point O_res. If this check fails, | ||||
| the client MUST terminate the connection with "hands | ||||
| hake_failure" alert. | ||||
| </t> | ||||
| <t> | ||||
| 8. The ECDHE shared secret is the byte representatio | ||||
| n of the coordinate X^ECDHE of the point Q^ECDHE in the little-endian format: | ||||
| </t> | ||||
| <ul empty="true" spacing="normal"> | ||||
| <li> | ||||
| ECDHE = str_{coordinate_length}(X^ECDHE), | ||||
| </li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| where the coordinate_length value is defined by the particular elliptic curve (see <xref target="SGR" format="default"/>). | The client calculates the ECDHE shared secret in acc ordance with the following steps: | |||
| </t> | </t> | |||
| </section> | ||||
| <ol type="Step %d."> | ||||
| <li anchor="step1"><t>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 | ||||
| </t> | ||||
| <ul> | ||||
| <li>r >= 1 in the case of the first ClientHello message;</li> | ||||
| <li>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 HelloR | ||||
| etryRequest message.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li><t>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 f | ||||
| or each i in {i_1, ..., i_r}:</t> | ||||
| <ul> | ||||
| <li> d_C^i is chosen from {1, ..., q_i - 1} at random;</li> | ||||
| <li>Q_C^i = d_C^i * P_i.</li> | ||||
| </ul> | ||||
| </li> | ||||
| <li><t>The client sends the ClientHello message specified in accordance with <xr | ||||
| ef | ||||
| target="RFC8446" section="4.1.2" sectionFormat="of"/> and <xref | ||||
| target="HelloMessages" format="default"/> that contains:</t> | ||||
| <ul> | ||||
| <li>"key_share" extension with public ephemeral keys Q_C^{i_1}, ..., | ||||
| Q_C^{i_r} built in accordance with <xref target="RFC8446" section="4.2.8" | ||||
| sectionFormat="of"/>;</li> | ||||
| <li>"supported_groups" extension with supported curves E_1, ..., E_R built | ||||
| in accordance with <xref target="RFC8446" section="4.2.7" | ||||
| sectionFormat="of"/>.</li></ul> | ||||
| <t indent="3">Note: The client <bcp14>MAY</bcp14> send an empty "key_share" ex | ||||
| tension | ||||
| 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.</t> | ||||
| </li> | ||||
| <li><t>If the HelloRetryRequest message is received, the client | ||||
| <bcp14>MUST</bcp14> return to <xref target="step1" format="none">Step 1</xref> a | ||||
| nd choose correct parameters in | ||||
| accordance with <xref target="RFC8446" section="4.1.2" sectionFormat="of"/>. | ||||
| If the ServerHello message is received, the client proceeds to the next | ||||
| step. In other cases, the client <bcp14>MUST</bcp14> terminate the connection | ||||
| with the "unexpected_message" alert.</t></li> | ||||
| <li><t>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 <bcp14>MUST</bcp14> terminate | ||||
| the connection with "handshake_failure" alert.</t></li> | ||||
| <li><t>The client generates Q^ECDHE:</t> | ||||
| <ul empty="true"><li>Q^ECDHE = (X^ECDHE, Y^ECDHE) = (h_res * d_C^res) * Q_S^res. | ||||
| </li> | ||||
| </ul></li> | ||||
| <li><t>The client <bcp14>MUST</bcp14> check whether the calculated shared | ||||
| secret Q^ECDHE is not equal to the zero point O_res. If this check fails, the | ||||
| client <bcp14>MUST</bcp14> terminate the connection with "handshake_failure" | ||||
| alert.</t></li> | ||||
| <li><t>The ECDHE shared secret is the byte representation of the coordinate X^EC | ||||
| DHE of the point Q^ECDHE in the little-endian format:</t> | ||||
| <t indent="3"> | ||||
| ECDHE = str_{coordinate_length}(X^ECDHE),</t><t> where the coordinate_length val | ||||
| ue is defined by the particular elliptic curve (see <xref target="SGR" format="d | ||||
| efault"/>).</t> | ||||
| </li></ol> </section> | ||||
| <section anchor="ServerECDHECalc" numbered="true" toc="default"> | <section anchor="ServerECDHECalc" numbered="true" toc="default"> | |||
| <name>ECDHE Shared Secret Calculation on Server Side</name> | <name>ECDHE Shared Secret Calculation on Server Side</name> | |||
| <t> | <t> | |||
| Upon receiving the ClientHello message, the server c | Upon receiving the ClientHello message, the server | |||
| alculates ECDHE shared secret in accordance with the following steps: | calculates the ECDHE shared secret in accordance wit | |||
| </t> | h | |||
| <t> | the following steps: | |||
| 1. 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 corresp | ||||
| onding 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 MUS | ||||
| T send the HelloRetryRequest message with the "key_share" extension indicating t | ||||
| he selected | ||||
| elliptic curve E_res and wait for the new ClientHell | ||||
| o message. | ||||
| </t> | ||||
| <t> | ||||
| 2. Checks whether Q_C^res belongs to E_res. If this | ||||
| check fails, the server MUST terminate the connection with "handshake_failure" a | ||||
| lert. | ||||
| </t> | ||||
| <t> | ||||
| 3. Generates ephemeral key pair (d_S^res, Q_S^res) c | ||||
| orresponding to E_res: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li> | ||||
| d_S^res is chosen from {1, ..., q_res - 1} a | ||||
| t random; | ||||
| </li> | ||||
| <li> | ||||
| Q_S^res = d_S^res * P_res. | ||||
| </li> | ||||
| </ul> | ||||
| <t> | ||||
| 4. Sends the ServerHello message generated in accord | ||||
| ance with Section 4.1.3 of <xref target="RFC8446" format="default"/> | ||||
| and <xref target="HelloMessages" format="default"/> | ||||
| with the "key_share" extension which contains public ephemeral key | ||||
| Q_S^res corresponding to E_res. | ||||
| </t> | ||||
| <t> | ||||
| 5. Generates Q^ECDHE: | ||||
| </t> | ||||
| <ul empty="true" spacing="normal"> | ||||
| <li> | ||||
| Q^ECDHE = (X^ECDHE, Y^ECDHE) = (h_res * d_S^ | ||||
| res) * Q_C^res. | ||||
| </li> | ||||
| </ul> | ||||
| <t> | ||||
| 6. The server MUST check whether the calculated shar | ||||
| ed 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. | ||||
| </t> | ||||
| <t> | ||||
| 7. The ECDHE shared secret is the byte representatio | ||||
| n of the coordinate X^ECDHE of the point Q^ECDHE in the little-endian format: | ||||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | <ol type="Step %d."> | |||
| <li> | <li><t>The server chooses the curve E_res, res in {1, ..., R}, from the list of | |||
| ECDHE = str_{coordinate_length}(X^ECDHE), | the | |||
| </li> | 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 <bcp14>MUST</bcp14> | ||||
| send the HelloRetryRequest message with the "key_share" extension indicating | ||||
| the selected elliptic curve E_res and wait for the new ClientHello message. | ||||
| </t></li> | ||||
| <li><t>The server checks whether Q_C^res belongs to E_res. If this check fails, | ||||
| the server <bcp14>MUST</bcp14> terminate the connection with "handshake_failure" | ||||
| alert.</t></li> | ||||
| <li><t>The server generates ephemeral key pair (d_S^res, Q_S^res) corresponding | ||||
| to E_res:</t> | ||||
| <ul> | ||||
| <li>d_S^res is chosen from {1, ..., q_res - 1} at random;</li> | ||||
| <li>Q_S^res = d_S^res * P_res.</li> | ||||
| </ul> | </ul> | |||
| <t> | </li> | |||
| where the coordinate_length value is defined by the | <li><t>The server sends the ServerHello message generated in accordance with <xr | |||
| particular elliptic curve (see <xref target="SGR" format="default"/>). | ef | |||
| </t> | target="RFC8446" section="4.1.3" sectionFormat="of"/> and <xref | |||
| target="HelloMessages" format="default"/> with the "key_share" extension that | ||||
| contains public ephemeral key Q_S^res corresponding to E_res.</t></li> | ||||
| <li><t>The server generates Q^ECDHE:</t> | ||||
| <t indent="3">Q^ECDHE = (X^ECDHE, Y^ECDHE) = (h_res * d_S^res) * Q_C^res.</t> | ||||
| </li> | ||||
| <li><t>The server <bcp14>MUST</bcp14> check whether the calculated shared | ||||
| secret Q^ECDHE is not equal to the zero point O_res. If this check fails, the | ||||
| server <bcp14>MUST</bcp14> abort the handshake with "handshake_failure" alert.</ | ||||
| t></li> | ||||
| <li><t>The ECDHE shared secret is the byte representation of the coordinate | ||||
| X^ECDHE of the point Q^ECDHE in the little-endian format:</t> | ||||
| <t indent="3">ECDHE = str_{coordinate_length}(X^ECDHE),</t><t> where the coordin | ||||
| ate_length value is defined by the particular elliptic curve (see <xref target=" | ||||
| SGR" | ||||
| format="default"/>).</t> | ||||
| </li> | ||||
| </ol> | ||||
| </section> | </section> | |||
| <section anchor="EphKeyRepr" numbered="true" toc="default"> | <section anchor="EphKeyRepr" numbered="true" toc="default"> | |||
| <name>Public ephemeral key representation</name> | <name>Public Ephemeral Key Representation</name> | |||
| <t> | <t> | |||
| This section defines the representation format of th e public ephemeral keys generated during the ECDHE shared secret calculation | This section defines the representation format of th e public ephemeral keys generated during the ECDHE shared secret calculation | |||
| (see <xref target="ClientECDHECalc" format="default" /> and <xref target="ServerECDHECalc" format="default"/>). | (see Sections <xref target="ClientECDHECalc" format= "counter"/> and <xref target="ServerECDHECalc" format="counter"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the TLS13_GOST profile is used and ECDHE or PSK w ith ECDHE key exchange mode is used, the public ephemeral key Q | If the TLS13_GOST profile is used and ECDHE or PSK w ith ECDHE key exchange mode is used, the public ephemeral key Q | |||
| indicated in the KeyShareEntry.key_exchange field MU ST contain the data defined by the following structure: | indicated in the KeyShareEntry.key_exchange field <b cp14>MUST</bcp14> contain the data defined by the following structure: | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode name="" type=""><![CDATA[ | |||
| struct { | struct { | |||
| opaque X[coordinate_length]; | opaque X[coordinate_length]; | |||
| opaque Y[coordinate_length]; | opaque Y[coordinate_length]; | |||
| } PlainPointRepresentation; | } PlainPointRepresentation;]]></sourcecode> | |||
| ]]></artwork> | ||||
| <t> | <t> | |||
| where X and Y, respectively, contain the byte repres entations of x and y values of the point Q (Q = (x, y)) in the little-endian for mat | where X and Y, respectively, contain the byte repres entations of x and y values of the point Q (Q = (x, y)) in the little-endian for mat | |||
| and are specified as follows: | and are specified as follows: | |||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | <ul empty="false" spacing="normal"> | |||
| <li> | <li> | |||
| X = str_{coordinate_length}(x); | X = str_{coordinate_length}(x); | |||
| </li> | </li> | |||
| <li> | <li> | |||
| Y = str_{coordinate_length}(y). | Y = str_{coordinate_length}(y). | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| The coordinate_length value is defined by the partic ular elliptic curve (see <xref target="SGR" format="default"/>). | The coordinate_length value is defined by the partic ular elliptic curve (see <xref target="SGR" format="default"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="SGR" numbered="true" toc="default"> | <section anchor="SGR" numbered="true" toc="default"> | |||
| <name>Values for the TLS Supported Groups Registry</name> | <name>Values for the TLS Supported Groups Registry</name> | |||
| <t> | <t> | |||
| The "supported_groups" extension is used to indicate the set of the elliptic curves supported by an endpoint and is defined | 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 <xref target="RFC8446" format="default" />. This extension is always contained in the ClientHello message and optionally | in <xref target="RFC8446" section="4.2.7" sectionFormat= "of"/>. This extension is always contained in the ClientHello message and option ally | |||
| in the EncryptedExtensions message. | in the EncryptedExtensions message. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This section defines the following seven elliptic curves : | This section defines the following seven elliptic curves : | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode name="" type=""><![CDATA[ | |||
| enum { | enum { | |||
| GC256A(0x22), GC256B(0x23), GC256C(0x24), GC256D(0x25), | GC256A(0x22), GC256B(0x23), GC256C(0x24), GC256D(0x25), | |||
| GC512A(0x26), GC512B(0x27), GC512C(0x28) | GC512A(0x26), GC512B(0x27), GC512C(0x28) | |||
| } NamedGroup; | } NamedGroup;]]></sourcecode> | |||
| ]]></artwork> | ||||
| <t> | <t> | |||
| 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. | 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 <bcp14> SHOULD</bcp14> be used. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Each curve corresponds to the particular identifier and specifies the value of coordinate_length parameter (see "cl" column) as follows: | Each curve corresponds to the particular identifier and specifies the value of coordinate_length parameter (see "cl" column) as follows: | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <table anchor="table5"> | |||
| <thead> | ||||
| <tr> | ||||
| <th>Description</th> | ||||
| <th>Curve Identifier Value</th> | ||||
| <th>cl</th> | ||||
| <th>Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| +-----------+--------------------------------------+----+---------+ | <td>GC256A</td><td> id-tc26-gost-3410-2012-256-paramSetA </td><td> 32 </td><td>R | |||
| |Description| Curve Identifier Value | cl |Reference| | FC 7836</td></tr><tr> | |||
| +-----------+--------------------------------------+----+---------+ | ||||
| | 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 | ||||
| ]]></artwork> | <td>GC256B</td> | |||
| <td>id-GostR3410-2001-CryptoPro-A-ParamSet</td> | ||||
| <td>32</td> | ||||
| <td>RFC 4357</td> | ||||
| </tr><tr> | ||||
| <td>GC256C</td> | ||||
| <td>id-GostR3410-2001-CryptoPro-B-ParamSet</td> | ||||
| <td>32</td> | ||||
| <td>RFC 4357</td> | ||||
| </tr><tr> | ||||
| <td>GC256D</td> | ||||
| <td>id-GostR3410-2001-CryptoPro-C-ParamSet</td> | ||||
| <td>32</td> | ||||
| <td>RFC 4357</td> | ||||
| </tr><tr> | ||||
| <td>GC512A</td> | ||||
| <td>id-tc26-gost-3410-12-512-paramSetA</td> | ||||
| <td>64</td> | ||||
| <td>RFC 7836</td> | ||||
| </tr><tr> | ||||
| <td>GC512B</td> | ||||
| <td>id-tc26-gost-3410-12-512-paramSetB</td> | ||||
| <td>64</td> | ||||
| <td>RFC 7836</td> | ||||
| </tr><tr> | ||||
| <td>GC512C</td> | ||||
| <td>id-tc26-gost-3410-2012-512-paramSetC</td> | ||||
| <td>64</td> | ||||
| <td>RFC 7836</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t> | <t> | |||
| Note: The identifier values and the corresponding ellipt ic curves are the same as in <xref target="RFC9189" format="default"/>. | Note: The identifier values and the corresponding ellipt ic curves are the same as in <xref target="RFC9189" format="default"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="Auth" numbered="true" toc="default"> | <section anchor="Auth" numbered="true" toc="default"> | |||
| <name>Authentication</name> | <name>Authentication</name> | |||
| <t> | <t> | |||
| In accordance with <xref target="RFC8446" format="default"/> , authentication can be performed via a signature with a certificate or via a sy mmetric pre-shared key (PSK). | In accordance with <xref target="RFC8446" format="default"/> , authentication can be performed via a signature with a certificate or via a sy mmetric PSK. | |||
| The server side is always authenticated; the client side is optionally authenticated. | The server side is always authenticated; the client side is optionally authenticated. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| PSK-based authentication is performed as a side effect of ke | PSK-based authentication is performed as a side effect of ke | |||
| y exchange. If the TLS13_GOST profile is used, external PSKs SHOULD be combined | y exchange. If the TLS13_GOST profile is used, external PSKs <bcp14>SHOULD</bcp1 | |||
| only with the mutual authentication (see more in <xref targe | 4> be combined | |||
| t="Security" format="default"/>). | only with mutual authentication (see <xref target="Security" | |||
| format="default"/>). | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Certificate-based authentication is performed via Authentica tion messages and optional CertificateRequest message (sent if client authentica tion is required). | Certificate-based authentication is performed via Authentica tion messages and an optional CertificateRequest message (sent if client authent ication is required). | |||
| If the TLS13_GOST profile is used, the signature schemes use d for certificate-based authentication are defined in <xref target="SSD" format= "default"/> | If the TLS13_GOST profile is used, the signature schemes use d for certificate-based authentication are defined in <xref target="SSD" format= "default"/> | |||
| and Authentication messages are specified in <xref target="C ert" format="default"/> and <xref target="CV" format="default"/>. The Certificat eRequest message is specified in <xref target="CR" format="default"/>. | and Authentication messages are specified in Sections <xref target="Cert" format="counter"/> and <xref target="CV" format="counter"/>. The C ertificateRequest message is specified in <xref target="CR" format="default"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="HandshakeMessages" numbered="true" toc="default"> | <section anchor="HandshakeMessages" numbered="true" toc="default"> | |||
| <name>Handshake Messages</name> | <name>Handshake Messages</name> | |||
| <t> | <t> | |||
| The TLS13_GOST profile specifies the ClientHello, ServerHell o, CertificateRequest, Certificate | The TLS13_GOST profile specifies the ClientHello, ServerHell o, CertificateRequest, Certificate | |||
| and CertificateVerify handshake messages that are described in further detail below. | and CertificateVerify handshake messages that are described in further detail below. | |||
| </t> | </t> | |||
| <section anchor="HelloMessages" numbered="true" toc="default"> | <section anchor="HelloMessages" numbered="true" toc="default"> | |||
| <name>Hello Messages</name> | <name>Hello Messages</name> | |||
| <t> | <t> | |||
| The ClientHello message is sent when the client first co nnects to the server or responds | The ClientHello message is sent when the client first co nnects to the server or responds | |||
| to the HelloRetryRequest message and is specified in acc ordance with Section 4.1.2 of <xref target="RFC8446" format="default"/>. | to the HelloRetryRequest message and is specified in acc ordance with <xref target="RFC8446" section="4.1.2" sectionFormat="of"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the TLS13_GOST profile is used, the ClientHello messa ge MUST meet the following requirements. | If the TLS13_GOST profile is used, the ClientHello messa ge <bcp14>MUST</bcp14> meet the following requirements: | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| The ClientHello.cipher_suites field MUST contain the values defined in <xref target="CipherSuites" format="default"/>. | The ClientHello.cipher_suites field <bcp14>MUST< /bcp14> contain the values defined in <xref target="CipherSuites" format="defaul t"/>. | |||
| </li> | </li> | |||
| <li> | <li> | |||
| If server authentication via a certificate is re | If server authentication via a certificate is | |||
| quired, the extension_data field | required, the extension_data field of the | |||
| of the "signature_algorithms" extension MUST con | "signature_algorithms" extension | |||
| tain the values defined in <xref target="SSD" format="default"/>, | <bcp14>MUST</bcp14> contain the values defined | |||
| which correspond to the GOST R 34.10-2012 signat | in <xref target="SSD" format="default"/> that co | |||
| ure algorithm. | rrespond to the GOST R 34.10-2012 | |||
| signature algorithm. | ||||
| </li> | </li> | |||
| <li> | <li> | |||
| If server authentication via a certificate is re quired and the client uses optional | If server authentication via a certificate is re quired and the client uses optional | |||
| "signature_algorithms_cert" extension, the exten | "signature_algorithms_cert" extension, the exten | |||
| sion_data field of this extension SHOULD contain the | sion_data field of this extension <bcp14>SHOULD</bcp14> contain the | |||
| values defined in <xref target="SSD" format="def | values defined in <xref target="SSD" format="def | |||
| ault"/>, which correspond to the GOST R 34.10-2012 signature algorithm. | ault"/> that correspond to the GOST R 34.10-2012 signature algorithm. | |||
| </li> | </li> | |||
| <li> | <li> | |||
| If the client wants to establish a TLS 1.3 conne | If the client wants to establish a TLS 1.3 conne | |||
| ction using ECDHE shared secret, the extension_data field | ction using the ECDHE shared secret, the extension_data field | |||
| of the "supported_groups" extension MUST contain | of the "supported_groups" extension <bcp14>MUST< | |||
| the elliptic curve identifiers defined | /bcp14> contain the elliptic curve identifiers defined | |||
| in <xref target="SGR" format="default"/>. | in <xref target="SGR" format="default"/>. | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| The ServerHello message is sent by the server in respons e to the ClientHello message to negotiate | The ServerHello message is sent by the server in respons e to the ClientHello message to negotiate | |||
| an acceptable set of handshake parameters based on the C lientHello message and is specified in accordance | an acceptable set of handshake parameters based on the C lientHello message and is specified in accordance | |||
| with Section 4.1.3 of <xref target="RFC8446" format="def ault"/>. | with <xref target="RFC8446" section="4.1.3" sectionForma t="of"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the TLS13_GOST profile is used, the ServerHello messa | If the TLS13_GOST profile is used, the ServerHello messa | |||
| ge MUST meet the following requirements. | ge <bcp14>MUST</bcp14> meet the following requirements: </t> | |||
| </t> | ||||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| The ServerHello.cipher_suite field MUST contain one of the values defined | The ServerHello.cipher_suite field <bcp14>MUST</ bcp14> contain one of the values defined | |||
| in <xref target="CipherSuites" format="default"/ >. | in <xref target="CipherSuites" format="default"/ >. | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t> | <t> | |||
| If the server decides to establish a TLS 1.3 con | If the server decides to establish a TLS 1.3 con | |||
| nection using ECDHE shared secret, | nection using the ECDHE shared secret, | |||
| the extension_data field of the "key_share" exte | the extension_data field of the "key_share" exte | |||
| nsion MUST contain the elliptic curve | nsion <bcp14>MUST</bcp14> contain the elliptic curve | |||
| identifier and the public ephemeral key that sat | identifier and the public ephemeral key that sat | |||
| isfy the following conditions. | isfy the following conditions: | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| The elliptic curve identifier correspond s to the value that was indicated in the | The elliptic curve identifier correspond s to the value that was indicated in the | |||
| "supported_groups" and the "key_share" e xtensions in the ClientHello message. | "supported_groups" and the "key_share" e xtensions in the ClientHello message. | |||
| </li> | </li> | |||
| <li> | <li> | |||
| The elliptic curve identifier is one of the values defined in <xref target="SGR" format="default"/>. | The elliptic curve identifier is one of the values defined in <xref target="SGR" format="default"/>. | |||
| </li> | </li> | |||
| <li> | <li> | |||
| skipping to change at line 1044 ¶ | skipping to change at line 1116 ¶ | |||
| KeyShareEntry.group identifier. | KeyShareEntry.group identifier. | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| </section> | </section> | |||
| <section anchor="CR" numbered="true" toc="default"> | <section anchor="CR" numbered="true" toc="default"> | |||
| <name>CertificateRequest</name> | <name>CertificateRequest</name> | |||
| <t> | <t> | |||
| This message is sent when the server requests client aut hentication via a certificate and is specified in | This message is sent when the server requests client aut hentication via a certificate and is specified in | |||
| accordance with Section 4.3.2 of <xref target="RFC8446" format="default"/>. | accordance with <xref target="RFC8446" section="4.3.2" s ectionFormat="of"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the TLS13_GOST profile is used, the CertificateReques | If the TLS13_GOST profile is used, the CertificateReques | |||
| t message MUST meet the following | t message <bcp14>MUST</bcp14> meet the following | |||
| requirements. | requirements: | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| The extension_data field of the "signature_algor ithms" extension MUST contain only the values | The extension_data field of the "signature_algor ithms" extension <bcp14>MUST</bcp14> contain only the values | |||
| defined in <xref target="SSD" format="default"/> . | defined in <xref target="SSD" format="default"/> . | |||
| </li> | </li> | |||
| <li> | <li> | |||
| If the server uses optional "signature_algorithm s_cert" extension, the extension_data field | If the server uses optional "signature_algorithm s_cert" extension, the extension_data field | |||
| of this extension SHOULD contain only the values defined in <xref target="SSD" format="default"/>. | of this extension <bcp14>SHOULD</bcp14> contain only the values defined in <xref target="SSD" format="default"/>. | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| </section> | </section> | |||
| <section anchor="Cert" numbered="true" toc="default"> | <section anchor="Cert" numbered="true" toc="default"> | |||
| <name>Certificate</name> | <name>Certificate</name> | |||
| <t> | <t> | |||
| This message is sent to convey the endpoint's certificat e chain to the peer and is specified in | This message is sent to convey the endpoint's certificat e chain to the peer and is specified in | |||
| accordance with Section 4.4.2 of <xref target="RFC8446" format="default"/>. | accordance with <xref target="RFC8446" section="4.4.2" s ectionFormat="of"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the TLS13_GOST profile is used, the Certificate messa ge MUST meet the following requirements. | If the TLS13_GOST profile is used, the Certificate messa ge <bcp14>MUST</bcp14> meet the following requirements. | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| Each endpoint's certificate provided to the peer | Each endpoint's certificate provided to the peer <bcp14>MUST</bcp14> be signed u | |||
| MUST be signed using the algorithm | sing the algorithm | |||
| which corresponds to a signature scheme indicate | that corresponds to a signature scheme indicated | |||
| d by the peer in its "signature_algoritms_cert" | by the peer in its "signature_algorithms_cert" | |||
| extension, if present (or in the "signature_algo rithms" extension, otherwise). | extension, if present (or in the "signature_algo rithms" extension, otherwise). | |||
| </li> | </li> | |||
| <li> | <li> | |||
| The signature algorithm used for signing certifi cates SHOULD correspond to one of the | The signature algorithm used for signing certifi cates <bcp14>SHOULD</bcp14> correspond to one of the | |||
| signature schemes defined in <xref target="SSD" format="default"/>. | signature schemes defined in <xref target="SSD" format="default"/>. | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <!--<t> | ||||
| Note: A certificate containing a key for one signature a | ||||
| lgorithm MAY be signed using | ||||
| a different signature algorithm, but all the signature a | ||||
| lgoritms used by an endpoint to create | ||||
| certificate chain MUST correspond to the signature schem | ||||
| es indicated by the peer in its | ||||
| "signature_algoritms_cert" extension, if present (or "si | ||||
| gnature_algorithms" extension, otherwise). | ||||
| </t> | ||||
| <t> | ||||
| Note: If the server cannot produce a certificate chain t | ||||
| hat is signed only via the indicated supported algorithms | ||||
| (for example, if all of the server certificates in the c | ||||
| hain are signed with the old signature algorithms | ||||
| such as GOST R 34.10-94which don't have the values to be | ||||
| indicated by the client in its "signature_algorithms_cert" | ||||
| extension), then it SHOULD continue the handshake by sen | ||||
| ding the client a certificate chain of its choice that may | ||||
| include algorithms that are not known to be supported by | ||||
| the client. Client MUST abort the handshake with a | ||||
| "bad_certificate" alert if the server Certificate messag | ||||
| e contains at least one certificate signed with an | ||||
| unsupported signature algorithm. | ||||
| </t>--> | ||||
| </section> | </section> | |||
| <section anchor="CV" numbered="true" toc="default"> | <section anchor="CV" numbered="true" toc="default"> | |||
| <name>CertificateVerify</name> | <name>CertificateVerify</name> | |||
| <t> | <t> | |||
| This message is sent to provide explicit proof that the endpoint has the private key | This message is sent to provide explicit proof that the endpoint has the private key | |||
| corresponding to the public key indicated in its certifi cate and is specified in accordance | corresponding to the public key indicated in its certifi cate and is specified in accordance | |||
| with Section 4.4.3 of <xref target="RFC8446" format="def ault"/>. | with <xref target="RFC8446" section="4.4.3" sectionForma t="of"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the TLS13_GOST profile is used, the CertificateVerify | If the TLS13_GOST profile is used, the | |||
| message MUST meet the following requirements. | CertificateVerify message <bcp14>MUST</bcp14> meet the | |||
| </t> | following requirements: </t> <ul spacing="normal"> | |||
| <ul spacing="normal"> | <li><t> The CertificateVerify.algorithm field | |||
| <li> | <bcp14>MUST</bcp14> contain the signature scheme | |||
| The CertificateVerify.algorithm field MUST conta | identifier that corresponds to the value indicated in | |||
| in the signature scheme identifier which | the peer's "signature_algorithms" extension and is one | |||
| corresponds to the value indicated in the peer's | of the values defined in <xref target="SSD" | |||
| "signature_algorithms" extension and | format="default"/>. </t></li> | |||
| which is one of the values defined in <xref targ | ||||
| et="SSD" format="default"/>. | ||||
| </li> | ||||
| <li> | <li> | |||
| <t> | <t> | |||
| The CertificateVerify.signature field contains t | The CertificateVerify.signature field contains | |||
| he sgn value, which is computed as follows: | the sgn value that is computed as follows: | |||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | <t indent="3">sgn = SIGN(d_sign, M), | |||
| <li> | </t> | |||
| sgn = SIGN(d_sign, M), | ||||
| </li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| where | where | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li> | <li> | |||
| the SIGN function is defined in <xref ta rget="SIGN" format="default"/>, | the SIGN function is defined in <xref ta rget="SIGN" format="default"/>; | |||
| </li> | </li> | |||
| <li> | <li> | |||
| d_sign is the sender's long-term private key that corresponds to | 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 sender's long-term public key Q_sign from the sender's certificate; | |||
| </li> | </li> | |||
| <li> | <li> | |||
| the message M is defined in accordance w ith Section 4.4.3 of <xref target="RFC8446" format="default"/>. | the message M is defined in accordance w ith <xref target="RFC8446" sectionFormat="of" section="4.4.3"/>. | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="IANACON" numbered="true" toc="default"> | <section anchor="IANACON" numbered="true" toc="default"> | |||
| <name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
| <t> | <t> | |||
| IANA has added the following values to | IANA has added the following values to the "TLS Cipher Suites" | |||
| the "TLS Cipher Suites" registry: | registry with a reference to this RFC: | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| +----------+-----------------------------+-------+-------------+-----------+ | <table> | |||
| | Value | Description |DTLS-OK| Recommended | Reference | | <thead> | |||
| +----------+-----------------------------+-------+-------------+-----------+ | <tr> | |||
| |0xC1, 0x03| TLS_GOSTR341112_256_ | N | N | this RFC | | <th>Value</th> | |||
| | | _WITH_KUZNYECHIK_MGM_L | | | | | <th>Description</th> | |||
| +----------+-----------------------------+-------+-------------+-----------+ | <th>DTLS-OK</th> | |||
| |0xC1, 0x04| TLS_GOSTR341112_256_ | N | N | this RFC | | <th>Recommended</th> | |||
| | | _WITH_MAGMA_MGM_L | | | | | </tr> | |||
| +----------+-----------------------------+-------+-------------+-----------+ | </thead> | |||
| |0xC1, 0x05| TLS_GOSTR341112_256_ | N | N | this RFC | | <tbody> | |||
| | | _WITH_KUZNYECHIK_MGM_S | | | | | <tr> | |||
| +----------+-----------------------------+-------+-------------+-----------+ | <td>0xC1, 0x03</td> | |||
| |0xC1, 0x06| TLS_GOSTR341112_256_ | N | N | this RFC | | <td>TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L</td> | |||
| | | _WITH_MAGMA_MGM_S | | | | | <td>N</td> | |||
| +----------+-----------------------------+-------+-------------+-----------+ | <td>N</td> | |||
| Table 6 | </tr> | |||
| <tr> | ||||
| ]]></artwork> | <td>0xC1, 0x04</td> | |||
| <td>TLS_GOSTR341112_256_WITH_MAGMA_MGM_L</td> | ||||
| <td>N</td> | ||||
| <td>N</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>0xC1, 0x05</td> | ||||
| <td>TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S</td> | ||||
| <td>N</td> | ||||
| <td>N</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>0xC1, 0x06</td> | ||||
| <td>TLS_GOSTR341112_256_WITH_MAGMA_MGM_S</td> | ||||
| <td>N</td> | ||||
| <td>N</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t> | <t> | |||
| IANA has added the following values to | IANA has added the following values to the "TLS SignatureScheme" | |||
| the "TLS SignatureScheme" registry: | registry with a reference to this RFC: | |||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <table> | |||
| <thead> | ||||
| <tr> | ||||
| <th>Value</th> | ||||
| <th>Description</th> | ||||
| <th>Recommended</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>0x0709</td> | ||||
| <td>gostr34102012_256a</td> | ||||
| <td>N</td> | ||||
| </tr><tr> | ||||
| <td>0x070A</td> | ||||
| <td>gostr34102012_256b</td> | ||||
| <td>N</td> | ||||
| </tr><tr> | ||||
| +-----------+----------------------+---------------+----------+ | <td>0x070B</td> | |||
| | Value | Description | Recommended | Reference| | <td>gostr34102012_256c</td> | |||
| +-----------+----------------------+---------------+----------+ | <td>N</td> | |||
| | 0x0709 | gostr34102012_256a | N | this RFC | | </tr><tr> | |||
| +-----------+----------------------+---------------+----------+ | ||||
| | 0x070A | gostr34102012_256b | N | this RFC | | <td>0x070C</td> | |||
| +-----------+----------------------+---------------+----------+ | <td>gostr34102012_256d</td> | |||
| | 0x070B | gostr34102012_256c | N | this RFC | | <td>N</td> | |||
| +-----------+----------------------+---------------+----------+ | </tr><tr> | |||
| | 0x070C | gostr34102012_256d | N | this RFC | | ||||
| +-----------+----------------------+---------------+----------+ | <td>0x070D</td> | |||
| | 0x070D | gostr34102012_512a | N | this RFC | | <td>gostr34102012_512a</td> | |||
| +-----------+----------------------+---------------+----------+ | <td>N</td> | |||
| | 0x070E | gostr34102012_512b | N | this RFC | | </tr><tr> | |||
| +-----------+----------------------+---------------+----------+ | ||||
| | 0x070F | gostr34102012_512c | N | this RFC | | <td>0x070E</td> | |||
| +-----------+----------------------+---------------+----------+ | <td>gostr34102012_512b</td> | |||
| Table 7 | <td>N</td> | |||
| </tr><tr> | ||||
| <td>0x070F</td> | ||||
| <td>gostr34102012_512c</td> | ||||
| <td>N</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| ]]></artwork> | ||||
| </section> | </section> | |||
| <section anchor="Historical" numbered="true" toc="default"> | <section anchor="Historical" numbered="true" toc="default"> | |||
| <name>Historical considerations</name> | <name>Historical Considerations</name> | |||
| <t> | <t> | |||
| Due to historical reasons in addition to the curve identifier va | In addition to the curve identifier values listed in <xref targe | |||
| lues listed in Table 5 | t="table5"/>, | |||
| there exist some additional identifier values that correspond to | there are some additional identifier values that correspond to t | |||
| the signature schemes as follows. | he signature schemes for historical reasons. | |||
| They are as follows: | ||||
| </t> | </t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <table> | |||
| <thead> | ||||
| +--------------------+-------------------------------------------+ | <tr> | |||
| | Description | Curve Identifier Value | | <th>Description</th> | |||
| +--------------------+-------------------------------------------+ | <th>Curve Identifier Value</th> | |||
| | gostr34102012_256b | id-GostR3410-2001-CryptoPro-XchA-ParamSet | | </tr> | |||
| | | id-tc26-gost-3410-2012-256-paramSetB | | </thead> | |||
| +--------------------+-------------------------------------------+ | <tbody> | |||
| | gostr34102012_256c | id-tc26-gost-3410-2012-256-paramSetC | | <tr> | |||
| +--------------------+-------------------------------------------+ | <td>gostr34102012_256b</td> | |||
| | gostr34102012_256d | id-GostR3410-2001-CryptoPro-XchB-ParamSet | | <td>id-GostR3410-2001-CryptoPro-XchA-ParamSet, | |||
| | | id-tc26-gost-3410-2012-256-paramSetD | | id-tc26-gost-3410-2012-256-paramSetB</td> | |||
| +--------------------+-------------------------------------------+ | </tr> | |||
| Table 8 | <tr> | |||
| <td>gostr34102012_256c</td> | ||||
| ]]></artwork> | <td>id-tc26-gost-3410-2012-256-paramSetC</td> | |||
| </tr> | ||||
| <tr> | ||||
| <td>gostr34102012_256d</td> | ||||
| <td>id-GostR3410-2001-CryptoPro-XchB-ParamSet, | ||||
| id-tc26-gost-3410-2012-256-paramSetD</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t> | <t> | |||
| Client should be prepared to handle any of them correctly if cor responding signature scheme is included in the "signature_algorithms" | 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. | or "signature_algorithms_cert" extensions. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="Security" numbered="true" toc="default"> | <section anchor="Security" numbered="true" toc="default"> | |||
| <name>Security Considerations</name> | <name>Security Considerations</name> | |||
| <t> | <t> | |||
| In order to create an efficient and side-channel resistant imp | In order to create an efficient and side-channel resistant imp | |||
| lementation, while using the TLSTREE algorithm the functions | lementation while using the TLSTREE algorithm, the functions | |||
| KDF_j, j = 1, 2, 3, SHOULD be called only when necessary (when | KDF_j, j = 1, 2, 3, <bcp14>SHOULD</bcp14> be called only when | |||
| the record sequence number seqnum reaches such a value that | necessary (when the record sequence number seqnum reaches such a value that | |||
| seqnum & C_j != (seqnum - 1) & C_j). Otherwise the pre | seqnum & C_j != (seqnum - 1) & C_j). Otherwise, the pr | |||
| vious value should be used. | evious value should be used. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <displayreference target="I-D.ietf-tls-rfc8446bis" to="RFC8446BIS"/> | ||||
| <references> | <references> | |||
| <name>References</name> | <name>References</name> | |||
| <references> | <references> | |||
| <name>Normative References</name> | <name>Normative References</name> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.2119.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.2119.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.7801.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.7801.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.6986.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.6986.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.7091.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.7091.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.7836.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.7836.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.8174.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.8174.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.8446.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.8446.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.8645.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.8645.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.8891.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.8891.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.9058.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.9058.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.9189.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.9189.xml"/> | |||
| </references> | </references> | |||
| <references> | <references> | |||
| <name>Informative References</name> | <name>Informative References</name> | |||
| <!-- [I-D.ietf-tls-rfc8446bis] IESG state I-D Exists --> | ||||
| <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D .ietf-tls-rfc8446bis.xml"/> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D .ietf-tls-rfc8446bis.xml"/> | |||
| </references> | </references> | |||
| </references> | </references> | |||
| <section anchor="Appendix" numbered="true" toc="default"> | <section anchor="Appendix" numbered="true" toc="default"> | |||
| <name>Test Examples</name> | <name>Test Examples</name> | |||
| <section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
| <name>Example 1</name> | <name>Example 1</name> | |||
| <section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
| <name>Test case</name> | ||||
| <t> | <name>Test Case</name> | |||
| Test examples are given for the following order of usi | ||||
| ng the TLS13_GOST profile. | ||||
| </t> | ||||
| <t> | ||||
| 1. Full TLS Handshake is used. | ||||
| </t> | ||||
| <t> | ||||
| 2. ECDHE key exchange mode is used. | ||||
| The elliptic curve GC512C is used for ECDHE shared sec | ||||
| ret calculation. | ||||
| </t> | ||||
| <t> | ||||
| 3. The server side only authentication is used. | ||||
| The signature scheme gost34102012_256b is used. | ||||
| </t> | ||||
| <t> | ||||
| 4. TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S cipher su | ||||
| ite is negotiated. | ||||
| </t> | ||||
| <t> | ||||
| 5. Application Data is sent by the server prior to rec | ||||
| eiving the Finished message from the client. | ||||
| </t> | ||||
| <t> | ||||
| 6. NewSessionTicket is sent after establishing a secur | ||||
| e connection. | ||||
| </t> | ||||
| <t> | ||||
| 7. Nine Application Data records are sent during the o | ||||
| peration of the Record protocol. | ||||
| The sequence numbers are selected to demonstrate th | ||||
| e operation of the TLSTREE function. | ||||
| </t> | ||||
| <t> | <t> | |||
| 8. Alert protocol is used for closure of the connectio n. | Test examples are given for the following instance of th e TLS13_GOST profile: | |||
| </t> | </t> | |||
| <ol><li>Full TLS Handshake is used. | ||||
| </li> | ||||
| <li>ECDHE key exchange mode is used. The elliptic curve GC512C | ||||
| is used for ECDHE shared secret calculation. | ||||
| </li> | ||||
| <li>Authentication is only used on the server side. The signature | ||||
| scheme gost34102012_256b is used. | ||||
| </li> | ||||
| <li>TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S cipher suite is | ||||
| negotiated. | ||||
| </li> | ||||
| <li>Application Data is sent by the server prior to receiving the | ||||
| Finished message from the client. | ||||
| </li> | ||||
| <li> NewSessionTicket is sent after establishing a secure connecti | ||||
| on. | ||||
| </li> | ||||
| <li>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. | ||||
| </li> | ||||
| <li>Alert protocol is used for closure of the connection. | ||||
| </li></ol> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
| <name>Test examples</name> | <name>Test Examples</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| <sourcecode name="" type=""><![CDATA[ | ||||
| ---------------------------Client--------------------------- | ---------------------------Client--------------------------- | |||
| ClientHello message: | ClientHello message: | |||
| msg_type: 01 | msg_type: 01 | |||
| length: 0000DE | length: 0000DE | |||
| body: | body: | |||
| legacy_version: 0303 | legacy_version: 0303 | |||
| random: 03030303030303030303030303030303 | random: 03030303030303030303030303030303 | |||
| 03030303030303030303030303030303 | 03030303030303030303030303030303 | |||
| legasy_session_id: | legacy_session_id: | |||
| length: 00 | length: 00 | |||
| vector: -- | vector: -- | |||
| cipher_suites: | cipher_suites: | |||
| length: 0002 | length: 0002 | |||
| vector: | vector: | |||
| CipherSuite: C105 | CipherSuite: C105 | |||
| compression_methods: | compression_methods: | |||
| length: 01 | length: 01 | |||
| vector: | vector: | |||
| CompressionMethod: 00 | CompressionMethod: 00 | |||
| skipping to change at line 1452 ¶ | skipping to change at line 1562 ¶ | |||
| ---------------------------Server--------------------------- | ---------------------------Server--------------------------- | |||
| ServerHello message: | ServerHello message: | |||
| msg_type: 02 | msg_type: 02 | |||
| length: 0000B6 | length: 0000B6 | |||
| body: | body: | |||
| legacy_version: 0303 | legacy_version: 0303 | |||
| random: 83838383838383838383838383838383 | random: 83838383838383838383838383838383 | |||
| 83838383838383838383838383838383 | 83838383838383838383838383838383 | |||
| legasy_session_id: | legacy_session_id: | |||
| length: 00 | length: 00 | |||
| vector: -- | vector: -- | |||
| cipher_suite: | cipher_suite: | |||
| CipherSuite: C105 | CipherSuite: C105 | |||
| compression_method: | compression_method: | |||
| CompressionMethod: 00 | CompressionMethod: 00 | |||
| extensions: | extensions: | |||
| length: 008E | length: 008E | |||
| vector: | vector: | |||
| Extension: /* supported_versions */ | Extension: /* supported_versions */ | |||
| skipping to change at line 2913 ¶ | skipping to change at line 3023 ¶ | |||
| Record layer message: | Record layer message: | |||
| type: 17 | type: 17 | |||
| legacy_record_version: 0303 | legacy_record_version: 0303 | |||
| length: 0013 | length: 0013 | |||
| encrypted_record: CB19F306C3641754BE4FC95390DF06F9 | encrypted_record: CB19F306C3641754BE4FC95390DF06F9 | |||
| CD44AA | CD44AA | |||
| TLSCiphertext: | TLSCiphertext: | |||
| 00000: 17 03 03 00 13 CB 19 F3 06 C3 64 17 54 BE 4F C9 | 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 | 00010: 53 90 DF 06 F9 CD 44 AA]]></sourcecode> | |||
| ]]></artwork> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
| <name>Example 2</name> | <name>Example 2</name> | |||
| <section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
| <name>Test case</name> | <name>Test Case</name> | |||
| <t> | ||||
| Test examples are given for the following order of usi | ||||
| ng the TLS13_GOST profile. | ||||
| </t> | ||||
| <t> | ||||
| 1. Full TLS Handshake is used. | ||||
| </t> | ||||
| <t> | ||||
| 2. PSK with ECDHE key exchange mode is used. | ||||
| The elliptic curve GC256B is used for ECDHE shared sec | ||||
| ret calculation. | ||||
| </t> | ||||
| <t> | ||||
| 3. The server and client sides authentication is used. | ||||
| The external PSK is used for the mutual authentication | ||||
| . | ||||
| </t> | ||||
| <t> | ||||
| 4. TLS_GOSTR341112_256_WITH_MAGMA_MGM_L cipher suite i | ||||
| s negotiated. | ||||
| </t> | ||||
| <t> | ||||
| 5. Four Application Data records are sent during the o | ||||
| peration of the Record protocol. | ||||
| The sequence numbers are selected to demonstrate th | ||||
| e operation of the TLSTREE function. | ||||
| </t> | ||||
| <t> | <t> | |||
| 6. Alert protocol is used for closure of the connectio n. | Test examples are given for the following instance of the TLS13_GOST profile: | |||
| </t> | </t> | |||
| <ol><li>Full TLS Handshake is used. | ||||
| </li> | ||||
| <li>PSK with ECDHE key exchange mode is used. The elliptic | ||||
| curve GC256B is used for ECDHE shared secret calculation. | ||||
| </li> | ||||
| <li>Authentication is used on the server and client sides. The | ||||
| external PSK is used for the mutual authentication. | ||||
| </li> | ||||
| <li>TLS_GOSTR341112_256_WITH_MAGMA_MGM_L cipher suite is negotiate | ||||
| d. | ||||
| </li> | ||||
| <li>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. | ||||
| </li> | ||||
| <li>Alert protocol is used for closure of the connection. | ||||
| </li></ol> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | <section numbered="true" toc="default"> | |||
| <name>Test examples</name> | <name>Test Examples</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | <sourcecode name="" type=""><![CDATA[ | |||
| ePSK: | 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 | |||
| 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--------------------------- | ---------------------------Client--------------------------- | |||
| ClientHello1 message: | ClientHello1 message: | |||
| msg_type: 01 | msg_type: 01 | |||
| length: 00007B | length: 00007B | |||
| body: | body: | |||
| legacy_version: 0303 | legacy_version: 0303 | |||
| random: 01010101010101010101010101010101 | random: 01010101010101010101010101010101 | |||
| 01010101010101010101010101010101 | 01010101010101010101010101010101 | |||
| legasy_session_id: | legacy_session_id: | |||
| length: 00 | length: 00 | |||
| vector: -- | vector: -- | |||
| cipher_suites: | cipher_suites: | |||
| length: 0002 | length: 0002 | |||
| vector: | vector: | |||
| CipherSuite: C104 | CipherSuite: C104 | |||
| compression_methods: | compression_methods: | |||
| length: 01 | length: 01 | |||
| vector: | vector: | |||
| CompressionMethod: 00 | CompressionMethod: 00 | |||
| skipping to change at line 3110 ¶ | skipping to change at line 3212 ¶ | |||
| ---------------------------Server--------------------------- | ---------------------------Server--------------------------- | |||
| HelloRetryRequest message: | HelloRetryRequest message: | |||
| msg_type: 02 | msg_type: 02 | |||
| length: 000034 | length: 000034 | |||
| body: | body: | |||
| legacy_version: 0303 | legacy_version: 0303 | |||
| random: CF21AD74E59A6111BE1D8C021E65B891 | random: CF21AD74E59A6111BE1D8C021E65B891 | |||
| C2A211167ABB8C5E079E09E2C8A8339C | C2A211167ABB8C5E079E09E2C8A8339C | |||
| legasy_session_id: | legacy_session_id: | |||
| length: 00 | length: 00 | |||
| vector: -- | vector: -- | |||
| cipher_suite: | cipher_suite: | |||
| CipherSuite: C104 | CipherSuite: C104 | |||
| compression_method: | compression_method: | |||
| CompressionMethod: 00 | CompressionMethod: 00 | |||
| extensions: | extensions: | |||
| length: 000C | length: 000C | |||
| vector: | vector: | |||
| Extension: /* supported_versions */ | Extension: /* supported_versions */ | |||
| skipping to change at line 3161 ¶ | skipping to change at line 3263 ¶ | |||
| ---------------------------Client--------------------------- | ---------------------------Client--------------------------- | |||
| ClientHello2 message: | ClientHello2 message: | |||
| msg_type: 01 | msg_type: 01 | |||
| length: 0000BF | length: 0000BF | |||
| body: | body: | |||
| legacy_version: 0303 | legacy_version: 0303 | |||
| random: 01010101010101010101010101010101 | random: 01010101010101010101010101010101 | |||
| 01010101010101010101010101010101 | 01010101010101010101010101010101 | |||
| legasy_session_id: | legacy_session_id: | |||
| length: 00 | length: 00 | |||
| vector: -- | vector: -- | |||
| cipher_suites: | cipher_suites: | |||
| length: 0002 | length: 0002 | |||
| vector: | vector: | |||
| CipherSuite: C104 | CipherSuite: C104 | |||
| compression_methods: | compression_methods: | |||
| length: 01 | length: 01 | |||
| vector: | vector: | |||
| CompressionMethod: 00 | CompressionMethod: 00 | |||
| skipping to change at line 3324 ¶ | skipping to change at line 3426 ¶ | |||
| ---------------------------Server--------------------------- | ---------------------------Server--------------------------- | |||
| ServerHello message: | ServerHello message: | |||
| msg_type: 02 | msg_type: 02 | |||
| length: 00007C | length: 00007C | |||
| body: | body: | |||
| legacy_version: 0303 | legacy_version: 0303 | |||
| random: 82828282828282828282828282828282 | random: 82828282828282828282828282828282 | |||
| 82828282828282828282828282828282 | 82828282828282828282828282828282 | |||
| legasy_session_id: | legacy_session_id: | |||
| length: 00 | length: 00 | |||
| vector: -- | vector: -- | |||
| cipher_suite: | cipher_suite: | |||
| CipherSuite: C104 | CipherSuite: C104 | |||
| compression_method: | compression_method: | |||
| CompressionMethod: 00 | CompressionMethod: 00 | |||
| extensions: | extensions: | |||
| length: 0054 | length: 0054 | |||
| vector: | vector: | |||
| Extension: /* supported_versions */ | Extension: /* supported_versions */ | |||
| skipping to change at line 4085 ¶ | skipping to change at line 4187 ¶ | |||
| TLSInnerPlaintext: | TLSInnerPlaintext: | |||
| 00000: 01 00 15 | 00000: 01 00 15 | |||
| Record layer message: | Record layer message: | |||
| type: 17 | type: 17 | |||
| legacy_record_version: 0303 | legacy_record_version: 0303 | |||
| length: 000B | length: 000B | |||
| encrypted_record: 464AEEAD391D97987169F3 | encrypted_record: 464AEEAD391D97987169F3 | |||
| TLSCiphertext: | TLSCiphertext: | |||
| 00000: 17 03 03 00 0B 46 4A EE AD 39 1D 97 98 71 69 F3 | 00000: 17 03 03 00 0B 46 4A EE AD 39 1D 97 98 71 69 F3]]></sourcecode> | |||
| ]]></artwork> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="contributors" numbered="true" toc="default"> | <section anchor="contributors" numbered="false" toc="default"> | |||
| <name>Contributors</name> | <name>Contributors</name> | |||
| <ul spacing="normal"> | <contact fullname="Lilia Akhmetzyanova"> | |||
| <li> | <organization>CryptoPro</organization> | |||
| <t> | <address> | |||
| Lilia Akhmetzyanova </t> | <postal> | |||
| <t> | </postal> | |||
| CryptoPro </t> | <email>lah@cryptopro.ru</email> | |||
| <t> | </address> | |||
| lah@cryptopro.ru | </contact> | |||
| </t> | <contact fullname="Alexandr Sokolov"> | |||
| </li> | <organization>CryptoPro</organization> | |||
| <li> | <address> | |||
| <t> | <postal> | |||
| Alexandr Sokolov </t> | </postal> | |||
| <t> | <email>sokolov@cryptopro.ru</email> | |||
| CryptoPro </t> | </address> | |||
| <t> | </contact> | |||
| sokolov@cryptopro.ru | <contact fullname="Vasily Nikolaev"> | |||
| </t> | <organization>CryptoPro</organization> | |||
| </li> | <address> | |||
| <li> | <postal> | |||
| <t> | </postal> | |||
| Vasily Nikolaev </t> | <email>nikolaev@cryptopro.ru</email> | |||
| <t> | </address> | |||
| CryptoPro </t> | </contact> | |||
| <t> | ||||
| nikolaev@cryptopro.ru | ||||
| </t> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 202 change blocks. | ||||
| 861 lines changed or deleted | 878 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||