| rfc9058xml2.original.xml | rfc9058.xml | |||
|---|---|---|---|---|
| <?xml version = "1.0" encoding = "utf-8"?> | <?xml version='1.0' encoding='UTF-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <?rfc toc="yes"?> | <?rfc toc="yes"?> | |||
| <?rfc tocdepth="4"?> | <?rfc tocdepth="4"?> | |||
| <?rfc symrefs="yes"?> | <?rfc symrefs="yes"?> | |||
| <?rfc sortrefs="yes" ?> | <?rfc sortrefs="yes" ?> | |||
| <?rfc compact="no" ?> | <?rfc compact="no" ?> | |||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" number="9058" category="info" do cName="draft-smyshlyaev-mgm-20" ipr="trust200902" obsoletes="" updates="" submis sionType="independent" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="tru e" sortRefs="true" version="3"> | ||||
| <rfc category="info" docName="draft-smyshlyaev-mgm-20" ipr="trust200902"> | <front> | |||
| <title abbrev="Multilinear Galois Mode (MGM)"> | ||||
| <front> | ||||
| <title abbrev="Multilinear Galois Mode (MGM)"> | ||||
| Multilinear Galois Mode (MGM) | Multilinear Galois Mode (MGM) | |||
| </title> | </title> | |||
| <seriesInfo name="RFC" value="9058"/> | ||||
| <author fullname="Stanislav Smyshlyaev" initials="S" role="editor" surname=" | ||||
| Smyshlyaev"> | ||||
| <organization>CryptoPro</organization> | ||||
| <address> | ||||
| <phone>+7 (495) 995-48-20</phone> | ||||
| <email>svs@cryptopro.ru</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Vladislav Nozdrunov" initials="V" surname="Nozdrunov"> | ||||
| <organization>TC 26</organization> | ||||
| <address> | ||||
| <email>nozdrunov_vi@tc26.ru</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Vasily Shishkin" initials="V" surname="Shishkin"> | ||||
| <organization>TC 26</organization> | ||||
| <address> | ||||
| <email>shishkin_va@tc26.ru</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Ekaterina Griboedova" initials="E" surname="Griboedova"> | ||||
| <organization>CryptoPro</organization> | ||||
| <address> | ||||
| <email>griboedovaekaterina@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="June" year="2021"/> | ||||
| <author fullname="Stanislav Smyshlyaev" initials="S.V." role="editor" su | <area>General</area> | |||
| rname="Smyshlyaev"> | ||||
| <organization>CryptoPro</organization> | ||||
| <address> | ||||
| <phone>+7 (495) 995-48-20</phone> | ||||
| <email>svs@cryptopro.ru</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Vladislav Nozdrunov" initials="V.N." surname="Nozdruno | <workgroup>Network Working Group</workgroup> | |||
| v"> | <keyword>authenticated encryption</keyword> | |||
| <organization>TC 26</organization> | <keyword>mode of operation</keyword> | |||
| <address> | <keyword>AEAD</keyword> | |||
| <email>nozdrunov_vi@tc26.ru</email> | <abstract> | |||
| </address> | ||||
| </author> | ||||
| <author fullname="Vasily Shishkin" initials="V.S." surname="Shishkin"> | <t> | |||
| <organization>TC 26</organization> | Multilinear Galois Mode (MGM) is an Authenticated Encryption | |||
| <address> | with Associated Data (AEAD) block cipher mode based on the | |||
| <email>shishkin_va@tc26.ru</email> | Encrypt-then-MAC (EtM) principle. MGM is defined for use with | |||
| </address> | 64-bit and 128-bit block ciphers. | |||
| </author> | </t> | |||
| <author fullname="Ekaterina Griboedova" initials="E.S." surname="Griboed | <t> | |||
| ova"> | MGM has been standardized in Russia. It is used as an AEAD | |||
| <organization>CryptoPro</organization> | mode for the GOST block cipher algorithms in many protocols, | |||
| <address> | e.g., TLS 1.3 and IPsec. This document provides a reference for | |||
| <email>griboedovaekaterina@gmail.com</email> | MGM to enable review of the mechanisms in use and to make MGM | |||
| </address> | available for use with any block cipher. | |||
| </author> | </t> | |||
| </abstract> | ||||
| </front> | ||||
| <middle> | ||||
| <section anchor="Introduction" numbered="true" toc="default"> | ||||
| <name>Introduction</name> | ||||
| <t> | ||||
| Multilinear Galois Mode (MGM) is an Authenticated Encryption | ||||
| with Associated Data (AEAD) block cipher mode based on EtM | ||||
| principle. MGM is defined for use with 64-bit and 128-bit | ||||
| block ciphers. The MGM design principles can easily be | ||||
| applied to other block sizes. | ||||
| </t> | ||||
| <t> | ||||
| MGM has been standardized in Russia <xref | ||||
| target="AUTH-ENC-BLOCK-CIPHER" format="default"/>. It is used as | ||||
| an AEAD mode for the GOST block cipher algorithms in many | ||||
| protocols, e.g., TLS 1.3 and IPsec. This document provides a | ||||
| reference for MGM to enable review of the mechanisms in use | ||||
| and to make MGM available for use with any block cipher. | ||||
| </t> | ||||
| <t> | ||||
| This document does not have IETF consensus and does not imply | ||||
| IETF support for MGM. | ||||
| </t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Conventions Used in This Document</name> | ||||
| <t> | ||||
| The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST | ||||
| NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", | ||||
| "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", | ||||
| "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ||||
| "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT | ||||
| RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and | ||||
| "<bcp14>OPTIONAL</bcp14>" in this document are to be | ||||
| interpreted as described in BCP 14 <xref target="RFC2119" | ||||
| format="default"/> <xref target="RFC8174" format="default"/> | ||||
| when, and only when, they appear in all capitals, as shown | ||||
| here. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="Definition" numbered="true" toc="default"> | ||||
| <name>Basic Terms and Definitions</name> | ||||
| <t> This document uses the following terms and definitions for the sets an | ||||
| d operations | ||||
| on the elements of these sets: | ||||
| </t> | ||||
| <dl newline="false" spacing="normal" indent="10"> | ||||
| <dt>V*</dt> | ||||
| <dd> | ||||
| The set of all bit strings of a finite length | ||||
| (hereinafter referred to as strings), including the | ||||
| empty string; substrings and string components are | ||||
| enumerated from right to left starting from zero. | ||||
| </dd> | ||||
| <dt>V_s</dt> | ||||
| <dd> | ||||
| The set of all bit strings of length s, where s is a | ||||
| non-negative integer. For s = 0, the V_0 consists of a | ||||
| single empty string. | ||||
| </dd> | ||||
| <dt>|X|</dt> | ||||
| <dd> | ||||
| The bit length of the bit string X (if X is an empty | ||||
| string, then |X| = 0). | ||||
| </dd> | ||||
| <dt>X || Y</dt> | ||||
| <dd> | ||||
| Concatenation of strings X and Y both belonging to V*, | ||||
| i.e., a string from V_{|X|+|Y|}, where the left | ||||
| substring from V_{|X|} is equal to X, and the right | ||||
| substring from V_{|Y|} is equal to Y. | ||||
| </dd> | ||||
| <dt>a^s</dt> | ||||
| <dd> | ||||
| The string in V_s that consists of s 'a' bits. | ||||
| </dd> | ||||
| <dt>(xor)</dt> | ||||
| <dd> | ||||
| Exclusive-or of two bit strings of the same | ||||
| length. | ||||
| </dd> | ||||
| <dt>Z_{2^s}</dt> | ||||
| <dd> | ||||
| Ring of residues modulo 2^s. | ||||
| </dd> | ||||
| <dt>MSB_i</dt> <dd><t> V_s -> V_i</t> | ||||
| <date year="2021" /> | <t>The transformation that maps the string X = | |||
| <!--если не указываем число и месяц, они подставляются автоматически--> | (x_{s-1}, ... , x_0) in V_s into the string MSB_i(X) = | |||
| <area>General</area> | (x_{s-1}, ... , x_{s-i}) in V_i, i <= s (most | |||
| <!--как в rfc7748--> | significant bits).</t> | |||
| <workgroup>Network Working Group</workgroup> | </dd> | |||
| <keyword>authenticated encryption, mode of operation, AEAD</keyword> | <dt>Int_s</dt><dd> <t>V_s -> Z_{2^s}</t> | |||
| <abstract> | <t>The transformation that maps the string X = | |||
| <t> | (x_{s-1}, ... , x_0) in V_s, s > 0, into the integer | |||
| Multilinear Galois Mode (MGM) is an authenticated encryption wit | Int_s(X) = 2^{s-1} * x_{s-1} + ... + 2 * x_1 + x_0 (the | |||
| h associated data (AEAD) block | interpretation of the bit string as an integer).</t> | |||
| cipher mode based on EtM principle. MGM is defined for use with | </dd> | |||
| 64-bit and 128-bit block ciphers. | <dt>Vec_s</dt><dd><t> Z_{2^s} -> V_s</t> | |||
| </t> | ||||
| <t> | ||||
| MGM has been standardized in Russia. It is used as an AEAD mode | ||||
| for the GOST block cipher algorithms | ||||
| in many protocols, e.g. TLS 1.3 and IPsec. This document provide | ||||
| s a reference for MGM to enable review | ||||
| of the mechanisms in use and to make MGM available for use with | ||||
| any block cipher. | ||||
| </t> | ||||
| </abstract> | ||||
| </front> | ||||
| <middle> | <t>The transformation inverse to the mapping Int_s | |||
| <section title="Introduction" anchor="Introduction"> | (the interpretation of an integer as a bit string).</t> | |||
| <t> | </dd> | |||
| Multilinear Galois Mode (MGM) is an authenticated encryption wit | <dt>E_K</dt><dd><t>V_n -> V_n</t> | |||
| h associated data (AEAD) block | ||||
| cipher mode based on EtM principle. MGM is defined for use with | ||||
| 64-bit and 128-bit block ciphers. | ||||
| The MGM design principles can easily be applied to other block s | ||||
| izes. | ||||
| </t> | ||||
| <t> | ||||
| MGM has been standardized in Russia <xref target="R1323565.1.026 | ||||
| -2019"/>. It is used as an AEAD mode for the GOST block cipher algorithms | ||||
| in many protocols, e.g. TLS 1.3 and IPsec. This document provide | ||||
| s a reference for MGM to enable review | ||||
| of the mechanisms in use and to make MGM available for use with | ||||
| any block cipher. | ||||
| </t> | ||||
| <t> | ||||
| This document does not have IETF consensus and does not imply IE | ||||
| TF support for MGM. | ||||
| </t> | ||||
| </section> | ||||
| <section title="Conventions Used in This Document"> | <t>The block cipher permutation under the key K in V_k.</ | |||
| <t> | t> | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NO | </dd> | |||
| T", "SHOULD", "SHOULD NOT", | <dt>k</dt> | |||
| "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this | <dd> | |||
| document are to be interpreted | The bit length of the block cipher key. | |||
| as described in BCP 14 <xref target="RFC2119"/> <xref target="RF | </dd> | |||
| C8174"/> when, and only when, | <dt>n</dt> | |||
| they appear in all capitals, as shown here. | <dd> | |||
| </t> | The block size of the block cipher (in bits). | |||
| </section> | </dd> | |||
| <dt>len</dt><dd><t> V_s -> V_{n/2}</t> | ||||
| <section title="Basic Terms and Definitions" anchor="Definition"> | <t>The transformation that maps a string X in V_s, 0 | |||
| <t> This document uses the following terms and definitions for the s | <= s <= 2^{n/2} - 1, into the string len(X) = | |||
| ets and operations | Vec_{n/2}(|X|) in V_{n/2}, where n is the block size | |||
| on the elements of these sets: | of the used block cipher.</t> | |||
| <list style = "hanging" hangIndent = "8"> | </dd> | |||
| <t hangText = "V*"> | <dt>[+]</dt> | |||
| the set of all bit strings of a finite length (hereinaft | <dd> | |||
| er | The addition operation in Z_{2^{n/2}}, where n is the | |||
| referred to as strings), including the empty string; | block size of the used block cipher. | |||
| substrings and string components are enumerated from rig | </dd> | |||
| ht to left | <dt>(x)</dt> | |||
| starting from zero; | <dd> | |||
| </t> | The transformation that maps two strings, X = (x_{n-1}, | |||
| <t hangText = "V_s"> | ... , x_0) in V_n and Y = (y_{n-1}, ... , y_0), in V_n | |||
| the set of all bit strings of length s, where s is a non | into the string Z = X (x) Y = (z_{n-1}, ... , z_0) in | |||
| -negative integer. For s = 0, the V_0 consists | V_n; the string Z corresponds to the polynomial Z(w) = | |||
| of a single empty string; | z_{n-1} * w^{n-1} + ... + z_1 * w + z_0, which is the | |||
| </t> | result of multiplying the polynomials X(w) = x_{n-1} * | |||
| <t hangText = "|X|"> | w^{n-1} + ... + x_1 * w + x_0 and Y(w) = y_{n-1} * | |||
| the bit length of the bit string X (if X is an empty str | w^{n-1} + ... + y_1 * w + y_0 in the field GF(2^n), | |||
| ing, then |X| = 0); | where n is the block size of the used block cipher; if | |||
| </t> | n = 64, then the field polynomial is equal to f(w) = | |||
| <t hangText = "X || Y"> | w^64 + w^4 + w^3 + w + 1; if n = 128, then the field | |||
| concatenation of strings X and Y both belonging to V*, i | polynomial is equal to f(w) = w^128 + w^7 + w^2 + w + | |||
| .e., a string from V_{|X|+|Y|}, where the left substring | 1. | |||
| from V_{|X|} is equal to X, and the right substring from | </dd> | |||
| V_{|Y|} is equal to Y; | ||||
| </t> | ||||
| <t hangText = "a^s"> | ||||
| the string in V_s that consists of s 'a' bits; | ||||
| </t> | ||||
| <t hangText = "(xor)"> | ||||
| exclusive-or of the two bit strings of the same length; | ||||
| </t> | ||||
| <t hangText = "Z_{2^s}"> | ||||
| ring of residues modulo 2^s; | ||||
| </t> | ||||
| <t hangText = "MSB_i: V_s -> V_i"> | ||||
| the transformation that maps the string X = (x_{s-1}, .. | ||||
| . , x_0) in V_s into the string | ||||
| MSB_i(X) = (x_{s-1}, ... , x_{s-i}) in V_i, i <= s, ( | ||||
| most significant bits); | ||||
| </t> | ||||
| <t hangText = "Int_s: V_s -> Z_{2^s}"> | ||||
| the transformation that maps the string X = (x_{s-1}, .. | ||||
| . , x_0) in V_s, s > 0, | ||||
| into the integer Int_s(X) = 2^{s-1} * x_{s-1} + ... + 2 | ||||
| * x_1 + x_0 | ||||
| (the interpretation of the bit string as an integer); | ||||
| </t> | ||||
| <t hangText = "Vec_s: Z_{2^s} -> V_s"> | ||||
| the transformation inverse to the mapping Int_s (the int | ||||
| erpretation of an integer as a bit string); | ||||
| </t> | ||||
| <t hangText = "E_K: V_n -> V_n"> | ||||
| the block cipher permutation under the key K in V_k; | ||||
| </t> | ||||
| <t hangText = "k"> | ||||
| the bit length of the block cipher key; | ||||
| </t> | ||||
| <t hangText = "n"> | ||||
| the block size of the block cipher (in bits); | ||||
| </t> | ||||
| <t hangText = "len: V_s -> V_{n/2}"> | ||||
| the transformation that maps a string X in V_s, 0 <= | ||||
| s <= 2^{n/2} - 1, | ||||
| into the string len(X) = Vec_{n/2}(|X|) in V_{n/2}, wher | ||||
| e n is the block size of the used block cipher; | ||||
| </t> | ||||
| <t hangText = "[+]"> | ||||
| the addition operation in Z_{2^{n/2}}, where n is the bl | ||||
| ock size of the used block cipher; | ||||
| </t> | ||||
| <t hangText = "(x)"> | ||||
| the transformation that maps two strings X = (x_{n-1}, . | ||||
| .. , x_0) in V_n and Y = (y_{n-1}, ... , y_0) in V_n into the string | ||||
| Z = X (x) Y = (z_{n-1}, ... , z_0) in V_n; the string Z | ||||
| corresponds to the polynomial | ||||
| Z(w) = z_{n-1} * w^{n-1} + ... + z_1 * w + z_0 which is | ||||
| the result of multiplying the polynomials X(w) = x_{n-1} * w^{n-1} + ... + x_1 * | ||||
| w + x_0 | ||||
| and Y(w) = y_{n-1} * w^{n-1} + ... + y_1 * w + y_0 in th | ||||
| e field GF(2^n), where n is the block size of the used block cipher; | ||||
| if n = 64, then the field polynomial is equal to f(w) = | ||||
| w^64 + w^4 + w^3 + w + 1; if n = 128, | ||||
| then the field polynomial is equal to f(w) = w^128 + w^7 | ||||
| + w^2 + w + 1; | ||||
| </t> | ||||
| <t hangText = "incr_l: V_n -> V_n"> | ||||
| the transformation that maps a string L || R, where L, R | ||||
| in V_{n/2}, into the string incr_l(L || R) = Vec_{n/2}(Int_{n/2}(L) [+] 1) || R | ||||
| ; | ||||
| </t> | ||||
| <t hangText = "incr_r: V_n -> V_n"> | ||||
| the transformation that maps a string L || R, where L, R | ||||
| in V_{n/2}, into the string incr_r(L || R) = L || Vec_{n/2}(Int_{n/2}(R) [+] 1) | ||||
| . | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section title="Specification"> | <dt>incr_l</dt><dd><t> V_n -> V_n</t> | |||
| <t> | <t> | |||
| An additional parameter that defines the functioning of Multilin | The transformation that maps an n-byte string A = L || R into the n-byte | |||
| ear Galois Mode (MGM) is the | string incr_l(A) = Vec_{n/2}(Int_{n/2}(L) [+] 1) || R, where L and R are | |||
| bit length S of the authentication tag, 32 <= S <= n. The | n/2-byte strings. | |||
| value of S MUST be fixed for a particular protocol. | </t> | |||
| The choice of the value S involves a trade-off between message e | ||||
| xpansion and the forgery probability. | </dd> | |||
| </t> | <dt>incr_r</dt> | |||
| <section title="MGM Encryption and Tag Generation Procedure" anchor= | <dd><t>V_n -> V_n</t> | |||
| "ENC"> | ||||
| <t> | <t> | |||
| The MGM encryption and tag generation procedure takes the fo | The transformation that maps an n-byte string A = L || R into the n-byte | |||
| llowing parameters as inputs: | string incr_r(A) = L || Vec_{n/2}(Int_{n/2}(R) [+] 1), where L and R are | |||
| <list style="numbers"> | n/2-byte strings. | |||
| <t> | </t> | |||
| </dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Specification</name> | ||||
| <t> | ||||
| An additional parameter that defines the functioning of | ||||
| MGM is the bit length S of the | ||||
| authentication tag, 32 <= S <= n. The value of S | ||||
| <bcp14>MUST</bcp14> be fixed for a particular protocol. The | ||||
| choice of the value S involves a trade-off between message | ||||
| expansion and the forgery probability. | ||||
| </t> | ||||
| <section anchor="ENC" numbered="true" toc="default"> | ||||
| <name>MGM Encryption and Tag Generation Procedure</name> | ||||
| <t> | ||||
| The MGM encryption and tag generation procedure takes the | ||||
| following parameters as inputs: | ||||
| </t> | ||||
| <ol spacing="normal" type="1"><li> | ||||
| Encryption key K in V_k. | Encryption key K in V_k. | |||
| </t> | </li> | |||
| <t> | ||||
| <li> | ||||
| Initial counter nonce ICN in V_{n-1}. | Initial counter nonce ICN in V_{n-1}. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Associated authenticated data A, 0 <= |A| < 2^ | Associated authenticated data A, 0 <= |A| < | |||
| {n/2}. If |A| > 0, | 2^{n/2}. If |A| > 0, then A = A_1 || ... || | |||
| then A = A_1 || ... || A*_h, A_j in V_n, for j = 1, | A*_h, A_j in V_n, for j = 1, ... , h - 1, A*_h in | |||
| ... , h - 1, A*_h in V_t, 1 <= t <= n. If |A| = 0, | V_t, 1 <= t <= n. If |A| = 0, then by | |||
| then by definition A*_h is empty, and the h and t pa | definition A*_h is empty, and the h and t | |||
| rameters are set as follows: h = 0, t = n. | parameters are set as follows: h = 0, t = n. The | |||
| The associated data is authenticated but is not encr | associated data is authenticated but is not | |||
| ypted. | encrypted. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Plaintext P, 0 <= |P| < 2^{n/2}. If |P| > 0, t | Plaintext P, 0 <= |P| < 2^{n/2}. If |P| > | |||
| hen P = P_1 || ... || P*_q, P_i in | 0, then P = P_1 || ... || P*_q, P_i in V_n, for i | |||
| V_n, for i = 1, ... , q - 1, P*_q in V_u, 1 <= u | = 1, ... , q - 1, P*_q in V_u, 1 <= u <= | |||
| <= n. If |P| = 0, then by definition P*_q is empty, and the q and u parameter | n. If |P| = 0, then by definition P*_q is empty, | |||
| s | and the q and u parameters are set as follows: q = | |||
| are set as follows: q = 0, u = n. | 0, u = n. | |||
| </t> | </li> | |||
| </list> | </ol> | |||
| </t> | <t> | |||
| <t> | The MGM encryption and tag generation procedure outputs | |||
| The MGM encryption and tag generation procedure outputs the | the following parameters: | |||
| following parameters: | </t> | |||
| <list style="numbers"> | <ol spacing="normal" type="1"><li>Initial counter nonce ICN.</li> | |||
| <t>Initial counter nonce ICN.</t> | <li>Associated authenticated data A.</li> | |||
| <t>Associated authenticated data A.</t> | <li>Ciphertext C in V_{|P|}.</li> | |||
| <t>Ciphertext C in V_{|P|}.</t> | <li>Authentication tag T in V_S.</li> | |||
| <t>Authentication tag T in V_S.</t> | </ol> | |||
| </list> | <t> | |||
| </t> | The MGM encryption and tag generation procedure consists | |||
| <t> | of the following steps: | |||
| The MGM encryption and tag generation procedure consists of | </t> | |||
| the following steps: | ||||
| </t> | <sourcecode type="pseudocode"><![CDATA[ | |||
| <t> | +----------------------------------------------------------------+ | |||
| <figure> | | MGM-Encrypt(K, ICN, A, P) | | |||
| <artwork> | |----------------------------------------------------------------| | |||
| <![CDATA[ | | 1. Encryption step: | | |||
| +----------------------------------------------------------------+ | | - if |P| = 0 then | | |||
| | MGM-Encrypt(K, ICN, A, P) | | | - C*_q = P*_q | | |||
| |----------------------------------------------------------------| | | - C = P | | |||
| | 1. Encryption step: | | | - else | | |||
| | - if |P| = 0 then | | | - Y_1 = E_K(0^1 || ICN), | | |||
| | - C*_q = P*_q | | | - For i = 2, 3, ... , q do | | |||
| | - C = P | | | Y_i = incr_r(Y_{i-1}), | | |||
| | - else | | | - For i = 1, 2, ... , q - 1 do | | |||
| | - Y_1 = E_K(0^1 || ICN), | | | C_i = P_i (xor) E_K(Y_i), | | |||
| | - For i = 2, 3, ... , q do | | | - C*_q = P*_q (xor) MSB_u(E_K(Y_q)), | | |||
| | Y_i = incr_r(Y_{i-1}), | | | - C = C_1 || ... || C*_q. | | |||
| | - For i = 1, 2, ... , q - 1 do | | | | | |||
| | C_i = P_i (xor) E_K(Y_i), | | | 2. Padding step: | | |||
| | - C*_q = P*_q (xor) MSB_u(E_K(Y_q)), | | | - A_h = A*_h || 0^{n-t}, | | |||
| | - C = C_1 || ... || C*_q. | | | - C_q = C*_q || 0^{n-u}. | | |||
| | | | | | | |||
| | 2. Padding step: | | | 3. Authentication tag T generation step: | | |||
| | - A_h = A*_h || 0^{n-t}, | | | - Z_1 = E_K(1^1 || ICN), | | |||
| | - C_q = C*_q || 0^{n-u}. | | | - sum = 0^n, | | |||
| | | | | - For i = 1, 2, ..., h do | | |||
| | 3. Authentication tag T generation step: | | | H_i = E_K(Z_i), | | |||
| | - Z_1 = E_K(1^1 || ICN), | | | sum = sum (xor) ( H_i (x) A_i ), | | |||
| | - sum = 0^n, | | | Z_{i+1} = incr_l(Z_i), | | |||
| | - For i = 1, 2, ..., h do | | | - For j = 1, 2, ..., q do | | |||
| | H_i = E_K(Z_i), | | | H_{h+j} = E_K(Z_{h+j}), | | |||
| | sum = sum (xor) ( H_i (x) A_i ), | | | sum = sum (xor) ( H_{h+j} (x) C_j ), | | |||
| | Z_{i+1} = incr_l(Z_i), | | | Z_{h+j+1} = incr_l(Z_{h+j}), | | |||
| | - For j = 1, 2, ..., q do | | | - H_{h+q+1} = E_K(Z_{h+q+1}), | | |||
| | H_{h+j} = E_K(Z_{h+j}), | | | - T = MSB_S(E_K(sum (xor) ( H_{h+q+1} (x) | | |||
| | sum = sum (xor) ( H_{h+j} (x) C_j ), | | | ( len(A) || len(C) ) ))). | | |||
| | Z_{h+j+1} = incr_l(Z_{h+j}), | | | | | |||
| | - H_{h+q+1} = E_K(Z_{h+q+1}), | | | 4. Return (ICN, A, C, T). | | |||
| | - T = MSB_S(E_K(sum (xor) ( H_{h+q+1} (x) | | +----------------------------------------------------------------+ | |||
| | ( len(A) || len(C) ) ))). | | ]]></sourcecode> | |||
| | | | ||||
| | 4. Return (ICN, A, C, T). | | <t> | |||
| +----------------------------------------------------------------+ | ||||
| ]]> | ||||
| </artwork> | ||||
| </figure> | ||||
| </t> | ||||
| <t> | ||||
| The ICN value for each message that is encrypted under | The ICN value for each message that is encrypted under | |||
| the given key K must be chosen in a unique manner. | the given key K must be chosen in a unique manner. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Users who do not wish to encrypt plaintext can provide a str | Users who do not wish to encrypt plaintext can provide a | |||
| ing P of zero length. Users who do not wish to authenticate | string P of zero length. Users who do not wish to | |||
| associated data can provide a string A of zero length. The l | authenticate associated data can provide a string A of | |||
| ength of the associated data A and of the plaintext P MUST be such that 0 < | | zero length. The length of the associated data A and of | |||
| A| + |P| < 2^{n/2}. | the plaintext P <bcp14>MUST</bcp14> be such that 0 < | |||
| </t> | |A| + |P| < 2^{n/2}. | |||
| </section> | </t> | |||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>MGM Decryption and Tag Verification Check Procedure</name> | ||||
| <section title="MGM Decryption and Tag Verification Check Procedure" | <t> | |||
| > | ||||
| <t> | ||||
| The MGM decryption and tag verification procedure takes the following parameters as inputs: | The MGM decryption and tag verification procedure takes the following parameters as inputs: | |||
| <list style="numbers"> | </t> | |||
| <t> | <ol spacing="normal" type="1"><li> | |||
| Encryption key K in V_k. | Encryption key K in V_k. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Initial counter nonce ICN in V_{n-1}. | Initial counter nonce ICN in V_{n-1}. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Associated authenticated data A, 0 <= |A| < 2^ | Associated authenticated data A, 0 <= |A| < | |||
| {n/2}. If |A| > 0, | 2^{n/2}. If |A| > 0, then A = A_1 || ... || | |||
| then A = A_1 || ... || A*_h, A_j in V_n, for j = 1, | A*_h, A_j in V_n, for j = 1, ... , h - 1, A*_h in | |||
| ... , h - 1, A*_h in V_t, 1 <= t <= n. If |A| = 0, | V_t, 1 <= t <= n. If |A| = 0, then by | |||
| then by definition A*_h is empty, and the h and t pa | definition A*_h is empty, and the h and t | |||
| rameters are set as follows: h = 0, t = n. | parameters are set as follows: h = 0, t = n. The | |||
| The associated data is authenticated but is not encr | associated data is authenticated but is not | |||
| ypted. | encrypted. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Ciphertext C, 0 <= |C| < 2^{n/2}. If |C| > 0, | Ciphertext C, 0 <= |C| < 2^{n/2}. If |C| > | |||
| then C = C_1 || ... || C*_q, C_i in V_n, for i = 1, ... , q - 1, C*_q in V_u, 1 | 0, then C = C_1 || ... || C*_q, C_i in V_n, for i = 1, ... , q - 1, C*_q in V_u, | |||
| <= u <= n. | 1 <= u <= n. | |||
| If |C| = 0, then by definition C*_q is empty, and th e q and u parameters | If |C| = 0, then by definition C*_q is empty, and th e q and u parameters | |||
| are set as follows: q = 0, u = n. | are set as follows: q = 0, u = n. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Authentication tag T in V_S. | Authentication tag T in V_S. | |||
| </t> | </li> | |||
| </list> | </ol> | |||
| </t> | <t> | |||
| <t> | ||||
| The MGM decryption and tag verification procedure outputs FA IL or the following parameters: | The MGM decryption and tag verification procedure outputs FA IL or the following parameters: | |||
| <list style="numbers"> | </t> | |||
| <t>Associated authenticated data A.</t> | <ol spacing="normal" type="1"><li>Associated authenticated data A.</li> | |||
| <t>Plaintext P in V_{|C|}.</t> | <li>Plaintext P in V_{|C|}.</li> | |||
| </list> | </ol> | |||
| </t> | <t> | |||
| <t> | ||||
| The MGM decryption and tag verification procedure consists o f the following steps: | The MGM decryption and tag verification procedure consists o f the following steps: | |||
| </t> | </t> | |||
| <t> | ||||
| <figure> | ||||
| <artwork> | ||||
| <![CDATA[ | ||||
| +----------------------------------------------------------------+ | ||||
| | MGM-Decrypt(K, ICN, A, C, T) | | ||||
| |----------------------------------------------------------------| | ||||
| | 1. Padding step: | | ||||
| | - A_h = A*_h || 0^{n-t}, | | ||||
| | - C_q = C*_q || 0^{n-u}. | | ||||
| | | | ||||
| | 2. Authentication tag T verification step: | | ||||
| | - Z_1 = E_K(1^1 || ICN), | | ||||
| | - sum = 0^n, | | ||||
| | - For i = 1, 2, ..., h do | | ||||
| | H_i = E_K(Z_i), | | ||||
| | sum = sum (xor) ( H_i (x) A_i ), | | ||||
| | Z_{i+1} = incr_l(Z_i), | | ||||
| | - For j = 1, 2, ..., q do | | ||||
| | H_{h+j} = E_K(Z_{h+j}), | | ||||
| | sum = sum (xor) ( H_{h+j} (x) C_j ), | | ||||
| | Z_{h+j+1} = incr_l(Z_{h+j}), | | ||||
| | - H_{h+q+1} = E_K(Z_{h+q+1}), | | ||||
| | - T' = MSB_S(E_K(sum (xor) ( H_{h+q+1} (x) | | ||||
| | ( len(A) || len(C) ) ))), | | ||||
| | - If T' != T then return FAIL. | | ||||
| | | | ||||
| | 3. Decryption step: | | ||||
| | - if |C| = 0 then | | ||||
| | - P = C | | ||||
| | - else | | ||||
| | - Y_1 = E_K(0^1 || ICN), | | ||||
| | - For i = 2, 3, ... , q do | | ||||
| | Y_i = incr_r(Y_{i-1}), | | ||||
| | - For i = 1, 2, ... , q - 1 do | | ||||
| | P_i = C_i (xor) E_K(Y_i), | | ||||
| | - P*_q = C*_q (xor) MSB_u(E_K(Y_q)), | | ||||
| | - P = P_1 || ... || P*_q. | | ||||
| | | | ||||
| | 4. Return (A, P). | | ||||
| +----------------------------------------------------------------+ | ||||
| ]]> | ||||
| </artwork> | ||||
| </figure> | ||||
| </t> | ||||
| <t> | ||||
| The length of the associated data A and of the ciphertext C | ||||
| MUST be such that 0 < |A| + |C| < 2^{n/2}. | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="RefRationale" title="Rationale"> | <sourcecode type="pseudocode"><![CDATA[ | |||
| <t> | +----------------------------------------------------------------+ | |||
| The MGM was originally proposed in <xref target="PDMODE"/>. | | MGM-Decrypt(K, ICN, A, C, T) | | |||
| </t> | |----------------------------------------------------------------| | |||
| <t> | | 1. Padding step: | | |||
| From the operational point of view the MGM is designed to be par | | - A_h = A*_h || 0^{n-t}, | | |||
| allelizable, inverse-free, online and | | - C_q = C*_q || 0^{n-u}. | | |||
| to provide availability of precomputations. | | | | |||
| </t> | | 2. Authentication tag T verification step: | | |||
| <t> | | - Z_1 = E_K(1^1 || ICN), | | |||
| Parallelizability of the MGM is achieved due to its counter-type | | - sum = 0^n, | | |||
| structure and the usage of the multilinear | | - For i = 1, 2, ..., h do | | |||
| function for authentication. Indeed, both encryption blocks E_K( | | H_i = E_K(Z_i), | | |||
| Y_i) and authentication blocks H_i are produced | | sum = sum (xor) ( H_i (x) A_i ), | | |||
| in the counter mode manner, and the multilinear function determi | | Z_{i+1} = incr_l(Z_i), | | |||
| ned by H_i is parallelizable in itself. | | - For j = 1, 2, ..., q do | | |||
| Additionally, the counter-type structure of the mode provides th | | H_{h+j} = E_K(Z_{h+j}), | | |||
| e inverse-free property. | | sum = sum (xor) ( H_{h+j} (x) C_j ), | | |||
| </t> | | Z_{h+j+1} = incr_l(Z_{h+j}), | | |||
| <t> | | - H_{h+q+1} = E_K(Z_{h+q+1}), | | |||
| The online property means the possibility to process message eve | | - T' = MSB_S(E_K(sum (xor) ( H_{h+q+1} (x) | | |||
| n if it is not completely received (so its length | | ( len(A) || len(C) ) ))), | | |||
| is unknown). To provide this property the MGM uses blocks E_K(Y_ | | - If T' != T then return FAIL. | | |||
| i) and H_i which are produced basing on | | | | |||
| two independent source blocks Y_i and Z_i. | | 3. Decryption step: | | |||
| </t> | | - if |C| = 0 then | | |||
| <t> | | - P = C | | |||
| Availability of precomputations for the MGM means the possibilit | | - else | | |||
| y to calculate H_i and E_K(Y_i) even before | | - Y_1 = E_K(0^1 || ICN), | | |||
| | - For i = 2, 3, ... , q do | | ||||
| | Y_i = incr_r(Y_{i-1}), | | ||||
| | - For i = 1, 2, ... , q - 1 do | | ||||
| | P_i = C_i (xor) E_K(Y_i), | | ||||
| | - P*_q = C*_q (xor) MSB_u(E_K(Y_q)), | | ||||
| | - P = P_1 || ... || P*_q. | | ||||
| | | | ||||
| | 4. Return (A, P). | | ||||
| +----------------------------------------------------------------+ | ||||
| ]]></sourcecode> | ||||
| <t> | ||||
| The length of the associated data A and of the ciphertext C | ||||
| <bcp14>MUST</bcp14> be such that 0 < |A| + |C| < 2^{n/2}. | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="RefRationale" numbered="true" toc="default"> | ||||
| <name>Rationale</name> | ||||
| <t> | ||||
| MGM was originally proposed in <xref target="PDMODE" format="def | ||||
| ault"/>. | ||||
| </t> | ||||
| <t> | ||||
| From the operational point of view, MGM is designed to be | ||||
| parallelizable, inverse free, and online and is also designed to | ||||
| provide | ||||
| availability of precomputations. | ||||
| </t> | ||||
| <t> | ||||
| Parallelizability of MGM is achieved due to its | ||||
| counter-type structure and the usage of the multilinear | ||||
| function for authentication. Indeed, both encryption blocks | ||||
| E_K(Y_i) and authentication blocks H_i are produced in the | ||||
| counter mode manner, and the multilinear function determined | ||||
| by H_i is parallelizable in itself. Additionally, the | ||||
| counter-type structure of the mode provides the inverse-free | ||||
| property. | ||||
| </t> | ||||
| <t> | ||||
| The online property means the possibility of processing messages | ||||
| even if it is not completely received (so its length is | ||||
| unknown). To provide this property, MGM uses blocks | ||||
| E_K(Y_i) and H_i, which are produced based on two independent | ||||
| source blocks Y_i and Z_i. | ||||
| </t> | ||||
| <t> | ||||
| Availability of precomputations for MGM means the possibility of | ||||
| calculating H_i and E_K(Y_i) even before | ||||
| data is retrieved. It holds again due to the usage of counters f or calculating them. | data is retrieved. It holds again due to the usage of counters f or calculating them. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="Security" numbered="true" toc="default"> | ||||
| <name>Security Considerations</name> | ||||
| <t> | ||||
| <section anchor="Security" title="Security Considerations"> | The security properties of MGM are based on the following: | |||
| <t> | </t> | |||
| The security properties of the MGM are based on the following: | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Different functions generating the counter values: <vspa | ||||
| ce/> | ||||
| The functions incr_r and incr_l are chosen to minimize | ||||
| intersection (if it happens) of counter values Y_i and Z | ||||
| _i. | ||||
| </t> | ||||
| <t> | ||||
| Encryption of the multilinear function output:<vspace/> | ||||
| It allows to resist attacks based on padding | ||||
| and linear properties (see <xref target="Ferg05"/> for d | ||||
| etails). | ||||
| </t> | ||||
| <t> | ||||
| Multilinear function for authentication:<vspace/> | ||||
| It allows to resist the small subgroup attacks <xref tar | ||||
| get="Saar12"/>. | ||||
| </t> | ||||
| <t> | ||||
| Encryption of the nonces (0^1 || ICN) and (1^1 || ICN):< | ||||
| vspace/> | ||||
| The use of this encryption minimizes the number of plain | ||||
| text/ciphertext pairs | ||||
| of blocks known to an adversary. It allows to resist att | ||||
| acks that need substantial amount of such | ||||
| material (e.g., linear and differential cryptanalysis, s | ||||
| ide-channel attacks). | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| It is crucial to the security of MGM to use unique ICN values. U | ||||
| sing the same ICN values for two different messages encrypted with the same key | ||||
| eliminates the security properties of this mode. | ||||
| </t> | ||||
| <t> | ||||
| It is crucial for the security of MGM not to process empty plain | ||||
| text and empty associated data at the same time. Otherwise, a tag becomes indepe | ||||
| ndent from a nonce value, leading to vulnerability to forgery attack. | ||||
| </t> | ||||
| <t> | ||||
| Security analysis for MGM with E_K being a random permutation wa | ||||
| s performed in <xref target="SecMGM"/>. More precisely, the bounds for confident | ||||
| iality advantage (CA) and integrity advantage (IA) | ||||
| (for details see <xref target="I-D.irtf-cfrg-aead-limits"/>) wer | ||||
| e obtained. According to these results, for an adversary making at most q encryp | ||||
| tion queries with the total length of plaintexts | ||||
| and associated data of at most s blocks and allowed to output a | ||||
| forgery with the summary length of ciphertext and associated data of at most l b | ||||
| locks: | ||||
| <list style = "empty"> | ||||
| <t> | ||||
| CA <= ( 3( s + 4q )^2 )/ 2^n, | ||||
| </t> | ||||
| <t> | ||||
| IA <= ( 3( s + 4q + l + 3 )^2 )/ 2^n + 2/2^S, | ||||
| </t> | ||||
| </list> | ||||
| where n is the block size and S is the authentication tag size. | ||||
| </t> | ||||
| <t> | ||||
| These bounds can be used as guidelines on how to calculate confi | ||||
| dentiality and integrity limits (for details also see <xref target="I-D.irtf-cfr | ||||
| g-aead-limits"/>). | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="IANA" title="IANA Considerations"> | <dl spacing="normal" newline="true"> | |||
| <t> | ||||
| This document does not require any IANA actions. | ||||
| </t> | ||||
| </section> | ||||
| </middle> | <dt> Different functions generating the counter values: </dt> | |||
| <dd>The functions incr_r and incr_l are chosen to minimize | ||||
| intersection (if it happens) of counter values Y_i and Z_i.</dd> | ||||
| <dt> Encryption of the multilinear function output:</dt> | ||||
| <dd> It allows attacks based on padding | ||||
| and linear properties to be resisted (see <xref target="FERG05" format=" | ||||
| default"/> for details).</dd> | ||||
| <dt> Multilinear function for authentication:</dt> | ||||
| <dd> It allows the small subgroup attacks to be resisted <xref target="S | ||||
| AAR12" format="default"/>.</dd> | ||||
| <dt> Encryption of the nonces (0^1 || ICN) and (1^1 || ICN):</dt> | ||||
| <dd> The use of this encryption minimizes the number of | ||||
| plaintext/ciphertext pairs of blocks known to an adversary. | ||||
| <back> | It prevents attacks that need a substantial amount of such material (e.g., | |||
| <references title="Normative References"> | linear and differential cryptanalysis and side-channel attacks). | |||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2119.xml' ?> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7801.xml' ?> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8174.xml' ?> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8891.xml' ?> | ||||
| </references> | ||||
| <references title="Informative References"> | ||||
| <?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/r eference.I-D.draft-irtf-cfrg-aead-limits-01.xml' ?> | </dd> | |||
| <reference anchor="PDMODE"> | </dl> | |||
| <front> | ||||
| <title> | ||||
| Parallel and double block cipher mode of operation (PD-m | ||||
| ode) for authenticated encryption | ||||
| </title> | ||||
| <author> | ||||
| <organization> | ||||
| Nozdrunov, V. | ||||
| </organization> | ||||
| </author> | ||||
| <date year="2017"/> | ||||
| </front> | ||||
| <seriesInfo name="CTCrypt 2017 proceedings," value="pp. 36-45"/> | ||||
| </reference> | ||||
| <reference anchor="GOST3412-2015"> | <t> | |||
| <front> | It is crucial to the security of MGM to use unique ICN | |||
| <title> | values. Using the same ICN values for two different messages | |||
| Information technology. Cryptographic data security. Blo | encrypted with the same key eliminates the security properties | |||
| ck ciphers | of this mode. | |||
| </title> | </t> | |||
| <author> | <t> | |||
| <organization> | It is crucial for the security of MGM not to process empty | |||
| Federal Agency on Technical Regulating and Metrology | plaintext and empty associated data at the same | |||
| </organization> | time. Otherwise, a tag becomes independent from a nonce value, | |||
| </author> | leading to vulnerability to forgery attacks. | |||
| <date year="2015"/> | </t> | |||
| </front> | <t> | |||
| <seriesInfo name="GOST R" value="34.12-2015"/> | Security analysis for MGM with E_K being a random permutation | |||
| </reference> | was performed in <xref target="SEC-MGM" | |||
| format="default"/>. More precisely, the bounds for | ||||
| confidentiality advantage (CA) and integrity advantage (IA) | ||||
| (for details, see <xref target="I-D.irtf-cfrg-aead-limits" | ||||
| format="default"/>) were obtained. According to these results, | ||||
| for an adversary making at most q encryption queries with the | ||||
| total length of plaintexts and associated data of at most s | ||||
| blocks, and allowed to output a forgery with the summary length | ||||
| of ciphertext and associated data of at most l blocks: | ||||
| </t> | ||||
| <reference anchor="Ferg05"> | <t indent="6">CA <= ( 3( s + 4q )^2 )/ 2^n, | |||
| <front> | </t> | |||
| <title> | ||||
| Authentication weaknesses in GCM | ||||
| </title> | ||||
| <author> | ||||
| <organization> | ||||
| Ferguson, N. | ||||
| </organization> | ||||
| </author> | ||||
| <date year="2005"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="R1323565.1.026-2019"> | <t indent="6">IA <= ( 3( s + 4q + l + 3 )^2 )/ 2^n + 2/2^S, | |||
| <front> | </t> | |||
| <title> | ||||
| Information technology. Cryptographic data security. Aut | ||||
| henticated encryption block cipher operation modes | ||||
| </title> | ||||
| <author> | ||||
| <organization> | ||||
| Federal Agency on Technical Regulating and Metrology | ||||
| </organization> | ||||
| </author> | ||||
| <date year="2019"/> | ||||
| </front> | ||||
| <seriesInfo name="R" value="1323565.1.026-2019"/> | ||||
| </reference> | ||||
| <reference anchor="Saar12"> | <t> | |||
| <front> | where n is the block size and S is the authentication tag size. | |||
| <title> | </t> | |||
| Cycling Attacks on GCM, GHASH and Other Polynomial MACs | <t> | |||
| and Hashes | These bounds can be used as guidelines on how to calculate | |||
| </title> | confidentiality and integrity limits (for details, also see | |||
| <author> | <xref target="I-D.irtf-cfrg-aead-limits" format="default"/>). | |||
| <organization> | </t> | |||
| Saarinen, O. | </section> | |||
| </organization> | <section anchor="IANA" numbered="true" toc="default"> | |||
| </author> | <name>IANA Considerations</name> | |||
| <date year="2012"/> | <t> | |||
| </front> | This document has no IANA actions. | |||
| <seriesInfo name="FSE 2012 proceedings," value="pp. 216-225"/> | </t> | |||
| </reference> | </section> | |||
| </middle> | ||||
| <back> | ||||
| <reference anchor="SecMGM"> | <displayreference target="I-D.irtf-cfrg-aead-limits" to="AEAD-LIMITS"/> | |||
| <front> | <references> | |||
| <title> | <name>References</name> | |||
| Security of Multilinear Galois Mode (MGM). | <references> | |||
| </title> | <name>Normative References</name> | |||
| <author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <organization> | FC.2119.xml"/> | |||
| Akhmetzyanova, L., Alekseev, E., Karpunin, G. and V. | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| Nozdrunov | FC.7801.xml"/> | |||
| </organization> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| </author> | FC.8174.xml"/> | |||
| <date year="2019"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| </front> | FC.8891.xml"/> | |||
| <seriesInfo name="IACR Cryptology ePrint Archive 2019," value="p | </references> | |||
| . 123"/> | <references> | |||
| </reference> | <name>Informative References</name> | |||
| </references> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-irtf-cf rg-aead-limits.xml"/> | |||
| <section anchor="Appendix" title="Test Vectors"> | <reference anchor="PDMODE"> | |||
| <section title="Test Vectors for the Kuznyechik block cipher"> | <front> | |||
| <t> | <title>Parallel and double block cipher mode of operation (PD-mode) | |||
| Test vectors for the Kuznyechik block cipher (n = 128, k = | for authenticated encryption | |||
| 256) defined in <xref target="GOST3412-2015"/> (the English version can be found | </title> | |||
| in <xref target="RFC7801"/>). | <author fullname="Vladislav Nozdrunov" initials="V." surname="Nozdru | |||
| </t> | nov"> | |||
| <t> | <organization/> | |||
| <figure> | </author> | |||
| <artwork> | <date month="June" year="2017"/> | |||
| <![CDATA[ | </front> | |||
| <refcontent>CTCrypt 2017 proceedings, pp. 36-45 </refcontent> | ||||
| </reference> | ||||
| <reference anchor="GOST3412-2015"> | ||||
| <front> | ||||
| <title>Information technology. Cryptographic data security. Block ci | ||||
| phers | ||||
| </title> | ||||
| <author> | ||||
| <organization>Federal Agency on Technical Regulating and Metrology | ||||
| </organization> | ||||
| </author> | ||||
| <date year="2015"/> | ||||
| </front> | ||||
| <refcontent>GOST R 34.12-2015</refcontent> | ||||
| </reference> | ||||
| <reference anchor="FERG05"> | ||||
| <front> | ||||
| <title>Authentication weaknesses in GCM | ||||
| </title> | ||||
| <author fullname="Niels Ferguson" initials="N" surname="Ferguson"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2005" month="May"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="AUTH-ENC-BLOCK-CIPHER"> | ||||
| <front> | ||||
| <title> | ||||
| Information technology. Cryptographic data | ||||
| security. Authenticated encryption block cipher | ||||
| operation modes | ||||
| </title> | ||||
| <author> | ||||
| <organization> | ||||
| Federal Agency on Technical Regulating and Metrology | ||||
| </organization> | ||||
| </author> | ||||
| <date year="2019"/> | ||||
| </front> | ||||
| <refcontent>R 1323565.1.026-2019</refcontent> | ||||
| </reference> | ||||
| <reference anchor="SAAR12"> | ||||
| <front> | ||||
| <title>Cycling Attacks on GCM, GHASH and Other Polynomial MACs and H | ||||
| ashes | ||||
| </title> | ||||
| <author fullname="Markku-Juhani Olavi Saarinen" initials="M-J" surna | ||||
| me="Saarinen"> | ||||
| <organization>Fast Software Encryption</organization> | ||||
| </author> | ||||
| <date year="2012"/> | ||||
| </front> | ||||
| <refcontent>FSE 2012 proceedings, pp. 216-225</refcontent> | ||||
| <seriesInfo name="DOI" value="10.1007/978-3-642-34047-5_13"/> | ||||
| </reference> | ||||
| <reference anchor="SEC-MGM"> | ||||
| <front> | ||||
| <title>Security of Multilinear Galois Mode (MGM) | ||||
| </title> | ||||
| <author fullname="Liliya Akhmetzyanova" initials="L" surname="Akhmet | ||||
| zyanova"/> | ||||
| <author fullname="Evgeny Alekseev" initials="E" surname="Alekseev"/> | ||||
| <author fullname="Grigory Karpunin" initials="G" surname="Karpunin"/> | ||||
| <author fullname="Vladislav Nozdrunov" initials="V" surname="Nozdrunov"/> | ||||
| <date year="2019"/> | ||||
| </front> | ||||
| <refcontent>IACR Cryptology ePrint Archive 2019, pp. 123</refcontent> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="Appendix" numbered="true" toc="default"> | ||||
| <name>Test Vectors</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Test Vectors for the Kuznyechik Block Cipher</name> | ||||
| <t> | ||||
| Test vectors for the Kuznyechik block cipher (n = 128, k = | ||||
| 256) are defined in <xref target="GOST3412-2015" format="default"/> (the English | ||||
| version can be found in <xref target="RFC7801" format="default"/>). | ||||
| </t> | ||||
| <section anchor="example1"> | ||||
| <name>Example 1</name> | ||||
| <sourcecode><![CDATA[ | ||||
| Encryption key K: | Encryption key K: | |||
| 00000: 88 99 AA BB CC DD EE FF 00 11 22 33 44 55 66 77 | 00000: 88 99 AA BB CC DD EE FF 00 11 22 33 44 55 66 77 | |||
| 00010: FE DC BA 98 76 54 32 10 01 23 45 67 89 AB CD EF | 00010: FE DC BA 98 76 54 32 10 01 23 45 67 89 AB CD EF | |||
| ICN: | ICN: | |||
| 00000: 11 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | 00000: 11 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | |||
| Associated authenticated data A: | Associated authenticated data A: | |||
| 00000: 02 02 02 02 02 02 02 02 01 01 01 01 01 01 01 01 | 00000: 02 02 02 02 02 02 02 02 01 01 01 01 01 01 01 01 | |||
| 00010: 04 04 04 04 04 04 04 04 03 03 03 03 03 03 03 03 | 00010: 04 04 04 04 04 04 04 04 03 03 03 03 03 03 03 03 | |||
| 00020: EA 05 05 05 05 05 05 05 05 | 00020: EA 05 05 05 05 05 05 05 05 | |||
| Plaintext P: | Plaintext P: | |||
| 00000: 11 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | 00000: 11 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | |||
| 00010: 00 11 22 33 44 55 66 77 88 99 AA BB CC EE FF 0A | 00010: 00 11 22 33 44 55 66 77 88 99 AA BB CC EE FF 0A | |||
| 00020: 11 22 33 44 55 66 77 88 99 AA BB CC EE FF 0A 00 | 00020: 11 22 33 44 55 66 77 88 99 AA BB CC EE FF 0A 00 | |||
| 00030: 22 33 44 55 66 77 88 99 AA BB CC EE FF 0A 00 11 | 00030: 22 33 44 55 66 77 88 99 AA BB CC EE FF 0A 00 11 | |||
| 00040: AA BB CC | 00040: AA BB CC | |||
| ]]></sourcecode> | ||||
| 1. Encryption step: | <ol> | |||
| <li><t>Encryption step:</t> | ||||
| <sourcecode><![CDATA[ | ||||
| 0^1 || ICN: | 0^1 || ICN: | |||
| 00000: 11 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | 00000: 11 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | |||
| Y_1: | Y_1: | |||
| 00000: 7F 67 9D 90 BE BC 24 30 5A 46 8D 42 B9 D4 ED CD | 00000: 7F 67 9D 90 BE BC 24 30 5A 46 8D 42 B9 D4 ED CD | |||
| E_K(Y_1): | E_K(Y_1): | |||
| 00000: B8 57 48 C5 12 F3 19 90 AA 56 7E F1 53 35 DB 74 | 00000: B8 57 48 C5 12 F3 19 90 AA 56 7E F1 53 35 DB 74 | |||
| Y_2: | Y_2: | |||
| 00000: 7F 67 9D 90 BE BC 24 30 5A 46 8D 42 B9 D4 ED CE | 00000: 7F 67 9D 90 BE BC 24 30 5A 46 8D 42 B9 D4 ED CE | |||
| skipping to change at line 603 ¶ | skipping to change at line 698 ¶ | |||
| 00000: 7F 67 9D 90 BE BC 24 30 5A 46 8D 42 B9 D4 ED D1 | 00000: 7F 67 9D 90 BE BC 24 30 5A 46 8D 42 B9 D4 ED D1 | |||
| E_K(Y_5): | E_K(Y_5): | |||
| 00000: 86 CE 9E 2A 0A 12 25 E3 33 56 91 B2 0D 5A 33 48 | 00000: 86 CE 9E 2A 0A 12 25 E3 33 56 91 B2 0D 5A 33 48 | |||
| C: | C: | |||
| 00000: A9 75 7B 81 47 95 6E 90 55 B8 A3 3D E8 9F 42 FC | 00000: A9 75 7B 81 47 95 6E 90 55 B8 A3 3D E8 9F 42 FC | |||
| 00010: 80 75 D2 21 2B F9 FD 5B D3 F7 06 9A AD C1 6B 39 | 00010: 80 75 D2 21 2B F9 FD 5B D3 F7 06 9A AD C1 6B 39 | |||
| 00020: 49 7A B1 59 15 A6 BA 85 93 6B 5D 0E A9 F6 85 1C | 00020: 49 7A B1 59 15 A6 BA 85 93 6B 5D 0E A9 F6 85 1C | |||
| 00030: C6 0C 14 D4 D3 F8 83 D0 AB 94 42 06 95 C7 6D EB | 00030: C6 0C 14 D4 D3 F8 83 D0 AB 94 42 06 95 C7 6D EB | |||
| 00040: 2C 75 52 | 00040: 2C 75 52 | |||
| ]]></sourcecode> | ||||
| </li> | ||||
| 2. Padding step: | <li><t>Padding step:</t> | |||
| <sourcecode><![CDATA[ | ||||
| A_1 || ... || A_h: | A_1 || ... || A_h: | |||
| 00000: 02 02 02 02 02 02 02 02 01 01 01 01 01 01 01 01 | 00000: 02 02 02 02 02 02 02 02 01 01 01 01 01 01 01 01 | |||
| 00010: 04 04 04 04 04 04 04 04 03 03 03 03 03 03 03 03 | 00010: 04 04 04 04 04 04 04 04 03 03 03 03 03 03 03 03 | |||
| 00020: EA 05 05 05 05 05 05 05 05 00 00 00 00 00 00 00 | 00020: EA 05 05 05 05 05 05 05 05 00 00 00 00 00 00 00 | |||
| C_1 || ... || C_q: | C_1 || ... || C_q: | |||
| 00000: A9 75 7B 81 47 95 6E 90 55 B8 A3 3D E8 9F 42 FC | 00000: A9 75 7B 81 47 95 6E 90 55 B8 A3 3D E8 9F 42 FC | |||
| 00010: 80 75 D2 21 2B F9 FD 5B D3 F7 06 9A AD C1 6B 39 | 00010: 80 75 D2 21 2B F9 FD 5B D3 F7 06 9A AD C1 6B 39 | |||
| 00020: 49 7A B1 59 15 A6 BA 85 93 6B 5D 0E A9 F6 85 1C | 00020: 49 7A B1 59 15 A6 BA 85 93 6B 5D 0E A9 F6 85 1C | |||
| 00030: C6 0C 14 D4 D3 F8 83 D0 AB 94 42 06 95 C7 6D EB | 00030: C6 0C 14 D4 D3 F8 83 D0 AB 94 42 06 95 C7 6D EB | |||
| 00040: 2C 75 52 00 00 00 00 00 00 00 00 00 00 00 00 00 | 00040: 2C 75 52 00 00 00 00 00 00 00 00 00 00 00 00 00 | |||
| ]]></sourcecode> | ||||
| </li> | ||||
| 3. Authentication tag T generation step: | <li><t>Authentication tag T generation step:</t> | |||
| <sourcecode><![CDATA[ | ||||
| 1^1 || ICN: | 1^1 || ICN: | |||
| 00000: 91 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | 00000: 91 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | |||
| Z_1: | Z_1: | |||
| 00000: 7F C2 45 A8 58 6E 66 02 A7 BB DB 27 86 BD C6 6F | 00000: 7F C2 45 A8 58 6E 66 02 A7 BB DB 27 86 BD C6 6F | |||
| H_1: | H_1: | |||
| 00000: 8D B1 87 D6 53 83 0E A4 BC 44 64 76 95 2C 30 0B | 00000: 8D B1 87 D6 53 83 0E A4 BC 44 64 76 95 2C 30 0B | |||
| current sum: | current sum: | |||
| 00000: 4C F4 27 F4 AD B7 5C F4 C0 DA 39 D5 AB 48 CF 38 | 00000: 4C F4 27 F4 AD B7 5C F4 C0 DA 39 D5 AB 48 CF 38 | |||
| skipping to change at line 690 ¶ | skipping to change at line 790 ¶ | |||
| 00000: 7F C2 45 A8 58 6E 66 0A A7 BB DB 27 86 BD C6 6F | 00000: 7F C2 45 A8 58 6E 66 0A A7 BB DB 27 86 BD C6 6F | |||
| H_9: | H_9: | |||
| 00000: BC BC E6 C4 1A A3 55 A4 14 88 62 BF 64 BD 83 0D | 00000: BC BC E6 C4 1A A3 55 A4 14 88 62 BF 64 BD 83 0D | |||
| len(A) || len(C): | len(A) || len(C): | |||
| 00000: 00 00 00 00 00 00 01 48 00 00 00 00 00 00 02 18 | 00000: 00 00 00 00 00 00 01 48 00 00 00 00 00 00 02 18 | |||
| sum (xor) ( H_9 (x) ( len(A) || len(C) ) ): | sum (xor) ( H_9 (x) ( len(A) || len(C) ) ): | |||
| 00000: C0 C7 22 DB 5E 0B D6 DB 25 76 73 83 3D 56 71 28 | 00000: C0 C7 22 DB 5E 0B D6 DB 25 76 73 83 3D 56 71 28 | |||
| Tag T: | Tag T: | |||
| 00000: CF 5D 65 6F 40 C3 4F 5C 46 E8 BB 0E 29 FC DB 4C | 00000: CF 5D 65 6F 40 C3 4F 5C 46 E8 BB 0E 29 FC DB 4C | |||
| ]]> | ]]></sourcecode> | |||
| </artwork> | </li> | |||
| </figure> | </ol> | |||
| </t> | </section> | |||
| <t> | ||||
| <figure> | ||||
| <artwork> | ||||
| <![CDATA[ | ||||
| <section anchor="example2"> | ||||
| <name>Example 2</name> | ||||
| <sourcecode><![CDATA[ | ||||
| Encryption key K: | Encryption key K: | |||
| 00000: 99 AA BB CC DD EE FF 00 11 22 33 44 55 66 77 FE | 00000: 99 AA BB CC DD EE FF 00 11 22 33 44 55 66 77 FE | |||
| 00010: DC BA 98 76 54 32 10 01 23 45 67 89 AB CD EF 88 | 00010: DC BA 98 76 54 32 10 01 23 45 67 89 AB CD EF 88 | |||
| ICN: | ICN: | |||
| 00000: 11 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | 00000: 11 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | |||
| Associated authenticated data A: | Associated authenticated data A: | |||
| 00000: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 | 00000: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 | |||
| Plaintext P: | Plaintext P: | |||
| 00000: | 00000: | |||
| ]]></sourcecode> | ||||
| 1. Encryption step: | <ol> | |||
| <li><t>Encryption step:</t> | ||||
| <sourcecode><![CDATA[ | ||||
| C: | C: | |||
| 00000: | 00000: | |||
| ]]></sourcecode> | ||||
| </li> | ||||
| 2. Padding step: | <li><t>Padding step:</t> | |||
| <sourcecode><![CDATA[ | ||||
| A_1 || ... || A_h: | A_1 || ... || A_h: | |||
| 00000: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 | 00000: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 | |||
| C_1 || ... || C_q: | C_1 || ... || C_q: | |||
| 00000: | 00000: | |||
| ]]></sourcecode> | ||||
| </li> | ||||
| 3. Authentication tag T generation step: | <li><t>Authentication tag T generation step:</t> | |||
| <sourcecode><![CDATA[ | ||||
| 1^1 || ICN: | 1^1 || ICN: | |||
| 00000: 91 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | 00000: 91 22 33 44 55 66 77 00 FF EE DD CC BB AA 99 88 | |||
| Z_1: | Z_1: | |||
| 00000: 79 32 72 68 96 C4 3E 3F BF D6 50 89 EB F1 E5 B6 | 00000: 79 32 72 68 96 C4 3E 3F BF D6 50 89 EB F1 E5 B6 | |||
| H_1: | H_1: | |||
| 00000: 99 3A 80 66 CC C0 A4 0F AC 4A 14 F7 A2 F6 6D 9B | 00000: 99 3A 80 66 CC C0 A4 0F AC 4A 14 F7 A2 F6 6D 9B | |||
| current sum: | current sum: | |||
| 00000: 0A C1 1E 2C 1C D6 07 D8 2F E3 55 54 B4 01 02 81 | 00000: 0A C1 1E 2C 1C D6 07 D8 2F E3 55 54 B4 01 02 81 | |||
| skipping to change at line 750 ¶ | skipping to change at line 852 ¶ | |||
| 00000: 79 32 72 68 96 C4 3E 40 BF D6 50 89 EB F1 E5 B6 | 00000: 79 32 72 68 96 C4 3E 40 BF D6 50 89 EB F1 E5 B6 | |||
| H_2: | H_2: | |||
| 00000: 0C 38 A7 1E E7 93 BF 76 89 81 BF CD 7C DA 78 C8 | 00000: 0C 38 A7 1E E7 93 BF 76 89 81 BF CD 7C DA 78 C8 | |||
| len(A) || len(C): | len(A) || len(C): | |||
| 00000: 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 | 00000: 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 | |||
| sum (xor) ( H_2 (x) ( len(A) || len(C) ) ): | sum (xor) ( H_2 (x) ( len(A) || len(C) ) ): | |||
| 00000: CA 1E F8 92 71 EA 60 C4 53 9E 40 EB 26 C2 80 5D | 00000: CA 1E F8 92 71 EA 60 C4 53 9E 40 EB 26 C2 80 5D | |||
| Tag T: | Tag T: | |||
| 00000: 79 01 E9 EA 20 85 CD 24 7E D2 49 69 5F 9F 8A 85 | 00000: 79 01 E9 EA 20 85 CD 24 7E D2 49 69 5F 9F 8A 85 | |||
| ]]> | ]]></sourcecode> | |||
| </artwork> | </li> | |||
| </figure> | </ol> | |||
| </t> | </section> | |||
| </section> | </section> | |||
| <section title="Test Vectors for the Magma block cipher"> | <section numbered="true" toc="default"> | |||
| <t> | <name>Test Vectors for the Magma Block Cipher</name> | |||
| Test vectors for the Magma block cipher (n = 64, k = 256) define | <t> | |||
| d in <xref target="GOST3412-2015"/> (the English version can be found in <xref t | Test vectors for the Magma block cipher (n = 64, k = 256) are | |||
| arget="RFC8891"/>). | defined in <xref target="GOST3412-2015" format="default"/> | |||
| </t> | (the English version can be found in <xref target="RFC8891" | |||
| <t> | format="default"/>). | |||
| <figure> | </t> | |||
| <artwork> | <section anchor="examplemagma1"> | |||
| <![CDATA[ | <name>Example 1</name> | |||
| <sourcecode><![CDATA[ | ||||
| Encryption key K: | Encryption key K: | |||
| 00000: FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00 | 00000: FF EE DD CC BB AA 99 88 77 66 55 44 33 22 11 00 | |||
| 00010: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF | 00010: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF | |||
| ICN: | ICN: | |||
| 00000: 12 DE F0 6B 3C 13 0A 59 | 00000: 12 DE F0 6B 3C 13 0A 59 | |||
| Associated authenticated data A: | Associated authenticated data A: | |||
| 00000: 01 01 01 01 01 01 01 01 02 02 02 02 02 02 02 02 | 00000: 01 01 01 01 01 01 01 01 02 02 02 02 02 02 02 02 | |||
| 00010: 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 | 00010: 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 | |||
| 00020: 05 05 05 05 05 05 05 05 EA | 00020: 05 05 05 05 05 05 05 05 EA | |||
| Plaintext P: | Plaintext P: | |||
| 00000: FF EE DD CC BB AA 99 88 11 22 33 44 55 66 77 00 | 00000: FF EE DD CC BB AA 99 88 11 22 33 44 55 66 77 00 | |||
| 00010: 88 99 AA BB CC EE FF 0A 00 11 22 33 44 55 66 77 | 00010: 88 99 AA BB CC EE FF 0A 00 11 22 33 44 55 66 77 | |||
| 00020: 99 AA BB CC EE FF 0A 00 11 22 33 44 55 66 77 88 | 00020: 99 AA BB CC EE FF 0A 00 11 22 33 44 55 66 77 88 | |||
| 00030: AA BB CC EE FF 0A 00 11 22 33 44 55 66 77 88 99 | 00030: AA BB CC EE FF 0A 00 11 22 33 44 55 66 77 88 99 | |||
| 00040: AA BB CC | 00040: AA BB CC | |||
| ]]></sourcecode> | ||||
| 1. Encryption step: | <ol> | |||
| <li><t>Encryption step:</t> | ||||
| <sourcecode><![CDATA[ | ||||
| 0^1 || ICN: | 0^1 || ICN: | |||
| 00000: 12 DE F0 6B 3C 13 0A 59 | 00000: 12 DE F0 6B 3C 13 0A 59 | |||
| Y_1: | Y_1: | |||
| 00000: 56 23 89 01 62 DE 31 BF | 00000: 56 23 89 01 62 DE 31 BF | |||
| E_K(Y_1): | E_K(Y_1): | |||
| 00000: 38 7B DB A0 E4 34 39 B3 | 00000: 38 7B DB A0 E4 34 39 B3 | |||
| Y_2: | Y_2: | |||
| 00000: 56 23 89 01 62 DE 31 C0 | 00000: 56 23 89 01 62 DE 31 C0 | |||
| skipping to change at line 840 ¶ | skipping to change at line 946 ¶ | |||
| 00000: 56 23 89 01 62 DE 31 C7 | 00000: 56 23 89 01 62 DE 31 C7 | |||
| E_K(Y_9): | E_K(Y_9): | |||
| 00000: A9 00 50 4A 14 8D EE 26 | 00000: A9 00 50 4A 14 8D EE 26 | |||
| C: | C: | |||
| 00000: C7 95 06 6C 5F 9E A0 3B 85 11 33 42 45 91 85 AE | 00000: C7 95 06 6C 5F 9E A0 3B 85 11 33 42 45 91 85 AE | |||
| 00010: 1F 2E 00 D6 BF 2B 78 5D 94 04 70 B8 BB 9C 8E 7D | 00010: 1F 2E 00 D6 BF 2B 78 5D 94 04 70 B8 BB 9C 8E 7D | |||
| 00020: 9A 5D D3 73 1F 7D DC 70 EC 27 CB 0A CE 6F A5 76 | 00020: 9A 5D D3 73 1F 7D DC 70 EC 27 CB 0A CE 6F A5 76 | |||
| 00030: 70 F6 5C 64 6A BB 75 D5 47 AA 37 C3 BC B5 C3 4E | 00030: 70 F6 5C 64 6A BB 75 D5 47 AA 37 C3 BC B5 C3 4E | |||
| 00040: 03 BB 9C | 00040: 03 BB 9C | |||
| ]]></sourcecode> | ||||
| </li> | ||||
| 2. Padding step: | <li><t>Padding step:</t> | |||
| <sourcecode><![CDATA[ | ||||
| A_1 || ... || A_h: | A_1 || ... || A_h: | |||
| 00000: 01 01 01 01 01 01 01 01 02 02 02 02 02 02 02 02 | 00000: 01 01 01 01 01 01 01 01 02 02 02 02 02 02 02 02 | |||
| 00010: 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 | 00010: 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 | |||
| 00020: 05 05 05 05 05 05 05 05 EA 00 00 00 00 00 00 00 | 00020: 05 05 05 05 05 05 05 05 EA 00 00 00 00 00 00 00 | |||
| C_1 || ... || C_q: | C_1 || ... || C_q: | |||
| 00000: C7 95 06 6C 5F 9E A0 3B 85 11 33 42 45 91 85 AE | 00000: C7 95 06 6C 5F 9E A0 3B 85 11 33 42 45 91 85 AE | |||
| 00010: 1F 2E 00 D6 BF 2B 78 5D 94 04 70 B8 BB 9C 8E 7D | 00010: 1F 2E 00 D6 BF 2B 78 5D 94 04 70 B8 BB 9C 8E 7D | |||
| 00020: 9A 5D D3 73 1F 7D DC 70 EC 27 CB 0A CE 6F A5 76 | 00020: 9A 5D D3 73 1F 7D DC 70 EC 27 CB 0A CE 6F A5 76 | |||
| 00030: 70 F6 5C 64 6A BB 75 D5 47 AA 37 C3 BC B5 C3 4E | 00030: 70 F6 5C 64 6A BB 75 D5 47 AA 37 C3 BC B5 C3 4E | |||
| 00040: 03 BB 9C 00 00 00 00 00 | 00040: 03 BB 9C 00 00 00 00 00 | |||
| ]]></sourcecode> | ||||
| </li> | ||||
| 3. Authentication tag T generation step: | <li><t>Authentication tag T generation step:</t> | |||
| <sourcecode><![CDATA[ | ||||
| 1^1 || ICN: | 1^1 || ICN: | |||
| 00000: 92 DE F0 6B 3C 13 0A 59 | 00000: 92 DE F0 6B 3C 13 0A 59 | |||
| Z_1: | Z_1: | |||
| 00000: 2B 07 3F 04 94 F3 72 A0 | 00000: 2B 07 3F 04 94 F3 72 A0 | |||
| H_1: | H_1: | |||
| 00000: 70 8A 78 19 1C DD 22 AA | 00000: 70 8A 78 19 1C DD 22 AA | |||
| current sum: | current sum: | |||
| 00000: D6 BB 5B EA 81 93 12 62 | 00000: D6 BB 5B EA 81 93 12 62 | |||
| skipping to change at line 976 ¶ | skipping to change at line 1086 ¶ | |||
| 00000: 2B 07 3F 13 94 F3 72 A0 | 00000: 2B 07 3F 13 94 F3 72 A0 | |||
| H_16: | H_16: | |||
| 00000: 83 11 B6 02 4A A9 66 C1 | 00000: 83 11 B6 02 4A A9 66 C1 | |||
| len(A) || len(C): | len(A) || len(C): | |||
| 00000: 00 00 01 48 00 00 02 18 | 00000: 00 00 01 48 00 00 02 18 | |||
| sum (xor) ( H_16 (x) ( len(A) || len(C) ) ): | sum (xor) ( H_16 (x) ( len(A) || len(C) ) ): | |||
| 00000: 73 CE F4 4B AE 6B DB 61 | 00000: 73 CE F4 4B AE 6B DB 61 | |||
| Tag T: | Tag T: | |||
| 00000: A7 92 80 69 AA 10 FD 10 | 00000: A7 92 80 69 AA 10 FD 10 | |||
| ]]> | ]]></sourcecode> | |||
| </artwork> | </li> | |||
| </figure> | </ol> | |||
| </t> | </section> | |||
| <t> | ||||
| <figure> | ||||
| <artwork> | ||||
| <![CDATA[ | ||||
| <section anchor="examplemagma2"> | ||||
| <name>Example 2</name> | ||||
| <sourcecode><![CDATA[ | ||||
| Encryption key K: | Encryption key K: | |||
| 00000: 99 AA BB CC DD EE FF 00 11 22 33 44 55 66 77 FE | 00000: 99 AA BB CC DD EE FF 00 11 22 33 44 55 66 77 FE | |||
| 00010: DC BA 98 76 54 32 10 01 23 45 67 89 AB CD EF 88 | 00010: DC BA 98 76 54 32 10 01 23 45 67 89 AB CD EF 88 | |||
| ICN: | ICN: | |||
| 00000: 00 77 66 55 44 33 22 11 | 00000: 00 77 66 55 44 33 22 11 | |||
| Associated authenticated data A: | Associated authenticated data A: | |||
| 00000: | 00000: | |||
| Plaintext P: | Plaintext P: | |||
| 00000: 22 33 44 55 66 77 00 FF | 00000: 22 33 44 55 66 77 00 FF | |||
| ]]></sourcecode> | ||||
| 1. Encryption step: | <ol> | |||
| <li><t>Encryption step:</t> | ||||
| <sourcecode><![CDATA[ | ||||
| 0^1 || ICN: | 0^1 || ICN: | |||
| 00000: 00 77 66 55 44 33 22 11 | 00000: 00 77 66 55 44 33 22 11 | |||
| Y_1: | Y_1: | |||
| 00000: 5B 2A 7E 60 4F 9F BB 95 | 00000: 5B 2A 7E 60 4F 9F BB 95 | |||
| E_K(Y_1): | E_K(Y_1): | |||
| 00000: 48 A6 A5 17 0D 52 9D B1 | 00000: 48 A6 A5 17 0D 52 9D B1 | |||
| C: | C: | |||
| 00000: 6A 95 E1 42 6B 25 9D 4E | 00000: 6A 95 E1 42 6B 25 9D 4E | |||
| ]]></sourcecode> | ||||
| 2. Padding step: | </li> | |||
| <li><t>Padding step:</t> | ||||
| <sourcecode><![CDATA[ | ||||
| A_1 || ... || A_h: | A_1 || ... || A_h: | |||
| 00000: | 00000: | |||
| C_1 || ... || C_q: | C_1 || ... || C_q: | |||
| 00000: 6A 95 E1 42 6B 25 9D 4E | 00000: 6A 95 E1 42 6B 25 9D 4E | |||
| ]]></sourcecode> | ||||
| </li> | ||||
| 3. Authentication tag T generation step: | <li><t>Authentication tag T generation step:</t> | |||
| <sourcecode><![CDATA[ | ||||
| 1^1 || ICN: | 1^1 || ICN: | |||
| 00000: 80 77 66 55 44 33 22 11 | 00000: 80 77 66 55 44 33 22 11 | |||
| Z_1: | Z_1: | |||
| 00000: 59 73 54 78 7E 52 E6 EB | 00000: 59 73 54 78 7E 52 E6 EB | |||
| H_1: | H_1: | |||
| 00000: EC E3 F9 DA 11 8C 7D 95 | 00000: EC E3 F9 DA 11 8C 7D 95 | |||
| current sum: | current sum: | |||
| 00000: 25 D0 E4 20 7B 6B F6 3D | 00000: 25 D0 E4 20 7B 6B F6 3D | |||
| skipping to change at line 1044 ¶ | skipping to change at line 1155 ¶ | |||
| 00000: 59 73 54 79 7E 52 E6 EB | 00000: 59 73 54 79 7E 52 E6 EB | |||
| H_2: | H_2: | |||
| 00000: 31 0C 0D AC C9 D0 4D 93 | 00000: 31 0C 0D AC C9 D0 4D 93 | |||
| len(A) || len(C): | len(A) || len(C): | |||
| 00000: 00 00 00 00 00 00 00 40 | 00000: 00 00 00 00 00 00 00 40 | |||
| sum (xor) ( H_2 (x) ( len(A) || len(C) ) ): | sum (xor) ( H_2 (x) ( len(A) || len(C) ) ): | |||
| 00000: 66 D3 8F 12 0F 78 92 49 | 00000: 66 D3 8F 12 0F 78 92 49 | |||
| Tag T: | Tag T: | |||
| 00000: 33 4E E2 70 45 0B EC 9E | 00000: 33 4E E2 70 45 0B EC 9E | |||
| ]]> | ]]></sourcecode> | |||
| </artwork> | </li> | |||
| </figure> | </ol> | |||
| </t> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="contributors" numbered="false" toc="default"> | ||||
| <name>Contributors</name> | ||||
| <section anchor="contributors" title="Contributors"> | <contact fullname="Evgeny Alekseev"> | |||
| <t> | <organization>CryptoPro</organization> | |||
| <list style="symbols"> | <address> | |||
| <t> | <email>alekseev@cryptopro.ru</email> | |||
| Evgeny Alekseev <vspace/> | </address> | |||
| CryptoPro <vspace/> | </contact> | |||
| alekseev@cryptopro.ru | ||||
| </t> | <contact fullname="Alexandra Babueva"> | |||
| <t> | ||||
| Alexandra Babueva <vspace/> | <organization>CryptoPro</organization> | |||
| CryptoPro <vspace/> | <address> | |||
| babueva@cryptopro.ru | <email>babueva@cryptopro.ru</email> | |||
| </t> | </address> | |||
| <t> | </contact> | |||
| Lilia Akhmetzyanova <vspace /> | ||||
| CryptoPro<vspace /> | <contact fullname="Lilia Akhmetzyanova"> | |||
| lah@cryptopro.ru | ||||
| </t> | <organization>CryptoPro</organization> | |||
| <t> | <address> | |||
| Grigory Marshalko<vspace /> | <email>lah@cryptopro.ru</email> | |||
| TC 26<vspace /> | </address> | |||
| marshalko_gb@tc26.ru | </contact> | |||
| </t> | ||||
| <t> | <contact fullname="Grigory Marshalko"> | |||
| Vladimir Rudskoy<vspace /> | ||||
| TC 26<vspace /> | <organization>TC 26</organization> | |||
| rudskoy_vi@tc26.ru | <address> | |||
| </t> | <email>marshalko_gb@tc26.ru</email> | |||
| <t> | </address> | |||
| Alexey Nesterenko <vspace /> | </contact> | |||
| National Research University Higher School of Economics< | ||||
| vspace /> | <contact fullname="Vladimir Rudskoy"> | |||
| anesterenko@hse.ru | ||||
| </t> | <organization>TC 26</organization> | |||
| <t> | <address> | |||
| Lidia Nikiforova<vspace/> | <email>rudskoy_vi@tc26.ru</email> | |||
| CryptoPro<vspace /> | </address> | |||
| nikiforova@cryptopro.ru | </contact> | |||
| </t> | ||||
| </list> | <contact fullname="Alexey Nesterenko"> | |||
| </t> | ||||
| </section> | <organization>National Research University Higher School of Economics</org | |||
| <!-- | anization> | |||
| <section title="Acknowledgments"> | <address> | |||
| <t> | <email>anesterenko@hse.ru</email> | |||
| We thank TODO for their useful comments. | </address> | |||
| </t> | </contact> | |||
| </section> | ||||
| --> | <contact fullname="Lidia Nikiforova"> | |||
| <organization>CryptoPro</organization> | ||||
| <address> | ||||
| <email>nikiforova@cryptopro.ru</email> | ||||
| </address> | ||||
| </contact> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 71 change blocks. | ||||
| 723 lines changed or deleted | 760 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||