Internet DRAFT - draft-madden-generalised-siv
draft-madden-generalised-siv
Network Working Group N. Madden
Internet-Draft ForgeRock
Intended status: Informational November 22, 2018
Expires: May 26, 2019
Synthetic IV (SIV) for non-AES ciphers and MACs
draft-madden-generalised-siv-00
Abstract
This document specifies how the Synthetic Initialization Vector (SIV)
block cipher mode of operation can be adapted to non-AES ciphers and
message authentication codes (MACs), with block sizes and MAC tag
sizes other than 128 bits. Concrete instantiations are defined using
the XChaCha20 nonce-extended stream cipher combined with HMAC-SHA256.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 26, 2019.
Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Madden Expires May 26, 2019 [Page 1]
Internet-Draft Generalised SIV November 2018
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Requirements Terminology . . . . . . . . . . . . . . . . 2
1.2. Motivation . . . . . . . . . . . . . . . . . . . . . . . 2
2. The Generic SIV Construction . . . . . . . . . . . . . . . . 3
2.1. Encryption . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Decryption . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Generalised S2V . . . . . . . . . . . . . . . . . . . . . 5
2.4. AES-SIV . . . . . . . . . . . . . . . . . . . . . . . . . 7
3. XChaCha20-HMAC-SHA256-SIV . . . . . . . . . . . . . . . . . . 8
4. IANA considerations . . . . . . . . . . . . . . . . . . . . . 9
4.1. AEAD_XCHACHA20_SIV_HMAC_SHA256 . . . . . . . . . . . . . 9
5. Security Considerations . . . . . . . . . . . . . . . . . . . 9
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.1. Normative References . . . . . . . . . . . . . . . . . . 10
6.2. Informative References . . . . . . . . . . . . . . . . . 11
Appendix A. Test Vectors . . . . . . . . . . . . . . . . . . . . 12
A.1. Nonce-Based Authenticated Encryption Example . . . . . . 12
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 14
1. Introduction
The Synthetic Initialization Vector (SIV) block cipher mode of
operation [RFC5297] provides either deterministic authenticated
encryption (DAE) or nonce-reuse misuse-resistant authenticated
encryption (MRAE) [DAE]. It was originally specified for the
combination of AES-CMAC for authenticity and AES-CTR for
confidentiality. The 128-bit AES-CMAC tag is used as the 128-bit
(synthetic) IV for AES-CTR. This document show how to apply SIV mode
to ciphers and MACs with IV and tag lengths other than 128 bits,
including where the IV and tag length may differ.
1.1. Requirements Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC8174] when, and only when, they appear in all capitals, as
shown here.
1.2. Motivation
Common IV-based authenticated encryption modes of operation require a
unique IV (or nonce) to be provided on each call to the encryption
function with the same key. If an IV is reused, either by accident
or through malicious action, then some combination of the
confidentiality and/or authenticity properties is usually lost. For
Madden Expires May 26, 2019 [Page 2]
Internet-Draft Generalised SIV November 2018
the popular Galois Counter Mode (GCM) [SP800-38D], NIST states that
"a breach of the requirement [...] for the uniqueness of the
initialization strings may compromise the security assurance almost
entirely" (section 3 and Appendix A). The SIV mode of operation
[RFC5297][SIV], when used with a unique nonce as part of the
associated data, provides a measure of protection against nonce
reuse. If a nonce is reused with SIV mode then there is no loss of
authenticity, and a minimal loss of confidentiality: an attacker is
able to determine only whether the exact same message has been
encrypted with the same associated data and nonce using the same key.
While the SIV mode is specified as a generic composition of an IV-
based encryption scheme and a pseudorandom function (PRF), most uses
of the mode have concentrated on the one concrete instantiation of
the mode given at the time: AES-SIV. AES-SIV is built entirely from
the AES block cipher, using AES-CMAC [RFC4493] as the PRF and AES in
CTR mode for confidentiality. This combination is attractive as it
requires only an AES encryption operation to implement all aspects of
the mode. It also has the convenient property that AES-CMAC produces
a 128-bit tag, and AES-CTR requires a 128-bit IV, which allows the
tag to be used directly as the (synthetic) IV.
While AES-SIV has many attractive properties, there are good reasons
for extending SIV to other ciphers and PRFs. As stated in the
rationale for adopting ChaCha20 and Poly1305 for IETF protocols
[RFC8439], overreliance on a single cipher design, however good, may
cause difficulties if a weakness is ever discovered in AES.
Secondly, AES can be difficult to implement efficiently in software
while avoiding timing side-channels. Finally, there is the simple
fact that non-AES ciphers and PRFs exist and will continue to be
used, and SIV mode is of independent interest to users of those
alternative primitives.
2. The Generic SIV Construction
The generic SIV construction is defined in terms two primitive
functions:
1. A PRF, F*, that takes a vector of strings as input.
2. A length-preserving IV-based encryption scheme, E.
The S2V function can be used to build F* from a PRF, F, that takes a
single string input. The generalised version of this function is
described in the next section.
The following constants MUST be defined for any concrete
instantiation of E and F*:
Madden Expires May 26, 2019 [Page 3]
Internet-Draft Generalised SIV November 2018
IV_LEN - the length of IV/nonce expected by E, in bits.
TAG_LEN - the length of the output tag produced by F*, in bits.
PRF_KEY_LEN - the length of key required for F*, in bits.
CIPHER_KEY_LEN - the length of key required for E, in bits.
For any choice of E and F*, TAG_LEN MUST be greater than or equal to
IV_LEN.
We denote the encryption operation of E as E.encrypt(key, iv,
plaintext), and the decryption operation as E.decrypt(key, iv,
ciphertext).
2.1. Encryption
Encryption takes as input a key, K, a plaintext P, and zero or more
associated data headers to be authenticated but not encrypted. The
key K MUST be as long as the sum of the key length of F* and the key
length of E. For example, if F* requires a 256-bit key and E
requires a 128-bit key, then K must be 384 bits long.
Encryption proceeds as follows. Firstly, keys K1 and K2 are derived
from K by taking the leftmost PRF_KEY_LEN bits of K as K1, and the
rightmost CIPHER_KEY_LEN bits of K as K2. Secondly, the PRF F* is
applied to K1, the plaintext P, and all of the n associated data
strings AD1, ..., ADn. This results in an authentication tag, T.
The SIV is defined as the leftmost IV_LEN bits of T. If TAG_LEN =
IV_LEN, then T is used in its entirety. The plaintext P is then
encrypted using E, with K2 as the key and SIV as the IV, producing
ciphertext C. The concatenation of T with C is returned as the
output of the function.
In pseudocode, generalised SIV encryption is as follows:
SIV-ENCRYPT[F*,E](K, P, AD1, ..., ADn) {
K1 = leftmost(K, PRF_KEY_LEN)
K2 = rightmost(K, CIPHER_KEY_LEN)
T = F*(K1, AD1, ..., ADn, P)
SIV = leftmost(T, IV_LEN)
C = E.encrypt(K2, SIV, P)
return T || C
}
Madden Expires May 26, 2019 [Page 4]
Internet-Draft Generalised SIV November 2018
2.2. Decryption
Decryption takes as input a key, K, an authenticated ciphertext Z,
and zero or more associated data blocks to be authenticated but not
decrypted.
Keys K1 and K2 are derived as for encryption. The leftmost TAG_LEN
bits of Z are taken as the tag T, while the remaining bits are the
ciphertext C. As for encryption, the SIV is taken as the leftmost
IV_LEN bits of T. The ciphertext C is then decrypted using E with
the key K2 and SIV as the IV, producing plaintext P. The expected
authentication tag T' is then computed using F* over the key K1, the
associated data AD1, ..., ADn, and the plaintext P. If T' exactly
matches T then the plaintext P is returned. If T' does not match T
then the implementation MUST NOT return P and MUST destroy P and T'
and return a failure. Authentication tag comparisons SHOULD be
performed in constant time to avoid leaking the true value of T'
through timing differences.
SIV-DECRYPT[F*,E](K, Z, AD1, ..., ADn) {
T = leftmost(Z, TAG_LEN)
C = rightmost(Z, len(Z) - TAG_LEN)
K1 = leftmost(K, PRF_KEY_LEN)
K2 = rightmost(K, CIPHER_KEY_LEN)
SIV = leftmost(T, IV_LEN)
P = E.decrypt(K2, SIV, C)
T' = F*(K1, AD1, ..., ADn, P)
if T = T' then
return P
else
destroy P and T'
return FAIL
fi
}
2.3. Generalised S2V
SIV requires a PRF that takes a vector of strings as input, while
most PRFs in current use are designed to only take a single string.
In principle, any unambiguous encoding can be used to convert a
vector of inputs into a single string, but SIV defines a particularly
efficient encoding provided by the function S2V (for "string to
vector") that converts a single-string PRF to a vector input PRF.
S2V is defined using bitwise exclusive OR (XOR) and a doubling
operation in the finite field GF(2^n) where n is the bit length of
the output of the PRF. For AES-SIV, which uses AES-CMAC as the PRF,
Madden Expires May 26, 2019 [Page 5]
Internet-Draft Generalised SIV November 2018
this is GF(2^128). In this section we show how to define S2V for
PRFs with different tag lengths.
Points in the finite field GF(2^n) are represented as n-bit strings
a_(n-1) ... a_1 a_0, which can also be seen as binary coefficients
for a polynomial f(x) = a_(n-1) * x^(n-1) + ... + a_1 * x + a_0.
Multiplication is then defined as the product of two polynomials,
with the remainder taken after division by a fixed polynomial. In
S2V, the fixed polynomial is the lexicographically first minimum-
weight primitive polynomial [SIV] (section 2). For GF(2^128), such a
primitive polynomial is:
f(x) = x^128 + x^7 + x^2 + x + 1
Primitive polynomials for other fields can be found in published
tables, such as [HPL-98-135]. The following polynomials are
indicated for common PRF output sizes:
+-----------+-------------------------------------+
| Field | Primitive Polynomial |
+-----------+-------------------------------------+
| GF(2^64) | f(x) = x^64 + x^4 + x^3 + x + 1 |
| GF(2^96) | f(x) = x^96 + x^10 + x^9 + x^6 + 1 |
| GF(2^128) | f(x) = x^128 + x^7 + x^2 + x + 1 |
| GF(2^160) | f(x) = x^160 + x^5 + x^3 + x^2 + 1 |
| GF(2^192) | f(x) = x^192 + x^7 + x^2 + x + 1 |
| GF(2^224) | f(x) = x^224 + x^9 + x^8 + x^3 + 1 |
| GF(2^256) | f(x) = x^256 + x^10 + x^5 + x^2 + 1 |
| GF(2^384) | f(x) = x^384 + x^12 + x^3 + x^2 + 1 |
| GF(2^512) | f(x) = x^512 + x^8 + x^5 + x^2 + 1 |
+-----------+-------------------------------------+
Doubling for S2V is defined as multiplication with the binary value
0^(n-2)10 (i.e., the number 2 represented as an n-bit binary string).
The doubling operation can be efficiently implemented as a left-shift
operation followed by a conditional XOR with an n-bit constant
derived from the binary coefficients of the primitive polynomial.
The condition being whether the most significant bit of the value
being shifted off is 1. For GF(2^128), the constant is
0^(120)10000111, with one bits corresponding to x^7, x^2, x and 1
respectively. The following table lists the constants for common PRF
output sizes in binary and hexadecimal form. Leading zero octets are
omitted from the hexadecimal format.
Madden Expires May 26, 2019 [Page 6]
Internet-Draft Generalised SIV November 2018
+-----------+----------------------------+-------------------------+
| Field | Doubling Constant - Binary | Doubling Constant - Hex |
+-----------+----------------------------+-------------------------+
| GF(2^64) | 0^(59)11011 | 0x1b |
| GF(2^92) | 0^(150)1100100001 | 0x0321 |
| GF(2^128) | 0^(120)10000111 | 0x87 |
| GF(2^160) | 0^(154)101101 | 0x2d |
| GF(2^192) | 0^(184)10000111 | 0x87 |
| GF(2^224) | 0^(214)1100001001 | 0x0309 |
| GF(2^256) | 0^(245)10000100101 | 0x0425 |
| GF(2^384) | 0^(371)1000000001101 | 0x100d |
| GF(2^256) | 0^(503)100100101 | 0x0125 |
+-----------+----------------------------+-------------------------+
It is recommended that the conditional XOR be performed in constant
time. A constant time bit-sliced implementation is provided in
Appendix A.
The S2V algorithm parameterised over a particular PRF, F, written
S2V[F] is as follows, where TAG_LEN is the output size of the PRF in
bits, dbl(x) is the appropriate doubling operation for TAG_LEN, and
xorend is defined as in [RFC5297]. The constant <zero> is the
TAG_LEN sequence of all zero bits, and <one> is TAG_LEN-1 zero bits
followed by a single 1 bit. The function pad(X) pads the input to
TAG_LEN bits by appending a single 1 bit followed by as many 0 bits
as necessary.
S2V[F](K, S1, ..., Sn) {
if n = 0 then
return F(K, <one>)
fi
D = F(K, <zero>)
for i = 1 to n-1 do
D = dbl(D) xor F(K, Si)
done
if len(Sn) >= TAG_LEN then
T = Sn xorend D
else
T = dbl(D) xor pad(Sn)
fi
return F(K, T)
}
2.4. AES-SIV
This section is non-normative.
Madden Expires May 26, 2019 [Page 7]
Internet-Draft Generalised SIV November 2018
The original AES-SIV mode of [RFC5297] can be seen as an
instantiation of the generic SIV construction in this document, with
the following parameters:
F* = S2V[AES-CMAC]
E = AES-CTR where the 31st and 63rd bits of the IV are zeroed
prior to use as described in [RFC5297] section 2.5.
PRF_KEY_LEN = 128, 192 or 256 bits
CIPHER_KEY_LEN = 128, 192 or 256 bits (to match PRF_KEY_LEN).
IV_LEN = TAG_LEN = 128 bits.
3. XChaCha20-HMAC-SHA256-SIV
ChaCha20 is a stream cipher that has been adopted for use in IETF
protocols by [RFC8439]. It has several attractive properties, most
notably that it can be implemented efficiently in software and is
relatively easy to make resistant to cache-timing side-channel
attacks. As originally specified, ChaCha20 takes a 256-bit key and a
64-bit nonce, which was extended to 96-bits when adopted by the IETF.
A 96-bit nonce is too small to be safely generated randomly (or
pseudorandomly as in SIV) without artificially limiting the number of
messages that can be encrypted with a single key. To address this
problem, an extended nonce variant known as XChaCha20
[I-D.arciszewski-xchacha] has been proposed, which increase the nonce
to 192-bits. This makes it an excellent choice for an SIV
instantiation, providing a MRAE cipher mode alternative to AES.
In principle, any PRF that produces at least a 192-bit output could
be used with XChaCha20. For concreteness, we specify the use of HMAC
[RFC2104] with the SHA-256 secure hash function [RFC6234] as HMAC-
SHA256 is widely implemented. The S2V function of section 2.3 is
used to allow HMAC-SHA256 to take a vector of strings as input, with
the primitive polynomial for GF(2^256) used for point doubling and
the leftmost 192 bits of the S2V[HMAC-SHA256] tag used as the
synthetic IV for XChaCha20.
The encryption and decryption procedures are as described in sections
2.1 and 2.2 above, with the following constant values:
PRF_KEY_LEN = 256 bits.
CIPHER_KEY_LEN = 256 bits.
IV_LEN = 192 bits.
Madden Expires May 26, 2019 [Page 8]
Internet-Draft Generalised SIV November 2018
TAG_LEN = 256 bits.
Test vectors for XChaCha20-HMAC-SHA256-SIV are provided in
Appendix A.
4. IANA considerations
This section registers AEAD algorithms as per the registry
established in [RFC5116]. As specified in [RFC5297] section 6, the
interface of RFC 5116 only allows a single associated data (AD)
component. When SIV is accessed via this interface, multiple AD
components must be marshalled into a single string prior to calling
the SIV procedures.
4.1. AEAD_XCHACHA20_SIV_HMAC_SHA256
The AEAD_XCHACHA20_SIV_HMAC_SHA256 algorithm is an instantiation of
the generalised SIV mode described in Sections 2.1 and 2.2 with the
XChaCha20 extended-nonce stream cipher [I-D.arciszewski-xchacha] and
HMAC-SHA256 as the PRF, as described in Section 3. XChaCha20 uses a
32-bit block counter and a 512-bit block size, therefore the maximum
size of plaintext that can be encrypted in a single invocation is
2^38 octets, around 256 GB. The ciphertext length is equal to the
length of the plaintext plus 32 octets for the HMAC-SHA256
authentication tag (of which the leftmost 24 octets comprise the
SIV).
The input and output lengths for AEAD_XCHACHA20_SIV_HMAC_SHA256 as
defined by [RFC5116] are:
K_LEN is 64 octets.
P_MAX is 2^38 octets.
A_MAX is unlimited.
N_MIN is 1 octet.
N_MAX is unlimited.
C_MAX is 2^38 + 32 octets.
5. Security Considerations
The security considerations of [RFC5297] apply here.
The security proofs for SIV [DAE] require that F* (and F if
constructing F* using S2V) behaves as a pseudorandom function (PRF).
E must be a length-preserving semantically-secure encryption scheme.
It is RECOMMENDED that SIV mode is always used with a unique random
component included as the last element of the header (associated
data) to ensure semantic security. While SIV mode loses a minimal
Madden Expires May 26, 2019 [Page 9]
Internet-Draft Generalised SIV November 2018
amount of security if this component is omitted (or accidentally
reused), an attacker in this case is able to determine if the same
plaintext has been encrypted under the same key and with the same
associated data. Depending on the application this may still be a
significant loss of confidentiality. For example, a service that
produces yes/no answers to questions would lose all confidentiality
of its responses in this case. The misuse resistance of SIV should
be considered a failsafe and not as a way to do without a nonce.
The requirement that E be length-preserving means that the ciphertext
produced by SIV mode will be equal in length to the input plaintext,
plus the authentication tag (which is of fixed size for any concrete
instantiation of this mode). If the length of the plaintext on its
own may reveal information then care should be taken to obscure this
prior to encryption -- by padding to a known maximum length, for
example. In the case of the yes/no answer service the English words
"yes" and "no" can be distinguished purely by length, to give a
simple example.
In [tightness], Chatterjee, Menezes and Sarkar show an attack on SIV
within the multi-user setting. It is RECOMMENDED that concrete
instantiations intended for such use define a MAC_KEY_LENGTH of at
least 256 bits or describe other countermeasures.
The number of components passed to any invocation of S2V (including
the plaintext) must not exceed TAG_LEN - 1. For example, a 128-bit
PRF such as AES-CMAC should allow no more than 127 components. For
XChaCha20-HMAC-SHA256-SIV no more than 255 components should be
allowed.
6. References
6.1. Normative References
[I-D.arciszewski-xchacha]
Arciszewski, S., "XChaCha: eXtended-nonce ChaCha and
AEAD_XChaCha20_Poly1305", draft-arciszewski-xchacha-02
(work in progress), October 2018.
[RFC5116] McGrew, D., "An Interface and Algorithms for Authenticated
Encryption", RFC 5116, DOI 10.17487/RFC5116, January 2008,
<https://www.rfc-editor.org/info/rfc5116>.
[RFC5297] Harkins, D., "Synthetic Initialization Vector (SIV)
Authenticated Encryption Using the Advanced Encryption
Standard (AES)", RFC 5297, DOI 10.17487/RFC5297, October
2008, <https://www.rfc-editor.org/info/rfc5297>.
Madden Expires May 26, 2019 [Page 10]
Internet-Draft Generalised SIV November 2018
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
6.2. Informative References
[DAE] Rogaway, P. and T. Shrimpton, "Deterministic
Authenticated-Encryption. A Provable-Security Treatment of
the Key-Wrap Problem.", IACR ePrint 2006/221, August 2007.
[HPL-98-135]
Seroussi, G., "Table of Low-Weight Binary Irreducible
Polynomials", HPL HPL-98-135, August 1998.
[RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed-
Hashing for Message Authentication", RFC 2104,
DOI 10.17487/RFC2104, February 1997,
<https://www.rfc-editor.org/info/rfc2104>.
[RFC4493] Song, JH., Poovendran, R., Lee, J., and T. Iwata, "The
AES-CMAC Algorithm", RFC 4493, DOI 10.17487/RFC4493, June
2006, <https://www.rfc-editor.org/info/rfc4493>.
[RFC6234] Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms
(SHA and SHA-based HMAC and HKDF)", RFC 6234,
DOI 10.17487/RFC6234, May 2011,
<https://www.rfc-editor.org/info/rfc6234>.
[RFC8439] Nir, Y. and A. Langley, "ChaCha20 and Poly1305 for IETF
Protocols", RFC 8439, DOI 10.17487/RFC8439, June 2018,
<https://www.rfc-editor.org/info/rfc8439>.
[SIV] Rogaway, P. and T. Shrimpton, "The SIV Mode of Operation
for Deterministic Authenticated-Encryption (Key Wrap) and
Misuse-Resistant Nonce-Based Authenticated-Encryption.",
August 2007.
[SP800-38D]
Dworkin, M., "Recommendation for Block Cipher Modes of
Operation: Galois/Counter Mode (GCM) and GMAC.", NIST
Special Publication 800-38D, November 2007.
[tightness]
Chatterjee, S., Menezes, A., and P. Sarkar, "Another Look
at Tightness", Proceedings of SAC 2011, Lecture Notes in
Computer Science 7118, August 2011.
Madden Expires May 26, 2019 [Page 11]
Internet-Draft Generalised SIV November 2018
Appendix A. Test Vectors
A.1. Nonce-Based Authenticated Encryption Example
Input
-----
Key:
000 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f ................
016 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f ................
032 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af ................
048 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf ................
Plaintext:
000 4c 61 64 69 65 73 20 61 6e 64 20 47 65 6e 74 6c Ladies and Gentl
016 65 6d 65 6e 20 6f 66 20 74 68 65 20 63 6c 61 73 emen of the clas
032 73 20 6f 66 20 27 39 39 3a 20 49 66 20 49 20 63 s of '99: If I c
048 6f 75 6c 64 20 6f 66 66 65 72 20 79 6f 75 20 6f ould offer you o
064 6e 6c 79 20 6f 6e 65 20 74 69 70 20 66 6f 72 20 nly one tip for
080 74 68 65 20 66 75 74 75 72 65 2c 20 73 75 6e 73 the future, suns
096 63 72 65 65 6e 20 77 6f 75 6c 64 20 62 65 20 69 creen would be i
112 74 2e t.
Nonce:
000 50 51 52 53 c0 c1 c2 c3 c4 c5 c6 c7 PQRS........
IV:
000 40 41 42 43 44 45 46 47 @ABCDEFG
S2V[HMAC-SHA256]
----------------
HMAC-SHA256(<zero>):
318dcd14 73a3c69c 643eb853 e66eb357
c5bcb67b cd96ea83 4af2a3c6 f462136f
dbl():
631b9a28 e7478d38 c87d70a7 ccdd66af
8b796cf7 9b2dd506 95e5478d e8c426de
HMAC-SHA256(AD1):
8b80c006 47844e6b 54617036 b1c09145
0ab8ad63 1e7ca653 326a8d4f e135dafb
xor:
e89b5a2e a0c3c353 9c1c0091 7d1df7ea
81c1c194 85517355 a78fcac2 09f1fc25
dbl():
d136b45d 418786a7 38380122 fa3befd5
Madden Expires May 26, 2019 [Page 12]
Internet-Draft Generalised SIV November 2018
03838329 0aa2e6ab 4f1f9584 13e3fc6f
HMAC-SHA256(Nonce):
7c07875c 75e0021c 6f58cbd2 052675e3
2690107a 1f618e40 34b79efc d23d3a57
xor:
ad313301 346784bb 5760caf0 ff1d9a36
25139353 15c368eb 7ba80b78 c1dec638
xorend:
4c616469 65732061 6e642047 656e746c
656d656e 206f6620 74686520 636c6173
73206f66 20273939 3a204966 20492063
6f756c64 206f6666 65722079 6f75206f
6e6c7920 6f6e6520 74697020 666f7220
7468c811 55744012 f6de7b40 b985916e
f9444076 fd7362ac 1d871f88 691de1b7
b216
HMAC-SHA256(final):
28fdb5d4 d89e4860 11774606 5456a5df
924e8f4b 0f42bc77 a7415bd0 e0430628
XChaCha20
---------
SIV:
28fdb5d4 d89e4860 11774606 5456a5df
924e8f4b 0f42bc77
Block Counter:
00000000
XChaCha20 Subkey:
70c5831f 36e439c1 b90e375e 2b98c3da
ef42de2e c120e1d1 2706af76 45381de1
XChaCha20 Nonce:
00000000 924e8f4b 0f42bc77
Output
------
T || C:
000 28 fd b5 d4 d8 9e 48 60 11 77 46 06 54 56 a5 df (.....H`.wF.TV..
016 92 4e 8f 4b 0f 42 bc 77 a7 41 5b d0 e0 43 06 28 .N.K.B.w.A[..C.(
032 26 53 ea bf c6 ae cc 14 d0 46 aa 7e 3c 0b a2 8e &S.......F.~<...
048 fd 68 f3 d5 91 fc ac 6d b1 2e a2 3c f4 28 69 01 .h.....m...<.(i.
064 3b 2b e4 83 ce 08 8a f8 2d e4 29 3a 07 e2 40 07 ;+......-.):..@.
Madden Expires May 26, 2019 [Page 13]
Internet-Draft Generalised SIV November 2018
080 f3 7b d1 e3 78 81 a0 4b 11 5b 11 09 94 78 ae 34 .{..x..K.[...x.4
096 75 05 43 26 8e 57 0d 1f 27 f4 da fc 5a d8 71 97 u.C&.W..'...Z.q.
112 7f 08 b3 0b af df b5 3b 19 ef 34 2c d9 5c e7 91 .......;..4,.\..
128 5c b4 f6 79 db 64 0d 8e c4 8a 06 b6 f3 ef 50 8c \..y.d........P.
144 53 30 S0
Author's Address
Neil Madden
ForgeRock
Broad Quay House
Prince Street
Bristol BS1 4DJ
United Kingdom
Email: neil.madden@forgerock.com
Madden Expires May 26, 2019 [Page 14]