summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9588.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc9588.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc9588.txt')
-rw-r--r--doc/rfc/rfc9588.txt1714
1 files changed, 1714 insertions, 0 deletions
diff --git a/doc/rfc/rfc9588.txt b/doc/rfc/rfc9588.txt
new file mode 100644
index 0000000..a21cac7
--- /dev/null
+++ b/doc/rfc/rfc9588.txt
@@ -0,0 +1,1714 @@
+
+
+
+
+Internet Engineering Task Force (IETF) N. McCallum
+Request for Comments: 9588 S. Sorce
+Category: Standards Track R. Harwood
+ISSN: 2070-1721 Red Hat, Inc.
+ G. Hudson
+ MIT
+ August 2024
+
+
+ Kerberos Simple Password-Authenticated Key Exchange (SPAKE)
+ Pre-authentication
+
+Abstract
+
+ This document defines a new pre-authentication mechanism for the
+ Kerberos protocol. The mechanism uses a password-authenticated key
+ exchange (PAKE) to prevent brute-force password attacks, and it may
+ incorporate a second factor.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9588.
+
+Copyright Notice
+
+ Copyright (c) 2024 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 Revised BSD License text as described in Section 4.e of the
+ Trust Legal Provisions and are provided without warranty as described
+ in the Revised BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 1.1. Properties of PAKE
+ 1.2. PAKE Algorithm Selection
+ 1.3. PAKE and Two-Factor Authentication
+ 1.4. SPAKE Overview
+ 2. Document Conventions
+ 3. Prerequisites
+ 3.1. PA-ETYPE-INFO2
+ 3.2. Cookie Support
+ 3.3. More Pre-authentication Data Required
+ 4. SPAKE Pre-authentication Message Protocol
+ 4.1. First Pass
+ 4.2. Second Pass
+ 4.3. Third Pass
+ 4.4. Subsequent Passes
+ 4.5. Reply Key Strengthening
+ 4.6. Optimizations
+ 5. SPAKE Parameters and Conversions
+ 6. Transcript Hash
+ 7. Key Derivation
+ 8. Second-Factor Types
+ 9. Hint for Authentication Sets
+ 10. Security Considerations
+ 10.1. SPAKE Computations
+ 10.2. Unauthenticated Plaintext
+ 10.3. Side Channels
+ 10.4. KDC State
+ 10.5. Dictionary Attacks
+ 10.6. Brute-Force Attacks
+ 10.7. Denial-of-Service Attacks
+ 10.8. Reflection Attacks
+ 10.9. Reply Key Encryption Type
+ 10.10. KDC Authentication
+ 11. Assigned Constants
+ 12. IANA Considerations
+ 12.1. Kerberos Second-Factor Types
+ 12.1.1. Registration Template
+ 12.1.2. Initial Registry Contents
+ 12.2. Kerberos SPAKE Groups
+ 12.2.1. Registration Template
+ 12.2.2. Initial Registry Contents
+ 13. References
+ 13.1. Normative References
+ 13.2. Informative References
+ Appendix A. ASN.1 Module
+ Appendix B. SPAKE M and N Value Selection
+ Appendix C. Test Vectors
+ Acknowledgements
+ Authors' Addresses
+
+1. Introduction
+
+ The Kerberos protocol [RFC4120] commonly uses password-derived long-
+ term keys to secure the initial authentication exchange between a
+ Kerberos client and a Key Distribution Center (KDC). As noted in
+ Section 10 of [RFC4120], an attacker can perform an offline
+ dictionary attack against the password; this is performed either by
+ initiating an authentication exchange to a principal for which the
+ KDC does not require pre-authentication or after eavesdropping on a
+ legitimate authentication exchange that uses encrypted timestamp pre-
+ authentication (Section 5.2.7.2 of [RFC4120]).
+
+ This document defines a pre-authentication mechanism that
+ authenticates using long-term keys but is resistant to offline
+ dictionary attacks. The mechanism additionally enables the use of
+ second-factor authentication without the need for a separately
+ established secure channel, by leveraging the trust relationship
+ established by the shared long-term key.
+
+1.1. Properties of PAKE
+
+ Password-authenticated key exchange (PAKE) algorithms [RFC8125]
+ provide several properties that defend against offline dictionary
+ attacks and make them ideal for use in a Kerberos pre-authentication
+ mechanism.
+
+ 1. Each side of the exchange contributes entropy.
+
+ 2. Passive attackers cannot determine the shared key.
+
+ 3. Active attackers cannot perform a machine-in-the-middle attack.
+
+ These properties of PAKE allow us to establish high-entropy
+ encryption keys resistant to offline brute-force attacks, even when
+ the passwords used are weak (low entropy).
+
+1.2. PAKE Algorithm Selection
+
+ The SPAKE algorithm (defined in [SPAKE]) works by encrypting the
+ public keys of a Diffie-Hellman (DH) key exchange with a shared
+ secret. SPAKE is selected for this pre-authentication mechanism for
+ the following properties:
+
+ 1. SPAKE's encryption method ensures that the result is a member of
+ the underlying group, so it can be used with elliptic curve
+ cryptography, which is believed to provide equivalent security
+ levels to finite-field DH key exchange at much smaller key sizes.
+
+ 2. It can compute the shared key after just one message from each
+ party, minimizing the need for additional round trips and state.
+
+ 3. It requires a small number of group operations; therefore, it can
+ be implemented simply and efficiently.
+
+1.3. PAKE and Two-Factor Authentication
+
+ Using PAKE in a pre-authentication mechanism also has another benefit
+ when used as a component of two-factor authentication (2FA). 2FA
+ methods often require the secure transfer of plaintext material to
+ the KDC for verification. This includes one-time passwords,
+ challenge/response signatures, and biometric data. Encrypting this
+ data using the long-term secret results in packets that are
+ vulnerable to offline brute-force attacks on the password, using
+ either an authentication tag or statistical properties of the 2FA
+ credentials to determine whether a password guess is correct.
+
+ In "One-Time Password (OTP) Pre-Authentication" [RFC6560], this
+ problem is mitigated using flexible authentication secure tunneling
+ (FAST) (Section 5.4 of [RFC6113]), which uses a secondary trust
+ relationship to create a secure encryption channel within which pre-
+ authentication data can be sent. However, the requirement for a
+ secondary trust relationship has proven to be cumbersome to deploy
+ and often introduces third parties into the trust chain (such as
+ certification authorities). These requirements make it difficult to
+ enable FAST without manual configuration of client hosts. In
+ contrast, SPAKE pre-authentication, can create a secure encryption
+ channel implicitly, using the key exchange to negotiate a high-
+ entropy encryption key. This key can then be used to securely
+ encrypt 2FA plaintext data without the need for a secondary trust
+ relationship. Further, if the second-factor verifiers are sent at
+ the same time as the first-factor verifier, and the KDC is careful to
+ prevent timing attacks, then an online brute-force attack cannot be
+ used to attack the factors separately.
+
+ For these reasons, this document departs from the advice given in
+ Section 1 of [RFC6113], which states: "Mechanism designers should
+ design FAST factors, instead of new pre-authentication mechanisms
+ outside of FAST." However, the SPAKE pre-authentication mechanism
+ does not intend to replace FAST and may be used with it to further
+ conceal the metadata of the Kerberos messages.
+
+1.4. SPAKE Overview
+
+ The SPAKE algorithm can be broadly described in a series of four
+ steps:
+
+ 1. Calculation and exchange of the public key
+
+ 2. Calculation of the shared secret (K)
+
+ 3. Derivation of an encryption key (K')
+
+ 4. Verification of the derived encryption key (K')
+
+ In this mechanism, key verification happens implicitly by a
+ successful decryption of the 2FA data or of a placeholder value when
+ no second factor is required. This mechanism uses a tailored method
+ of deriving encryption keys from the calculated shared secret K, for
+ several reasons:
+
+ * to fit within the framework of [RFC3961],
+
+ * to ensure negotiation integrity using a transcript hash,
+
+ * to derive different keys for each use, and
+
+ * to bind the KDC-REQ-BODY to the pre-authentication exchange.
+
+2. Document Conventions
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+ This document refers to numerous terms and protocol messages defined
+ in [RFC4120].
+
+ The terms "encryption type", "key generation seed length", and
+ "random-to-key" are defined in [RFC3961].
+
+ The terms "FAST", "PA-FX-COOKIE", "KDC_ERR_PREAUTH_EXPIRED",
+ "KDC_ERR_MORE_PREAUTH_DATA_REQUIRED", "KDC_ERR_PREAUTH_FAILED", "pre-
+ authentication facility", and "authentication set" are defined in
+ [RFC6113].
+
+ [SPAKE] defines SPAKE as a family of two key-exchange algorithms
+ differing only in derivation of the final key. This mechanism uses a
+ derivation similar to the second algorithm (SPAKE2). For simplicity,
+ this document refers to the algorithm as "SPAKE".
+
+ The terms "Abstract Syntax Notation One (ASN.1)" and "Distinguished
+ Encoding Rules (DER)" are defined in [ITU-T.X680.2021] and
+ [ITU-T.X690.2021], respectively.
+
+ When discussing operations within algebraic groups, this document
+ uses additive notation (as described in Section 2.2 of [RFC6090]).
+ Group elements are denoted with uppercase letters, while scalar
+ multiplier values are denoted with lowercase letters.
+
+3. Prerequisites
+
+3.1. PA-ETYPE-INFO2
+
+ This mechanism requires the initial KDC pre-authentication state to
+ contain a singular reply key. Therefore, a KDC that offers SPAKE
+ pre-authentication as a stand-alone mechanism MUST supply a PA-ETYPE-
+ INFO2 value containing a single ETYPE-INFO2-ENTRY, following the
+ guidance in Section 2.1 of [RFC6113]. PA-ETYPE-INFO2 is specified in
+ Section 5.2.7.5 of [RFC4120].
+
+3.2. Cookie Support
+
+ KDCs that implement SPAKE pre-authentication MUST have some secure
+ mechanism for retaining state between authentication service requests
+ (AS-REQs). For stateless KDC implementations, this method will most
+ commonly be an encrypted PA-FX-COOKIE. Clients that implement SPAKE
+ pre-authentication MUST support PA-FX-COOKIE, as described in
+ Section 5.2 of [RFC6113].
+
+3.3. More Pre-authentication Data Required
+
+ Both KDCs and clients that implement SPAKE pre-authentication MUST
+ support the use of KDC_ERR_MORE_PREAUTH_DATA_REQUIRED, as described
+ in Section 5.2 of [RFC6113].
+
+4. SPAKE Pre-authentication Message Protocol
+
+ This mechanism uses the reply key and provides the client
+ authentication and strengthening reply key pre-authentication
+ facilities (Section 3 of [RFC6113]). When the mechanism completes
+ successfully, the client will have proved knowledge of the original
+ reply key and possibly a second factor, and the reply key will be
+ strengthened to a more uniform distribution based on the PAKE
+ exchange. This mechanism also ensures the integrity of the KDC-REQ-
+ BODY contents. This mechanism can be used in an authentication set;
+ no pa-hint value is required or defined.
+
+ This mechanism negotiates a choice of group for the SPAKE algorithm.
+ Groups are defined in the "Kerberos SPAKE Groups" registry created by
+ this document (see Section 12.2). Each group definition specifies an
+ associated hash function, which will be used for transcript
+ protection and key derivation. Clients and KDCs MUST implement the
+ edwards25519 group, but they MAY choose not to offer or accept it by
+ default.
+
+ The subsections that follow will describe the flow of messages when
+ performing SPAKE pre-authentication. We will begin by explaining the
+ most verbose version of the protocol, which all implementations MUST
+ support. Then, we will describe several optional optimizations to
+ reduce round trips.
+
+ Mechanism messages are communicated using PA-DATA elements within the
+ padata field of KDC-REQ messages or within the METHOD-DATA in the
+ e-data field of KRB-ERROR messages. All PA-DATA elements for this
+ mechanism MUST use the following padata-type:
+
+ PA-SPAKE 151
+
+ The padata-value for all PA-SPAKE PA-DATA values MUST be empty or
+ contain a DER encoding for the ASN.1 type PA-SPAKE.
+
+ PA-SPAKE ::= CHOICE {
+ support [0] SPAKESupport,
+ challenge [1] SPAKEChallenge,
+ response [2] SPAKEResponse,
+ encdata [3] EncryptedData,
+ ...
+ }
+
+4.1. First Pass
+
+ The SPAKE pre-authentication exchange begins when the client sends an
+ initial authentication service request (AS-REQ) without pre-
+ authentication data. Upon receipt of this AS-REQ, a KDC that
+ requires pre-authentication and supports SPAKE SHOULD (unless
+ configuration indicates otherwise) reply with a
+ KDC_ERR_PREAUTH_REQUIRED error, with METHOD-DATA containing an empty
+ PA-SPAKE PA-DATA element (possibly in addition to other PA-DATA
+ elements). This message indicates to the client that the KDC
+ supports SPAKE pre-authentication.
+
+4.2. Second Pass
+
+ Once the client knows that the KDC supports SPAKE pre-authentication
+ and the client wants to use it, the client will generate a new AS-REQ
+ message containing a PA-SPAKE PA-DATA element using the support
+ choice. This message indicates to the KDC which groups the client
+ prefers for the SPAKE operation. The group numbers are defined in
+ the "Kerberos SPAKE Groups" registry (see Section 12.2). The group's
+ sequence is ordered from the most preferred group to the least
+ preferred group.
+
+ SPAKESupport ::= SEQUENCE {
+ groups [0] SEQUENCE (SIZE(1..MAX)) OF Int32,
+ ...
+ }
+
+ Upon receipt of the support message, the KDC will select a group.
+ The KDC SHOULD choose a group from the groups provided by the support
+ message. However, if the support message does not contain any group
+ that is supported by the KDC, the KDC MAY select another group in
+ hopes that the client might support it. Otherwise, the KDC MUST
+ respond with a KDC_ERR_PREAUTH_FAILED error.
+
+ The group selection determines the group order, which shall be a
+ large prime p multiplied by a small cofactor h (possibly 1), a
+ generator P of a prime-order subgroup, and two masking points M and
+ N. The KDC selects a random integer x in the range 0 <= x < h*p,
+ which MUST be divisible by h. The KDC computes a public key
+ T=x*P+w*M, where w is computed from the initial reply key according
+ to Section 5.
+
+ The KDC will reply to the client with a
+ KDC_ERR_MORE_PREAUTH_DATA_REQUIRED error containing a PA-SPAKE PA-
+ DATA element using the challenge choice.
+
+ SPAKEChallenge ::= SEQUENCE {
+ group [0] Int32,
+ pubkey [1] OCTET STRING,
+ factors [2] SEQUENCE (SIZE(1..MAX)) OF SPAKESecondFactor,
+ ...
+ }
+
+ The group field indicates the KDC-selected group used for all SPAKE
+ calculations as defined in the "Kerberos SPAKE Groups" registry (see
+ Section 12.2).
+
+ The pubkey field indicates the KDC's public key T, serialized
+ according to Section 5.
+
+ The factors field contains an unordered list of second factors, which
+ can be used to complete the authentication. Each second factor is
+ represented by a SPAKESecondFactor.
+
+ SPAKESecondFactor ::= SEQUENCE {
+ type [0] Int32,
+ data [1] OCTET STRING OPTIONAL
+ }
+
+ The type field is a unique integer that identifies the second-factor
+ type. The factors field of SPAKEChallenge MUST NOT contain more than
+ one SPAKESecondFactor with the same type value.
+
+ The data field contains optional challenge data. The contents in
+ this field will depend upon the second-factor type chosen. Note that
+ this challenge is initially transmitted as unauthenticated plaintext;
+ see Section 10.2.
+
+ The client and KDC will each initialize a transcript hash (Section 6)
+ using the hash function associated with the chosen group and update
+ it with the concatenation of the DER-encoded PA-SPAKE messages sent
+ by the client and the KDC.
+
+4.3. Third Pass
+
+ Upon receipt of the challenge message, the client observes which
+ group was selected by the KDC and deserializes the KDC's public key
+ T. The client selects a random integer y in the range 0 <= x < h*p,
+ which MUST be divisible by h. The client computes a public key
+ S=y*P+w*N, where w is computed from the initial reply key according
+ to Section 5. The client computes a shared group element
+ K=y*(T-w*M).
+
+ The client will then choose one of the second-factor types listed in
+ the factors field of the challenge message and gather whatever data
+ is required for the chosen second-factor type, possibly using the
+ associated challenge data. Finally, the client will send an AS-REQ
+ containing a PA-SPAKE PA-DATA element using the response choice.
+
+ SPAKEResponse ::= SEQUENCE {
+ pubkey [0] OCTET STRING,
+ factor [1] EncryptedData, -- SPAKESecondFactor
+ ...
+ }
+
+ The client and KDC will update the transcript hash with the pubkey
+ value and use the resulting hash for all encryption key derivations.
+
+ The pubkey field indicates the client's public key S, serialized
+ according to Section 5.
+
+ The factor field indicates the client's chosen second-factor data.
+ The key for this field is K'[1] (specified in Section 7). The kvno
+ field of the EncryptedData sequence is omitted. The key usage number
+ for the encryption is KEY_USAGE_SPAKE. The plaintext inside the
+ EncryptedData is an encoding of the SPAKESecondFactor. Once decoded,
+ the SPAKESecondFactor provides the type of the second factor and any
+ optional data used. The contents of the data field will depend on
+ the second-factor type chosen. The client MUST NOT send a response
+ containing a second-factor type that was not listed in the factors
+ field of the challenge message.
+
+ When the KDC receives the response message from the client, it
+ deserializes the client's public key S, and computes the shared group
+ element K=x*(S-w*N). The KDC derives K'[1] and decrypts the factors
+ field. If decryption is successful, the first factor is successfully
+ validated. The KDC then validates the second factor. If either
+ factor fails to validate, the KDC MUST respond with a
+ KDC_ERR_PREAUTH_FAILED error.
+
+ If validation of the second factor requires further round trips, the
+ KDC MUST reply to the client with a
+ KDC_ERR_MORE_PREAUTH_DATA_REQUIRED error containing a PA-SPAKE PA-
+ DATA element using the encdata choice. The kvno field of the
+ EncryptedData sequence is omitted. The key for the EncryptedData
+ value is K'[2] (specified in Section 7), and the key usage number is
+ KEY_USAGE_SPAKE. The plaintext of this message contains a DER-
+ encoded SPAKESecondFactor message. As before, the type field of this
+ message will contain the second-factor type and the data field will,
+ optionally, contain data specific to the second-factor type.
+
+4.4. Subsequent Passes
+
+ Any number of additional round trips may occur using the encdata
+ choice. The contents of the plaintexts are specific to the second-
+ factor type. If a client receives a PA-SPAKE PA-DATA element using
+ the encdata choice from the KDC, it MUST reply with a subsequent AS-
+ REQ with a PA-SPAKE PA-DATA element using the encdata choice or abort
+ the AS exchange.
+
+ The key for client-originated encdata messages in subsequent passes
+ is K'[3] (specified in Section 7) for the first subsequent pass,
+ K'[5] for the second, and so on. The key for KDC-originated encdata
+ messages is K'[4] for the first subsequent pass, K'[6] for the
+ second, and so on.
+
+4.5. Reply Key Strengthening
+
+ When the KDC has successfully validated both factors, the reply key
+ is strengthened and the mechanism is complete. The strengthening of
+ the reply key is accomplished by the client and KDC replacing it with
+ K'[0] (as specified in Section 7). The KDC then replies with a KDC-
+ REP message or continues on to the next mechanism in the
+ authentication set. There is no final PA-SPAKE PA-DATA message from
+ the KDC to the client.
+
+ Reply key strengthening occurs only once: at the end of the exchange.
+ The client and KDC MUST use the initial reply key as the base key for
+ all K'[n] derivations.
+
+4.6. Optimizations
+
+ The full protocol has two possible optimizations.
+
+ First, the KDC MAY reply to the initial AS-REQ (containing no pre-
+ authentication data) with a PA-SPAKE PA-DATA element using the
+ challenge choice instead of an empty padata-value. In this case, the
+ KDC optimistically selects a group that the client may not support.
+ If the group chosen by the challenge message is supported by the
+ client, the client MUST skip to the third pass by issuing an AS-REQ
+ with a PA-SPAKE message using the response choice. In this case, no
+ SPAKESupport message is sent by the client, so the first update to
+ the transcript hash contains only the KDC's optimistic challenge. If
+ the KDC's chosen group is not supported by the client, the client
+ MUST continue to the second pass. In this case, both the client and
+ KDC MUST reinitialize the transcript hash for the client's support
+ message. Clients MUST support this optimization.
+
+ Second, clients MAY skip the first pass and send an AS-REQ with a PA-
+ SPAKE PA-DATA element using the support choice. If the KDC accepts
+ the support message and generates a challenge, it MUST include a PA-
+ ETYPE-INFO2 value within the METHOD-DATA of the
+ KDC_ERR_MORE_PREAUTH_DATA_REQUIRED error response, as the client may
+ not otherwise be able to compute the initial reply key. If the KDC
+ cannot continue with SPAKE (either because the initial reply key type
+ is incompatible with SPAKE or because it does not support any of the
+ client's groups) but can offer other pre-authentication mechanisms,
+ the KDC MUST respond with a KDC_ERR_PREAUTH_FAILED error containing
+ METHOD-DATA for the available mechanisms. A client supporting this
+ optimization MUST continue after a KDC_ERR_PREAUTH_FAILED error as
+ described in Section 2 of [RFC6113]. KDCs MUST support this
+ optimization.
+
+5. SPAKE Parameters and Conversions
+
+ Group elements are converted to and from octet strings using the
+ serialization method defined in the "Kerberos SPAKE Groups" registry
+ (see Section 12.2).
+
+ The SPAKE algorithm requires constants M and N for each group. These
+ constants are defined in the "Kerberos SPAKE Groups" registry (see
+ Section 12.2).
+
+ The SPAKE algorithm requires a shared secret input w to be used as a
+ scalar multiplier. This value MUST be produced from the initial
+ reply key as follows:
+
+ 1. Determine the length of the multiplier octet string as defined in
+ the "Kerberos SPAKE Groups" registry (see Section 12.2).
+
+ 2. Compose a pepper string by concatenating the string "SPAKEsecret"
+ and the group number as a big-endian four-byte two's complement
+ binary number.
+
+ 3. Produce an octet string of the required length using PRF+(K,
+ pepper), where K is the initial reply key and PRF+ is as defined
+ in Section 5.1 of [RFC6113].
+
+ 4. Convert the octet string to a multiplier scalar using the
+ multiplier conversion method defined in the "Kerberos SPAKE
+ Groups" registry (see Section 12.2).
+
+ The KDC chooses a secret scalar value x and the client chooses a
+ secret scalar value y. As required by the SPAKE algorithm, these
+ values are chosen randomly and uniformly. The KDC and client MUST
+ NOT reuse x or y values for authentications involving different
+ initial reply keys (see Section 10.4).
+
+6. Transcript Hash
+
+ The transcript hash is an octet string of length equal to the output
+ length of the hash function associated with the selected group. All
+ bits are set to zero in the initial value.
+
+ When the transcript hash is updated with an octet string input, the
+ new value is the hash function computed over the concatenation of the
+ old value and the input.
+
+ In the normal message flow or with the second optimization described
+ in Section 4.6, the transcript hash is:
+
+ 1. updated with the concatenation of the client's support message
+ and the KDC's challenge, then
+
+ 2. updated a second time with the client's pubkey value.
+
+ Therefore, it incorporates the client's supported groups, the KDC's
+ chosen group, the KDC's initial second-factor messages, and the
+ client and KDC public values. Once the transcript hash is finalized,
+ it is used without change for all key derivations (Section 7). In
+ particular, encrypted second-factor messages are not included in the
+ transcript hash.
+
+ If the first optimization described in Section 4.6 is used
+ successfully, the transcript hash is first updated with the KDC's
+ challenge message and updated a second time with the client's pubkey
+ value.
+
+ If the first optimization is used unsuccessfully (i.e., the client
+ does not accept the KDC's selected group), the transcript hash is
+ computed as in the normal message flow, without including the KDC's
+ optimistic challenge.
+
+7. Key Derivation
+
+ Implementations MUST NOT use the shared group element (denoted by K)
+ directly for any cryptographic operation. Instead, the SPAKE result
+ is used to derive keys K'[n] (defined in this section).
+
+ First, compute the hash function associated with the selected group
+ over the concatenation of the following values:
+
+ * The fixed string "SPAKEkey".
+
+ * The group number as a big-endian four-byte two's complement binary
+ number.
+
+ * The encryption type of the initial reply key as a big-endian four-
+ byte two's complement binary number.
+
+ * The PRF+ output used to compute the initial secret input w (as
+ specified in Section 5).
+
+ * The SPAKE result K, converted to an octet string (as specified in
+ Section 5).
+
+ * The transcript hash.
+
+ * The KDC-REQ-BODY encoding for the request being sent or responded
+ to. Within a FAST channel, the inner KDC-REQ-BODY encoding MUST
+ be used.
+
+ * The value n as a big-endian, four-byte, and unsigned binary
+ number.
+
+ * A single-byte block counter with the initial value 0x01.
+
+ If the hash output is too small for the encryption type's key
+ generation seed length, the block counter value is incremented and
+ the hash function is recomputed to produce as many blocks as are
+ required. The result is truncated to the key generation seed length,
+ and the random-to-key function is used to produce an intermediate key
+ with the same encryption type as the initial reply key.
+
+ The key K'[n] has the same encryption type as the initial reply key,
+ and has the value KRB-FX-CF2(initial-reply-key, intermediate-key,
+ "SPAKE", "keyderiv"), where KRB-FX-CF2 is defined in Section 5.1 of
+ [RFC6113].
+
+8. Second-Factor Types
+
+ This document defines one second-factor type:
+
+ SF-NONE 1
+
+ This second-factor type indicates that no second factor is used.
+ Whenever a SPAKESecondFactor is used with SF-NONE, the data field
+ MUST be omitted. The SF-NONE second factor always successfully
+ validates.
+
+9. Hint for Authentication Sets
+
+ If a KDC offers SPAKE pre-authentication as part of an authentication
+ set (Section 5.3 of [RFC6113]), it SHOULD provide a pa-hint value
+ containing the DER encoding of the ASN.1 type PA-SPAKE-HINT. This
+ helps the client determine whether SPAKE pre-authentication is likely
+ to succeed if the authentication set is chosen.
+
+ PA-SPAKE-HINT ::= SEQUENCE {
+ groups [0] SEQUENCE (SIZE(1..MAX)) OF Int32,
+ factors [1] SEQUENCE (SIZE(1..MAX)) OF SPAKESecondFactor
+ }
+
+ The groups field indicates the KDC's supported groups. The factors
+ field indicates the KDC's supported second factors. The KDC MAY omit
+ the data field of values in the factors list.
+
+ A KDC MUST NOT include a PA-SPAKE-HINT message directly in a pa-value
+ field; hints must only be provided within authentication sets. A KDC
+ SHOULD include a hint if SPAKE pre-authentication is offered as the
+ second or later element of an authentication set.
+
+ The PA-SPAKE-HINT message is not part of the transcript, and it does
+ not replace any part of the SPAKE message flow.
+
+10. Security Considerations
+
+10.1. SPAKE Computations
+
+ The deserialized public keys S and T MUST be verified to be elements
+ of the group to prevent invalid curve attacks. It is not necessary
+ to verify that they are members of the prime-order subgroup; the
+ computation of K by both parties involves a multiplication by the
+ cofactor h.
+
+ The aforementioned cofactor multiplication is accomplished by
+ choosing private scalars x and y, which are divisible by the
+ cofactor. If the client or KDC chooses a scalar that might not be
+ divisible by the cofactor, an attacker might be able to coerce values
+ of K that are not members of the prime-order subgroup and deduce a
+ limited amount of information about w from the order of K.
+
+ The scalars x and y MUST be chosen uniformly. They MUST NOT be
+ reused for different initial reply keys. If an x or y value is
+ reused for pre-authentications involving two different initial reply
+ keys, an attacker who observes both authentications and knows one of
+ the initial reply keys can conduct an offline dictionary attack to
+ recover the other one.
+
+ The M and N values for a group MUST NOT have known discrete logs. An
+ attacker who knows the discrete log of M or N can perform an offline
+ dictionary attack on passwords. Therefore, it is important to
+ demonstrate that the M and N values for each group were computed
+ without multiplying a known value by the generator P.
+
+10.2. Unauthenticated Plaintext
+
+ This mechanism includes unauthenticated plaintext in the support and
+ challenge messages. Beginning with the third pass, the integrity of
+ this plaintext is ensured by incorporating the transcript hash into
+ the derivation of the final reply key and second-factor encryption
+ keys. Downgrade attacks on support and challenge messages will
+ result in the client and KDC deriving different reply keys and
+ EncryptedData keys. The KDC-REQ-BODY contents are also incorporated
+ into key derivation, ensuring their integrity. The unauthenticated
+ plaintext in the KDC-REP message is not protected by this mechanism.
+
+ Unless FAST is used, the factors field of a challenge message is not
+ integrity protected until the response is verified. Second-factor
+ types MUST account for this when specifying the semantics of the data
+ field. In particular, second-factor data in the challenge should not
+ be included in user prompts: it could be modified by an attacker to
+ contain misleading or offensive information.
+
+ Unless FAST is used, the factors field of a challenge message is
+ visible to an attacker, who can use it to determine whether a second
+ factor is required for the client.
+
+ Subsequent factor data, including the data in the response, are
+ encrypted in a derivative of the shared secret K. Therefore, it is
+ not possible to exploit the untrustworthiness of the challenge to
+ turn the client into an encryption or signing oracle for the second-
+ factor credentials, unless the attacker knows the client's long-term
+ key.
+
+ Unless FAST is used, any PA-SPAKE-HINT messages are unauthenticated
+ and are not protected by the transcript hash if they are included
+ when SPAKE is advertised in authentication sets. Since hints do not
+ replace any part of the message flow, manipulation of hint messages
+ can only affect the client's decision to use or not use an
+ authentication set, which could more easily be accomplished by
+ removing authentication sets entirely.
+
+10.3. Side Channels
+
+ An implementation of the SPAKE pre-authentication mechanism can have
+ the property of indistinguishability, meaning that an attacker who
+ guesses a long-term key and a second-factor value cannot determine
+ whether one of the factors was correct unless both are correct.
+ Indistinguishability is only maintained if the second factor can be
+ validated solely based on the data in the response; the use of
+ additional round trips will reveal to the attacker whether the long-
+ term key is correct. Indistinguishability also requires that there
+ are no side channels. When the KDC processes a response message,
+ whether or not it decrypts the factor field, it must reply with the
+ same error fields, take the same amount of time, and make the same
+ observable communications to other servers.
+
+ Both the size of the EncryptedData and the number of EncryptedData
+ messages used for second-factor data (including the factor field of
+ the SPAKEResponse message and messages using the encdata PA-SPAKE
+ choice) may reveal information about the second factor used in an
+ authentication. Care should be taken to keep second-factor messages
+ as small and as few as possible.
+
+ Any side channels in the creation of the shared secret input w, or in
+ the multiplications wM and wN, could allow an attacker to recover the
+ client long-term key. Implementations MUST take care to avoid side
+ channels, particularly timing channels. Generation of the secret
+ scalar values x and y need not take constant time, but the amount of
+ time taken MUST NOT provide information about the resulting value.
+
+ The conversion of the scalar multiplier for the SPAKE w parameter may
+ produce a multiplier that is larger than the order of the group.
+ Some group implementations may be unable to handle such a multiplier.
+ Others may silently accept such a multiplier but proceed to perform
+ multiplication that is not constant time. This is only a minor risk
+ in most commonly used groups, but it is a more serious risk for P-521
+ due to the extra seven high bits in the input octet string. A common
+ solution to this problem is achieved by reducing the multiplier
+ modulo the group order, taking care to ensure constant time
+ operation.
+
+10.4. KDC State
+
+ A stateless KDC implementation generally must use a PA-FX-COOKIE
+ value to remember its private scalar value x and the transcript hash.
+ The KDC MUST maintain confidentiality and integrity of the cookie
+ value, perhaps by encrypting it in a key known only to the realm's
+ KDCs. Cookie values may be replayed by attackers, perhaps by
+ splicing them into different SPAKE exchanges. The KDC SHOULD limit
+ the time window of replays using a timestamp, and it SHOULD prevent
+ cookie values from being applied to other pre-authentication
+ mechanisms or other client principals. Within the validity period of
+ a cookie, an attacker can replay the final message of a pre-
+ authentication exchange to any of the realm's KDCs and make it appear
+ that the client has authenticated.
+
+ The SPAKE pre-authentication mechanism is not designed to provide
+ forward secrecy. Nevertheless, some measure of forward secrecy may
+ result depending on implementation choices. A passive attacker who
+ determines the client long-term key after the exchange generally will
+ not be able to recover the ticket session key; however, an attacker
+ who also determines the PA-FX-COOKIE encryption key (if the KDC uses
+ an encrypted cookie) will be able to recover the ticket session key.
+ If the KDC or client retains the x or y value for reuse with the same
+ client long-term key, an attacker who recovers the x or y value and
+ the long-term key will be able to recover the ticket session key.
+
+10.5. Dictionary Attacks
+
+ Although the SPAKE pre-authentication mechanism is designed to
+ prevent an offline dictionary attack by an active attacker posing as
+ the KDC, such an attacker can attempt to downgrade the client to the
+ encrypted timestamp pre-authentication mechanism. Client
+ implementations SHOULD provide a configuration option to enable or
+ disable the encrypted timestamp mechanism on a per-realm basis to
+ mitigate this attack.
+
+ If the user enters the wrong password, the client might fall back to
+ the encrypted timestamp mechanism after receiving a
+ KDC_ERR_PREAUTH_FAILED error from the KDC, if the encrypted timestamp
+ mechanism is offered by the KDC and not disabled by client
+ configuration. This fallback will enable a passive attacker to mount
+ an offline dictionary attack against the incorrect password, which
+ may be similar to the correct password. Client implementations
+ SHOULD assume that the encrypted timestamp and encrypted challenge
+ mechanisms are unlikely to succeed if SPAKE pre-authentication fails
+ in the second pass and SF-NONE was used.
+
+ Like any other pre-authentication mechanism using the client long-
+ term key, the SPAKE pre-authentication mechanism does not prevent
+ online password guessing attacks. The KDC is made aware of
+ unsuccessful guesses and can apply facilities such as rate limiting
+ to mitigate the risk of online attacks.
+
+10.6. Brute-Force Attacks
+
+ The selected group's resistance to offline brute-force attacks may
+ not correspond to the size of the reply key. For performance
+ reasons, a KDC MAY select a group whose brute-force work factor is
+ less than the reply key length. A passive attacker who solves the
+ group discrete logarithm problem after the exchange will be able to
+ conduct an offline attack against the client long-term key. Although
+ the use of password policies and costly, salted string-to-key
+ functions may increase the cost of such an attack, the resulting cost
+ will likely not be higher than the cost of solving the group discrete
+ logarithm.
+
+10.7. Denial-of-Service Attacks
+
+ Elliptic curve group operations are more computationally expensive
+ than secret-key operations. As a result, the use of this mechanism
+ may affect the KDC's performance under normal load and its resistance
+ to denial-of-service attacks.
+
+10.8. Reflection Attacks
+
+ The encdata choice of PA-SPAKE can be used in either direction; the
+ factor-specific plaintext does not necessarily indicate a direction.
+ However, each encdata message is encrypted using a derived key K'[n],
+ with client-originated messages using only odd values of n and KDC-
+ originated messages using only even values. Therefore, an attempted
+ reflection attack would result in a failed decryption.
+
+10.9. Reply Key Encryption Type
+
+ This mechanism does not upgrade the encryption type of the initial
+ reply key and relies on that encryption type for confidentiality,
+ integrity, and pseudorandom functions. If the client long-term key
+ uses a weak encryption type, an attacker might be able to subvert the
+ exchange, and the replaced reply key will also be of the same weak
+ encryption type.
+
+10.10. KDC Authentication
+
+ This mechanism does not directly provide the KDC Authentication pre-
+ authentication facility because it does not send a key confirmation
+ from the KDC to the client. When used as a stand-alone mechanism,
+ the preexisting KDC authentication provided by the KDC-REP enc-part
+ still applies.
+
+11. Assigned Constants
+
+ The following key usage values are assigned for this mechanism:
+
+ KEY_USAGE_SPAKE 65
+
+12. IANA Considerations
+
+ IANA has assigned the following number for PA-SPAKE in the "Pre-
+ authentication and Typed Data" registry:
+
+ +==========+=======+===========+
+ | Type | Value | Reference |
+ +==========+=======+===========+
+ | PA-SPAKE | 151 | RFC 9588 |
+ +----------+-------+-----------+
+
+ Table 1
+
+ This document establishes two registries (see Sections 12.1 and 12.2)
+ with the following procedure, in accordance with [RFC8126]:
+
+ Registry entries are to be evaluated using the Specification Required
+ method. All specifications must be published prior to entry
+ inclusion in the registry. Once published, they can be submitted
+ directly to the krb5-spake-review@ietf.org mailing list, where there
+ will be a three-week-long review period by designated experts.
+
+ The designated experts ensure that the specification is publicly
+ available. They may provide additional in-depth reviews, but their
+ approval should not be taken as endorsement of the specification.
+
+ Prior to the end of the review period, the designated experts must
+ approve or deny the request. This decision is conveyed to both IANA
+ and the submitter. Since the mailing list archives are not public,
+ it should include both a reasonably detailed explanation in the case
+ of a denial as well as whether the request can be resubmitted.
+
+ IANA must only accept registry updates from the designated experts
+ and should direct all requests for registration to the review mailing
+ list.
+
+12.1. Kerberos Second-Factor Types
+
+ This section specifies the "Kerberos Second-Factor Types" registry,
+ which records the number, name, and reference for each second-factor
+ protocol.
+
+12.1.1. Registration Template
+
+ ID Number: A value that uniquely identifies this entry. It is a
+ signed integer in the range -2147483648 to 2147483647, inclusive.
+ Positive values must be assigned only for algorithms specified in
+ accordance with these rules for use with Kerberos and related
+ protocols. Negative values should be used for private and
+ experimental algorithms only. Zero is reserved and must not be
+ assigned. Values should be assigned in increasing order.
+
+ Name: A brief, unique, human-readable name for this algorithm.
+
+ Reference: A URI or otherwise unique identifier for where the
+ details of this algorithm can be found. It should be as specific
+ as reasonably possible.
+
+12.1.2. Initial Registry Contents
+
+ ID Number: 0
+ Name: Reserved
+ Reference: RFC 9588
+
+ ID Number: 1
+ Name: SF-NONE
+ Reference: RFC 9588
+
+12.2. Kerberos SPAKE Groups
+
+ This section specifies the "Kerberos SPAKE Groups" registry, which
+ records the number, name, specification, serialization, multiplier
+ length, multiplier conversion, SPAKE M and N constants, and
+ associated hash function for each SPAKE Group.
+
+12.2.1. Registration Template
+
+ ID Number: A value that uniquely identifies this entry. It is a
+ signed integer in the range -2147483648 to 2147483647, inclusive.
+ Positive values must be assigned only for algorithms specified in
+ accordance with these rules for use with Kerberos and related
+ protocols. Negative values should be used for private and
+ experimental use only. Zero is reserved and must not be assigned.
+ Values should be assigned in increasing order.
+
+ Name: A brief, unique, human-readable name for this entry.
+
+ Specification: A reference to the definition of the group parameters
+ and operations.
+
+ Serialization: A reference to the definition of the method used to
+ serialize and deserialize group elements.
+
+ Multiplier Length: The length of the input octet string to
+ multiplication operations.
+
+ Multiplier Conversion: A reference to the definition of the method
+ used to convert an octet string to a multiplier scalar.
+
+ SPAKE M Constant: The serialized value of the SPAKE M constant in
+ hexadecimal notation.
+
+ SPAKE N Constant: The serialized value of the SPAKE N constant in
+ hexadecimal notation.
+
+ Hash Function: The group's associated hash function.
+
+12.2.2. Initial Registry Contents
+
+12.2.2.1. Edwards 25519
+
+ ID Number: 1
+ Name: edwards25519
+ Specification: Section 4.1 of [RFC7748] (edwards25519)
+ Serialization: Section 3.1 of [RFC8032]
+ Multiplier Length: 32
+ Multiplier Conversion: Section 3.1 of [RFC8032]
+ SPAKE M Constant:
+ d048032c6ea0b6d697ddc2e86bda85a33adac920f1bf18e1b0c6d166a5cecdaf
+ SPAKE N Constant:
+ d3bfb518f44f3430f29d0c92af503865a1ed3281dc69b35dd868ba85f886c4ab
+ Hash function: SHA-256 [RFC6234]
+
+12.2.2.2. P-256
+
+ ID Number: 2
+ Name: P-256
+ Specification: Section 2.4.2 of [SEC2]
+ Serialization: Section 2.3.3 of [SEC1] (compressed format)
+ Multiplier Length: 32
+ Multiplier Conversion: Section 2.3.8 of [SEC1]
+ SPAKE M Constant:
+ 02886e2f97ace46e55ba9dd7242579f2993b64e16ef3dcab95afd497333d8fa12f
+ SPAKE N Constant:
+ 03d8bbd6c639c62937b04d997f38c3770719c629d7014d49a24b4f98baa1292b49
+ Hash function: SHA-256 [RFC6234]
+
+12.2.2.3. P-384
+
+ ID Number: 3
+ Name: P-384
+ Specification: Section 2.5.1 of [SEC2]
+ Serialization: Section 2.3.3 of [SEC1] (compressed format)
+ Multiplier Length: 48
+ Multiplier Conversion: Section 2.3.8 of [SEC1]
+ SPAKE M Constant:
+ 030ff0895ae5ebf6187080a82d82b42e2765e3b2f8749c7e05eba366434b363d3d
+ c36f15314739074d2eb8613fceec2853
+ SPAKE N Constant:
+ 02c72cf2e390853a1c1c4ad816a62fd15824f56078918f43f922ca21518f9c543b
+ b252c5490214cf9aa3f0baab4b665c10
+ Hash function: SHA-384 [RFC6234]
+
+12.2.2.4. P-521
+
+ ID Number: 4
+ Name: P-521
+ Specification: Section 2.6.1 of [SEC2]
+ Serialization: Section 2.3.3 of [SEC1] (compressed format)
+ Multiplier Length: 48
+ Multiplier Conversion: Section 2.3.8 of [SEC1]
+ SPAKE M Constant:
+ 02003f06f38131b2ba2600791e82488e8d20ab889af753a41806c5db18d37d8560
+ 8cfae06b82e4a72cd744c719193562a653ea1f119eef9356907edc9b56979962d7
+ aa
+ SPAKE N Constant:
+ 0200c7924b9ec017f3094562894336a53c50167ba8c5963876880542bc669e494b
+ 2532d76c5b53dfb349fdf69154b9e0048c58a42e8ed04cef052a3bc349d95575cd
+ 25
+ Hash function: SHA-512 [RFC6234]
+
+13. References
+
+13.1. Normative References
+
+ [ITU-T.X680.2021]
+ ITU-T, "Information technology - Abstract Syntax Notation
+ One (ASN.1): Specification of basic notation", ITU-T
+ Recommendation X.680, ISO/IEC 8824-1:2021, February 2021.
+
+ [ITU-T.X690.2021]
+ ITU-T, "Information technology - ASN.1 encoding rules:
+ Specification of Basic Encoding Rules (BER), Canonical
+ Encoding Rules (CER) and Distinguished Encoding Rules
+ (DER)", ITU-T Recommendation X.690, ISO/IEC 8825-1:2021,
+ February 2021.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3961] Raeburn, K., "Encryption and Checksum Specifications for
+ Kerberos 5", RFC 3961, DOI 10.17487/RFC3961, February
+ 2005, <https://www.rfc-editor.org/info/rfc3961>.
+
+ [RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The
+ Kerberos Network Authentication Service (V5)", RFC 4120,
+ DOI 10.17487/RFC4120, July 2005,
+ <https://www.rfc-editor.org/info/rfc4120>.
+
+ [RFC6113] Hartman, S. and L. Zhu, "A Generalized Framework for
+ Kerberos Pre-Authentication", RFC 6113,
+ DOI 10.17487/RFC6113, April 2011,
+ <https://www.rfc-editor.org/info/rfc6113>.
+
+ [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>.
+
+ [RFC7748] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves
+ for Security", RFC 7748, DOI 10.17487/RFC7748, January
+ 2016, <https://www.rfc-editor.org/info/rfc7748>.
+
+ [RFC8032] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital
+ Signature Algorithm (EdDSA)", RFC 8032,
+ DOI 10.17487/RFC8032, January 2017,
+ <https://www.rfc-editor.org/info/rfc8032>.
+
+ [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
+ Writing an IANA Considerations Section in RFCs", BCP 26,
+ RFC 8126, DOI 10.17487/RFC8126, June 2017,
+ <https://www.rfc-editor.org/info/rfc8126>.
+
+ [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>.
+
+ [SEC1] Standards for Efficient Cryptography Group, "SEC 1:
+ Elliptic Curve Cryptography", May 2009.
+
+ [SEC2] Standards for Efficient Cryptography Group, "SEC 2:
+ Recommended Elliptic Curve Domain Parameters", January
+ 2010.
+
+13.2. Informative References
+
+ [RFC6090] McGrew, D., Igoe, K., and M. Salter, "Fundamental Elliptic
+ Curve Cryptography Algorithms", RFC 6090,
+ DOI 10.17487/RFC6090, February 2011,
+ <https://www.rfc-editor.org/info/rfc6090>.
+
+ [RFC6560] Richards, G., "One-Time Password (OTP) Pre-
+ Authentication", RFC 6560, DOI 10.17487/RFC6560, April
+ 2012, <https://www.rfc-editor.org/info/rfc6560>.
+
+ [RFC8125] Schmidt, J., "Requirements for Password-Authenticated Key
+ Agreement (PAKE) Schemes", RFC 8125, DOI 10.17487/RFC8125,
+ April 2017, <https://www.rfc-editor.org/info/rfc8125>.
+
+ [SPAKE] Abdalla, M. and D. Pointcheval, "Simple Password-Based
+ Encrypted Key Exchange Protocols", CT-RSA 2005, Lecture
+ Notes in Computer Science, Volume 3376, pages 191-208,
+ Springer, DOI 10.1007/978-3-540-30574-3_14, February 2005,
+ <https://doi.org/10.1007/978-3-540-30574-3_14>.
+
+Appendix A. ASN.1 Module
+
+ KerberosV5SPAKE {
+ iso(1) identified-organization(3) dod(6) internet(1)
+ security(5) kerberosV5(2) modules(4) spake(8)
+ } DEFINITIONS EXPLICIT TAGS ::= BEGIN
+
+ IMPORTS
+ EncryptedData, Int32
+ FROM KerberosV5Spec2 { iso(1) identified-organization(3)
+ dod(6) internet(1) security(5) kerberosV5(2) modules(4)
+ krb5spec2(2) };
+ -- as defined in RFC 4120.
+
+ SPAKESupport ::= SEQUENCE {
+ groups [0] SEQUENCE (SIZE(1..MAX)) OF Int32,
+ ...
+ }
+
+ SPAKEChallenge ::= SEQUENCE {
+ group [0] Int32,
+ pubkey [1] OCTET STRING,
+ factors [2] SEQUENCE (SIZE(1..MAX)) OF SPAKESecondFactor,
+ ...
+ }
+
+ SPAKESecondFactor ::= SEQUENCE {
+ type [0] Int32,
+ data [1] OCTET STRING OPTIONAL
+ }
+
+ SPAKEResponse ::= SEQUENCE {
+ pubkey [0] OCTET STRING,
+ factor [1] EncryptedData, -- SPAKESecondFactor
+ ...
+ }
+
+ PA-SPAKE ::= CHOICE {
+ support [0] SPAKESupport,
+ challenge [1] SPAKEChallenge,
+ response [2] SPAKEResponse,
+ encdata [3] EncryptedData,
+ ...
+ }
+
+ PA-SPAKE-HINT ::= SEQUENCE {
+ groups [0] SEQUENCE (SIZE(1..MAX)) OF Int32,
+ factors [1] SEQUENCE (SIZE(1..MAX)) OF SPAKESecondFactor
+ }
+
+ END
+
+Appendix B. SPAKE M and N Value Selection
+
+ The M and N values for the initial contents of the SPAKE group
+ registry were generated using the following Python snippet, which
+ assumes an elliptic curve implementation following the interface of
+ Edwards25519Point.stdbase() and Edwards448Point.stdbase() in
+ Appendix A of [RFC8032]:
+
+ def iterhash(seed, n):
+ h = seed
+ for i in range(n):
+ h = hashlib.sha256(h).digest()
+ return h
+
+ def bighash(seed, start, sz):
+ n = -(-sz // 32)
+ hashes = [iterhash(seed, i) for i in range(start, start + n)]
+ return b''.join(hashes)[:sz]
+
+ def canon_pointstr(ecname, s):
+ if ecname == 'edwards25519':
+ return s
+ elif ecname == 'edwards448':
+ return s[:-1] + bytes([s[-1] & 0x80])
+ else:
+ return bytes([(s[0] & 1) | 2]) + s[1:]
+
+ def gen_point(seed, ecname, ec):
+ for i in range(1, 1000):
+ hval = bighash(seed, i, len(ec.encode()))
+ pointstr = canon_pointstr(ecname, hval)
+ try:
+ p = ec.decode(pointstr)
+ if p != ec.zero_elem() and p * p.l() == ec.zero_elem():
+ return pointstr, i
+ except Exception:
+ pass
+
+ The initial seed strings are as follows:
+
+ * For group 1 M: edwards25519 point generation seed (M)
+
+ * For group 1 N: edwards25519 point generation seed (N)
+
+ * For group 2 M: 1.2.840.10045.3.1.7 point generation seed (M)
+
+ * For group 2 N: 1.2.840.10045.3.1.7 point generation seed (N)
+
+ * For group 3 M: 1.3.132.0.34 point generation seed (M)
+
+ * For group 3 N: 1.3.132.0.34 point generation seed (N)
+
+ * For group 4 M: 1.3.132.0.35 point generation seed (M)
+
+ * For group 4 N: 1.3.132.0.35 point generation seed (N)
+
+Appendix C. Test Vectors
+
+ For the following text vectors:
+
+ * The key is the string-to-key of "password" with the salt
+ "ATHENA.MIT.EDUraeburn" for the designated initial reply key
+ encryption type.
+
+ * x and y were chosen randomly within the order of the designated
+ group, then multiplied by the cofactor.
+
+ * The SPAKESupport message contains only the designated group's
+ number.
+
+ * The SPAKEChallenge message offers only the SF-NONE second-factor
+ type.
+
+ * The KDC-REQ-BODY message does not contain KDC options, but does
+ contain the client principal name "raeburn@ATHENA.MIT.EDU", the
+ server principal name "krbtgt/ATHENA.MIT.EDU", the realm
+ "ATHENA.MIT.EDU", the till field "19700101000000Z", the nonce
+ zero, and an etype list containing only the designated encryption
+ type.
+
+ des3-cbc-sha1 edwards25519
+ key: 850bb51358548cd05e86768c313e3bfef7511937dcf72c3e
+ w (PRF+ output): 686d84730cb8679ae95416c6567c6a63
+ f2c9cef124f7a3371ae81e11cad42a37
+ w (reduced multiplier): a1f1a25cbd8e3092667e2fddba8ecd24
+ f2c9cef124f7a3371ae81e11cad42a07
+ x: 201012d07bfd48ddfa33c4aac4fb1e229fb0d043cfe65ebfb14399091c71a723
+ y: 500b294797b8b042aca1bedc0f5931a4f52c537b3608b2d05cc8a2372f439f25
+ X: ec274df1920dc0f690c8741b794127233745444161016ef950ad75c51db58c3e
+ Y: d90974f1c42dac1cd4454561ac2d49af762f2ac87bf02436d461e7b661b43028
+ T: 18f511e750c97b592acd30db7d9e5fca660389102e6bf610c1bfbed4616c8362
+ S: 5d10705e0d1e43d5dbf30240ccfbde4a0230c70d4c79147ab0b317edad2f8ae7
+ K: 25bde0d875f0feb5755f45ba5e857889d916ecf7476f116aa31dc3e037ec4292
+ SPAKESupport: a0093007a0053003020101
+ SPAKEChallenge: a1363034a003020101a122042018f511e750c97b592acd30
+ db7d9e5fca660389102e6bf610c1bfbed4616c8362a20930
+ 073005a003020101
+ Transcript hash after challenge: 22bb2271e34d329d52073c70b1d11879
+ 73181f0bc7614266bb79ee80d3335175
+ Final transcript hash after pubkey: eaaa08807d0616026ff51c849efbf35b
+ a0ce3c5300e7d486da46351b13d4605b
+ KDC-REQ-BODY: 3075a00703050000000000a1143012a003020101a10b3009
+ 1b077261656275726ea2101b0e415448454e412e4d49542e
+ 454455a3233021a003020102a11a30181b066b7262746774
+ 1b0e415448454e412e4d49542e454455a511180f31393730
+ 303130313030303030305aa703020100a8053003020110
+ K'[0]: baf12fae7cd958cbf1a29bfbc71f89ce49e03e295d89dafd
+ K'[1]: 64f73dd9c41908206bcec1f719026b574f9d13463d7a2520
+ K'[2]: 0454520b086b152c455829e6baeff78a61dfe9e3d04a895d
+ K'[3]: 4a92260b25e3ef94c125d5c24c3e5bced5b37976e67f25c4
+
+ rc4-hmac edwards25519
+ key: 8846f7eaee8fb117ad06bdd830b7586c
+ w (PRF+ output): 7c86659d29cf2b2ea93bfe79c3cefb88
+ 50e82215b3ea6fcd896561d48048f49c
+ w (reduced multiplier): 2713c1583c53861520b849bfef0525cd
+ 4fe82215b3ea6fcd896561d48048f40c
+ x: c8a62e7b626f44cad807b2d695450697e020d230a738c5cd5691cc781dce8754
+ y: 18fe7c1512708c7fd06db270361f04593775bc634ceaf45347e5c11c38aae017
+ X: b0bcbbdd25aa031f4608d0442dd4924be7731d49c089a8301859d77343ffb567
+ Y: 7d1ab8aeda1a2b1f9eab8d11c0fda60b616005d0f37d1224c5f12b8649f579a5
+ T: 7db465f1c08c64983a19f560bce966fe5306c4b447f70a5bca14612a92da1d63
+ S: 38f8d4568090148ebc9fd17c241b4cc2769505a7ca6f3f7104417b72b5b5cf54
+ K: 03e75edd2cd7e7677642dd68736e91700953ac55dc650e3c2a1b3b4acdb800f8
+ SPAKESupport: a0093007a0053003020101
+ SPAKEChallenge: a1363034a003020101a12204207db465f1c08c64983a19f5
+ 60bce966fe5306c4b447f70a5bca14612a92da1d63a20930
+ 073005a003020101
+ Transcript hash after challenge: 3cde9ed9b562a09d816885b6c225f733
+ 6d9e2674bb4df903dfc894d963a2af42
+ Final transcript hash after pubkey: f4b208458017de6ef7f6a307d47d87db
+ 6c2af1d291b726860f68bc08bfef440a
+ KDC-REQ-BODY: 3075a00703050000000000a1143012a003020101a10b3009
+ 1b077261656275726ea2101b0e415448454e412e4d49542e
+ 454455a3233021a003020102a11a30181b066b7262746774
+ 1b0e415448454e412e4d49542e454455a511180f31393730
+ 303130313030303030305aa703020100a8053003020117
+ K'[0]: 770b720c82384cbb693e85411eedecba
+ K'[1]: 621deec88e2865837c4d3462bb50a1d5
+ K'[2]: 1cc8f6333b9fa3b42662fd9914fbd5bb
+ K'[3]: edb4032b7fc3806d5211a534dcbc390c
+
+ aes128-cts-hmac-sha1-96 edwards25519
+ key: fca822951813fb252154c883f5ee1cf4
+ w (PRF+ output): 0d591b197b667e083c2f5f98ac891d3c
+ 9f99e710e464e62f1fb7c9b67936f3eb
+ w (reduced multiplier): 17c2a9030afb7c37839bd4ae7fdfeb17
+ 9e99e710e464e62f1fb7c9b67936f30b
+ x: 50be049a5a570fa1459fb9f666e6fd80602e4e87790a0e567f12438a2c96c138
+ y: b877afe8612b406d96be85bd9f19d423e95be96c0e1e0b5824127195c3ed5917
+ X: e73a443c678913eb4a0cad5cbd3086cf82f65a5a91b611e01e949f5c52efd6dd
+ Y: 473c5b44ed2be9cb50afe1762b535b3930530489816ea6bd962622cccf39f6e8
+ T: 9e9311d985c1355e022d7c3c694ad8d6f7ad6d647b68a90b0fe46992818002da
+ S: fbe08f7f96cd5d4139e7c9eccb95e79b8ace41e270a60198c007df18525b628e
+ K: c2f7f99997c585e6b686ceb62db42f17cc70932def3bb4cf009e36f22ea5473d
+ SPAKESupport: a0093007a0053003020101
+ SPAKEChallenge: a1363034a003020101a12204209e9311d985c1355e022d7c
+ 3c694ad8d6f7ad6d647b68a90b0fe46992818002daa20930
+ 073005a003020101
+ Transcript hash after challenge: 4512310282c01b39dd9aebd0cc2a5e53
+ 2ed077a6c11d4c973c4593d525078797
+ Final transcript hash after pubkey: 951285f107c87f0169b9c918a1f51f60
+ cb1a75b9f8bb799a99f53d03add94b5f
+ KDC-REQ-BODY: 3075a00703050000000000a1143012a003020101a10b3009
+ 1b077261656275726ea2101b0e415448454e412e4d49542e
+ 454455a3233021a003020102a11a30181b066b7262746774
+ 1b0e415448454e412e4d49542e454455a511180f31393730
+ 303130313030303030305aa703020100a8053003020111
+ K'[0]: 548022d58a7c47eae8c49dccf6baa407
+ K'[1]: b2c9ba0e13fc8ab3a9d96b51b601cf4a
+ K'[2]: 69f0ee5fdb6c237e7fcd38d9f87df1bd
+ K'[3]: 78f91e2240b5ee528a5cc8d7cbebfba5
+
+ aes256-cts-hmac-sha1-96 edwards25519
+ key: 01b897121d933ab44b47eb5494db15e50eb74530dbdae9b634d65020ff5d88c1
+ w (PRF+ output): e902341590a1b4bb4d606a1c643cccb3
+ f2108f1b6aa97b381012b9400c9e3f4e
+ w (reduced multiplier): 35b35ca126156b5bf4ec8b90e9545060
+ f2108f1b6aa97b381012b9400c9e3f0e
+ x: 88c6c0a4f0241ef217c9788f02c32d00b72e4310748cd8fb5f94717607e6417d
+ y: 88b859df58ef5c69bacdfe681c582754eaab09a74dc29cff50b328613c232f55
+ X: 23c48eaff2721051946313840723b38f563c59b92043d6ffd752f95781af0327
+ Y: 3d51486ec1d9be69bc45386bb675c013db87fd0488f6a9cacf6b43e8c81a0641
+ T: 6f301aacae1220e91be42868c163c5009aeea1e9d9e28afcfc339cda5e7105b5
+ S: 9e2cc32908fc46273279ec75354b4aeafa70c3d99a4d507175ed70d80b255dda
+ K: cf57f58f6e60169d2ecc8f20bb923a8e4c16e5bc95b9e64b5dc870da7026321b
+ SPAKESupport: a0093007a0053003020101
+ SPAKEChallenge: a1363034a003020101a12204206f301aacae1220e91be428
+ 68c163c5009aeea1e9d9e28afcfc339cda5e7105b5a20930
+ 073005a003020101
+ Transcript hash after challenge: 23a5e72eb4dedd1ca860f43736c458f0
+ 775c3bb1370a26af8a9374d521d70ec9
+ Final transcript hash after pubkey: 1c605649d4658b58cbe79a5faf227acc
+ 16c355c58b7dade022f90c158fe5ed8e
+ KDC-REQ-BODY: 3075a00703050000000000a1143012a003020101a10b3009
+ 1b077261656275726ea2101b0e415448454e412e4d49542e
+ 454455a3233021a003020102a11a30181b066b7262746774
+ 1b0e415448454e412e4d49542e454455a511180f31393730
+ 303130313030303030305aa703020100a8053003020112
+ K'[0]: a9bfa71c95c575756f922871524b6528
+ 8b3f695573ccc0633e87449568210c23
+ K'[1]: 1865a9ee1ef0640ec28ac007391cac62
+ 4c42639c714767a974e99aa10003015f
+ K'[2]: e57781513fefdb978e374e156b0da0c1
+ a08148f5eb26b8e157ac3c077e28bf49
+ K'[3]: 008e6487293c3cc9fabbbcdd8b392d6d
+ cb88222317fd7fe52d12fbc44fa047f1
+
+ aes256-cts-hmac-sha1-96 P-256
+ key: 01b897121d933ab44b47eb5494db15e50eb74530dbdae9b634d65020ff5d88c1
+ w (PRF+ output): eb2984af18703f94dd5288b8596cd369
+ 88d0d4e83bfb2b44de14d0e95e2090bd
+ w (reduced multiplier): eb2984af18703f94dd5288b8596cd369
+ 88d0d4e83bfb2b44de14d0e95e2090bd
+ x: 935ddd725129fb7c6288e1a5cc45782198a6416d1775336d71eacd0549a3e80e
+ y: e07405eb215663abc1f254b8adc0da7a16febaa011af923d79fdef7c42930b33
+ X: 03bc802165aea7dbd98cc155056249fe0a37a9c203a7c0f7e872d5bf687bd105e2
+ Y: 0340b8d91ce3852d0a12ae1f3e82c791fc86df6b346006431e968a1b869af7c735
+ T: 024f62078ceb53840d02612195494d0d0d88de21feeb81187c71cbf3d01e71788d
+ S: 021d07dc31266fc7cfd904ce2632111a169b7ec730e5f74a7e79700f86638e13c8
+ K: 0268489d7a9983f2fde69c6e6a1307e9d252259264f5f2dfc32f58cca19671e79b
+ SPAKESupport: a0093007a0053003020102
+ SPAKEChallenge: a1373035a003020102a1230421024f62078ceb53840d0261
+ 2195494d0d0d88de21feeb81187c71cbf3d01e71788da209
+ 30073005a003020101
+ Transcript hash after challenge: 0a142afca77c2e92b066572a90389eac
+ 40a6b1f1ed8b534d342591c0e7727e00
+ Final transcript hash after pubkey: 20ad3c1a9a90fc037d1963a1c4bfb15a
+ b4484d7b6cf07b12d24984f14652de60
+ KDC-REQ-BODY: 3075a00703050000000000a1143012a003020101a10b3009
+ 1b077261656275726ea2101b0e415448454e412e4d49542e
+ 454455a3233021a003020102a11a30181b066b7262746774
+ 1b0e415448454e412e4d49542e454455a511180f31393730
+ 303130313030303030305aa703020100a8053003020112
+ K'[0]: 7d3b906f7be49932db22cd3463f032d0
+ 6c9c078be4b1d076d201fc6e61ef531e
+ K'[1]: 17d74e36f8993841fbb7feb12fa4f011
+ 243d3ae4d2ace55b39379294bbc4db2c
+ K'[2]: d192c9044081a2aa6a97a6c69e2724e8
+ e5671c2c9ce073dd439cdbaf96d7dab0
+ K'[3]: 41e5bad6b67f12c53ce0e2720dd6a988
+ 7f877bf9463c2d5209c74c36f8d776b7
+
+ aes256-cts-hmac-sha1-96 P-384
+ key: 01b897121d933ab44b47eb5494db15e50eb74530dbdae9b634d65020ff5d88c1
+ w (PRF+ output): 0304cfc55151c6bbe889653db96dbfe0ba4acafc024c1e88
+ 40cb3a486f6d80c16e1b8974016aa4b7fa43042a9b3825b1
+ w (reduced multiplier): 0304cfc55151c6bbe889653db96dbfe0
+ ba4acafc024c1e8840cb3a486f6d80c1
+ 6e1b8974016aa4b7fa43042a9b3825b1
+ x: f323ca74d344749096fd35d0adf20806e521460637176e84d977e9933c49d76f
+ cfc6e62585940927468ff53d864a7a50
+ y: 5b7c709acb175a5afb82860deabca8d0b341facdff0ac0f1a425799aa905d750
+ 7e1ea9c573581a81467437419466e472
+ X: 0211e3334f117b76635dd802d4022f601680a1fd066a56606b7f246493a10351
+ 7797b81789b225bd5bb1d9ae1da2962250
+ Y: 0383dfa413496e5e7599fc8c6430f8d6910d37cf326d81421bc92c0939b555c4
+ ca2ef6a993f6d3db8cb7407655ef60866e
+ T: 02a1524603ef14f184696f854229d3397507a66c63f841ba748451056be07879
+ ac298912387b1c5cdff6381c264701be57
+ S: 020d5adfdb92bc377041cf5837412574c5d13e0f4739208a4f0c859a0a302bc6
+ a533440a245b9d97a0d34af5016a20053d
+ K: 0264aa8c61da9600dfb0beb5e46550d63740e4ef29e73f1a30d543eb43c25499
+ 037ad16538586552761b093cf0e37c703a
+ SPAKESupport: a0093007a0053003020103
+ SPAKEChallenge: a1473045a003020103a133043102a1524603ef14f184696f
+ 854229d3397507a66c63f841ba748451056be07879ac2989
+ 12387b1c5cdff6381c264701be57a20930073005a0030201
+ 01
+ Transcript hash after challenge: 4d4095d9f94552e15015881a3f2cf458
+ 1be83217cf7ad830d2f051dba3ec8caa
+ 6e354eaa85738d7035317ac557f8c294
+ Final transcript hash after pubkey: 5ac0d99ef9e5a73998797fe64f074673
+ e3952dec4c7d1aacce8b75f64d2b0276
+ a901cb8539b4e8ed69e4db0ce805b47b
+ KDC-REQ-BODY: 3075a00703050000000000a1143012a003020101a10b3009
+ 1b077261656275726ea2101b0e415448454e412e4d49542e
+ 454455a3233021a003020102a11a30181b066b7262746774
+ 1b0e415448454e412e4d49542e454455a511180f31393730
+ 303130313030303030305aa703020100a8053003020112
+ K'[0]: b917d37c16dd1d8567fbe379f64e1ee3
+ 6ca3fd127aa4e60f97e4afa3d9e56d91
+ K'[1]: 93d40079dab229b9c79366829f4e7e72
+ 82e6a4b943ac7bac69922d516673f49a
+ K'[2]: bfc4f16f12f683e71589f9a888e23287
+ 5ef293ac9793db6c919567cd7b94bcd4
+ K'[3]: 3630e2b5b99938e7506733141e8ec344
+ 166f6407e5fc2ef107c156e764d1bc20
+
+ aes256-cts-hmac-sha1-96 P-521
+ key: 01b897121d933ab44b47eb5494db15e50eb74530dbdae9b634d65020ff5d88c1
+ w (PRF+ output): de3a095a2b2386eff3eb15b735398da1caf95bc8425665d8
+ 2370aff58b0471f34a57bccddf1ebf0a2965b58a93ee5b45
+ e85d1a5435d1c8c83662999722d542831f9a
+ w (reduced multiplier): 003a095a2b2386eff3eb15b735398da1
+ caf95bc8425665d82370aff58b0471f3
+ 4cce63791cfed967f0c94c16054b3e17
+ 03133681bece1e05219f5426bc944b0f
+ bfb3
+ x: 017c38701a14b490b6081dfc83524562be7fbb42e0b20426465e3e37952d30bc
+ ab0ed857010255d44936a1515607964a870c7c879b741d878f9f9cdf5a865306
+ f3f5
+ y: 003e2e2950656fa231e959acdd984d125e7fa59cec98126cbc8f3888447911eb
+ cd49428a1c22d5fdb76a19fbeb1d9edfa3da6cf55b158b53031d05d51433ade9
+ b2b4
+ X: 03003e95272223b210b48cfd908b956a36add04a7ff443511432f94ddd87e064
+ 1d680ba3b3d532c21fa6046192f6bfae7af81c4b803aa154e12459d1428f8f2f
+ 56e9f2
+ Y: 030064916687960df496557ecab08298bf075429eca268c6dabbae24e258d568
+ c62841664dc8ecf545369f573ea84548faa22f118128c0a87e1d47315afabb77
+ 3bb082
+ T: 02017d3de19a3ec53d0174905665ef37947d142535102cd9809c0dfbd0dfe007
+ 353d54cf406ce2a59950f2bb540df6fbe75f8bbbef811c9ba06cc275adbd9675
+ 6696ec
+ S: 02004d142d87477841f6ba053c8f651f3395ad264b7405ca5911fb9a55abd454
+ fef658a5f9ed97d1efac68764e9092fa15b9e0050880d78e95fd03abf5931791
+ 6822b5
+ K: 03007c303f62f09282cc849490805bd4457a6793a832cbeb55df427db6a31e99
+ b055d5dc99756d24d47b70ad8b6015b0fb8742a718462ed423b90fa3fe631ac1
+ 3fa916
+ SPAKESupport: a0093007a0053003020104
+ SPAKEChallenge: a1593057a003020104a145044302017d3de19a3ec53d0174
+ 905665ef37947d142535102cd9809c0dfbd0dfe007353d54
+ cf406ce2a59950f2bb540df6fbe75f8bbbef811c9ba06cc2
+ 75adbd96756696eca20930073005a003020101
+ Transcript hash after challenge: 554405860f8a80944228f1fa2466411d
+ cf236162aa385e1289131b39e1fd59f2
+ 5e58b4c281ff059c28dc20f5803b87c6
+ 7571ce64cea01b39a21819d1ef1cdc7f
+ Final transcript hash after pubkey: 8d6a89ae4d80cc4e47b6f4e48ea3e579
+ 19cc69598d0d3dc7c8bd49b6f1db1409
+ ca0312944cd964e213aba98537041102
+ 237cff5b331e5347a0673869b412302e
+ KDC-REQ-BODY: 3075a00703050000000000a1143012a003020101a10b3009
+ 1b077261656275726ea2101b0e415448454e412e4d49542e
+ 454455a3233021a003020102a11a30181b066b7262746774
+ 1b0e415448454e412e4d49542e454455a511180f31393730
+ 303130313030303030305aa703020100a8053003020112
+ K'[0]: 1eb3d10bee8fab483adcd3eb38f3ebf1
+ f4feb8db96ecc035f563cf2e1115d276
+ K'[1]: 482b92781ce57f49176e4c94153cc622
+ fe247a7dbe931d1478315f856f085890
+ K'[2]: a2c215126dd3df280aab5a27e1e0fb7e
+ 594192cbff8d6d8e1b6f1818d9bb8fac
+ K'[3]: cc06603de984324013a01f888de6d43b
+ 410a4da2dea53509f30e433c352fb668
+
+ aes256-cts-hmac-sha1-96 edwards25519, accepted optimistic challenge
+ key: 01b897121d933ab44b47eb5494db15e50eb74530dbdae9b634d65020ff5d88c1
+ w (PRF+ output): e902341590a1b4bb4d606a1c643cccb3
+ f2108f1b6aa97b381012b9400c9e3f4e
+ w (reduced multiplier): 35b35ca126156b5bf4ec8b90e9545060
+ f2108f1b6aa97b381012b9400c9e3f0e
+ x: 70937207344cafbc53c8a55070e399c584cbafce00b836980dd4e7e74fad2a64
+ y: 785d6801a2490df028903ac6449b105f2ff0db895b252953cdc2076649526103
+ X: 13841224ea50438c1d9457159d05f2b7cd9d05daf154888eeed223e79008b47c
+ Y: d01fc81d5ce20d6ea0939a6bb3e40ccd049f821baaf95e323a3657309ef75d61
+ T: 83523b35f1565006cbfc4f159885467c2fb9bc6fe23d36cb1da43d199f1a3118
+ S: 2a8f70f46cee9030700037b77f22cec7970dcc238e3e066d9d726baf183992c6
+ K: d3c5e4266aa6d1b2873a97ce8af91c7e4d7a7ac456acced7908d34c561ad8fa6
+ SPAKEChallenge: a1363034a003020101a122042083523b35f1565006cbfc4f
+ 159885467c2fb9bc6fe23d36cb1da43d199f1a3118a20930
+ 073005a003020101
+ Transcript hash after challenge: 0332da8ba3095ccd127c51740cb905ba
+ c76e90725e769570b9d8338e6d62a7f2
+ Final transcript hash after pubkey: 26f07f9f8965307434d11ea855461d41
+ e0cbabcc0a1bab48ecee0c6c1a4292b7
+ KDC-REQ-BODY: 3075a00703050000000000a1143012a003020101a10b3009
+ 1b077261656275726ea2101b0e415448454e412e4d49542e
+ 454455a3233021a003020102a11a30181b066b7262746774
+ 1b0e415448454e412e4d49542e454455a511180f31393730
+ 303130313030303030305aa703020100a8053003020112
+ K'[0]: 4569ec08b5de5c3cc19d941725913ace
+ 8d74524b521a341dc746acd5c3784d92
+ K'[1]: 0d96ce1a4ac0f2e280a0cfc31742b064
+ 61d83d04ae45433db2d80478dd882a4c
+ K'[2]: 58018c19315a1ba5d5bb9813b58029f0
+ aec18a6f9ca59e0847de1c60bc25945c
+ K'[3]: ed7e9bffd68c54d86fb19cd3c03f317f
+ 88a71ad9a5e94c28581d93fc4ec72b6a
+
+ aes256-cts-hmac-sha1-96 P-521, rejected edwards25519 challenge
+ key: 01b897121d933ab44b47eb5494db15e50eb74530dbdae9b634d65020ff5d88c1
+ w (PRF+ output): de3a095a2b2386eff3eb15b735398da1caf95bc8425665d8
+ 2370aff58b0471f34a57bccddf1ebf0a2965b58a93ee5b45
+ e85d1a5435d1c8c83662999722d542831f9a
+ w (reduced multiplier): 003a095a2b2386eff3eb15b735398da1
+ caf95bc8425665d82370aff58b0471f3
+ 4cce63791cfed967f0c94c16054b3e17
+ 03133681bece1e05219f5426bc944b0f
+ bfb3
+ x: 01687b59051bf40048d7c31d5a973d792fa12284b7a447e7f5938b5885ca0bb2
+ c3f0bd30291a55fea08e143e2e04bdd7d19b753c7c99032f06cab0d9c2aa8f83
+ 7ef7
+ y: 01ded675ebf74fe30c9a53710f577e9cf84f09f6048fe245a4600004884cc167
+ 733f9a9e43108fb83babe8754cd37cbd7025e28bc9ff870f084c7244f536285e
+ 25b4
+ X: 03001bed88af987101ef52db5b8876f6287eb49a72163876c2cf99deb94f4c74
+ 9bfd118f0f400833cc8daad81971fe40498e6075d8ba0a2acfac35eb9ec8530e
+ e0edd5
+ Y: 02007bd3bf214200795ea449852976f241c9f50f445f78ff2714fffe42983f25
+ cd9c9094ba3f9d7adadd6c251e9dc0991fc8210547e7769336a0ac406878fb94
+ be2f1f
+ T: 02014cb2e5b592ece5990f0ef30d308c061de1598bc4272b4a6599bed466fd15
+ 21693642abcf4dbe36ce1a2d13967de45f6c4f8d0fa8e14428bf03fb96ef5f1e
+ d3e645
+ S: 02016c64995e804416f748fd5fa3aa678cbc7cbb596a4f523132dc8af7ce84e5
+ 41f484a2c74808c6b21dcf7775baefa6753398425becc7b838b210ac5daa0cb0
+ b710e2
+ K: 0200997f4848ae2e7a98c23d14ac662030743ab37fccc2a45f1c721114f40bcc
+ 80fe6ec6aba49868f8aea1aa994d50e81b86d3e4d3c1130c8695b68907c673d9
+ e5886a
+ Optimistic SPAKEChallenge: a1363034a003020102a122042047ca8c
+ 24c3a4a70b6eca228322529dadcfa85c
+ f58faceecf5d5c02907b9e2deba20930
+ 073005a003020101
+ SPAKESupport: a0093007a0053003020104
+ SPAKEChallenge: a1593057a003020104a145044302014cb2e5b592ece5990f
+ 0ef30d308c061de1598bc4272b4a6599bed466fd15216936
+ 42abcf4dbe36ce1a2d13967de45f6c4f8d0fa8e14428bf03
+ fb96ef5f1ed3e645a20930073005a003020101
+ Transcript hash after challenge: cb925b8baeae5e2867ab5b10ae1c941c
+ 4ff4b58a4812c1f7bd1c862ad480a8e1
+ c6fcd5e88d846a2045e385841c91a75a
+ d2035f0ff692717608e2a5a90842eff2
+ Final transcript hash after pubkey: d0efed5e3e2c39c26034756d92a66fec
+ 3082ad793d0197f3f89ad36026f146a3
+ 996e548aa3fc49e2e82f8cac5d132c50
+ 5aa475b39e7be79cded22c26c41aa777
+ KDC-REQ-BODY: 3075a00703050000000000a1143012a003020101a10b3009
+ 1b077261656275726ea2101b0e415448454e412e4d49542e
+ 454455a3233021a003020102a11a30181b066b7262746774
+ 1b0e415448454e412e4d49542e454455a511180f31393730
+ 303130313030303030305aa703020100a8053003020112
+ K'[0]: 631fcc8596e7f40e59045950d72aa0b7
+ bac2810a07b767050e983841cf3a2d4c
+ K'[1]: 881464920117074dbc67155a8f3341d1
+ 121ef65f78ea0380bfa81a134c1c47b1
+ K'[2]: 377b72ac3af2caad582d73ae4682fd56
+ b531ee56706200dd6c38c42b8219837a
+ K'[3]: 35ad8e4d580ed3f0d15ad928329773c0
+ 81bd19f9a56363f3a5f77c7e66108c26
+
+ There are currently no encryption types with a seed size large enough
+ to require multiple hash blocks during key derivation with any of the
+ assigned hash functions. To exercise this possibility, the following
+ test vector illustrates what keys would be derived if there were a
+ copy of the edwards25519 group with group number -1 and associated
+ hash function SHA-1:
+
+ AES256 edwards25519 SHA-1 group number -1
+ key: 01b897121d933ab44b47eb5494db15e50eb74530dbdae9b634d65020ff5d88c1
+ w (PRF+ output): 26da6b118cee6fa5ea795ed32d61490d
+ 82b2f11102312f3f2fc04fb01c93df91
+ w (reduced multiplier): d166c7cc9e72ca8c61f6a9185a987251
+ 81b2f11102312f3f2fc04fb01c93df01
+ x: 606c1b668008ed78fe2eee942e8f08007f3f1dcbef66d37fd69033525bda2030
+ y: 10fc4e0bb1a902e58f632a1ea0bceb366360ac985f46996d956a02572bfcf050
+ X: 389621509665abad35eaab26eab3a0f593c7b4380562aa5513c1140fd78ce048
+ Y: de3ed05986eeac518958b566f9bad065b321402025cd188f3d198dc55c6d6b8d
+ T: 2289a4f3c613e6e1df95e94aaa3c127dc062b9fceec3f9b62378dc729d61d0e3
+ S: f9a7fa352930dedb422d567700bfcd39ba221e7f9ac3e6b36f2b63b68b88642c
+ K: 6f61d6b18323b6c3ddaac7c56712845335384f095d3e116f69feb926a04f1340
+ SPAKESupport: a0093007a00530030201ff
+ SPAKEChallenge: a1363034a0030201ffa12204202289a4f3c613e6e1df95e9
+ 4aaa3c127dc062b9fceec3f9b62378dc729d61d0e3a20930
+ 073005a003020101
+ Transcript hash after challenge: f5c051eb75290f92142c
+ bbe80557ec2c85902c94
+ Final transcript hash after pubkey: 9e26a3b148400c8f9cb8
+ 545331e4e7dcab399cc0
+ KDC-REQ-BODY: 3075a00703050000000000a1143012a003020101a10b3009
+ 1b077261656275726ea2101b0e415448454e412e4d49542e
+ 454455a3233021a003020102a11a30181b066b7262746774
+ 1b0e415448454e412e4d49542e454455a511180f31393730
+ 303130313030303030305aa703020100a8053003020112
+ K'[0]: 40bceb51bba474fd29ae65950022b704
+ 17b80d973fa8d8d6cd39833ff89964ad
+ K'[1]: c29a7315453dc1cce938fa12a9e5c0db
+ 2894b2194da14c9cd4f7bc3a6a37223d
+ K'[2]: f261984dba3c230fad99d324f871514e
+ 5aad670e44f00daef3264870b0851c25
+ K'[3]: d24b2b46bab7c4d1790017d9116a7eeb
+ ca88b0562a5ad8989c826cb7dab715c7
+
+Acknowledgements
+
+ Nico Williams (Cryptonector)
+
+ Taylor Yu (MIT)
+
+Authors' Addresses
+
+ Nathaniel McCallum
+ Red Hat, Inc.
+ Email: nathaniel@mccallum.life
+
+
+ Simo Sorce
+ Red Hat, Inc.
+ Email: ssorce@redhat.com
+
+
+ Robbie Harwood
+ Red Hat, Inc.
+ Email: rharwood@pm.me
+
+
+ Greg Hudson
+ MIT
+ Email: ghudson@mit.edu