Internet-Draft | ACVP KAS ECC | August 2020 |
Fussell & Hammett | Expires 11 February 2021 | [Page] |
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 11 February 2021.¶
Copyright (c) 2020 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.¶
There are no acknowledgements.¶
This document defines the JSON schema for testing SP800-56a KAS ECC implementations with the ACVP specification.¶
The Automated Crypto Validation Protocol (ACVP) defines a mechanism to automatically verify the cryptographic implementation of a software or hardware crypto module. The ACVP specification defines how a crypto module communicates with an ACVP server, including crypto capabilities negotiation, session management, authentication, vector processing and more. The ACVP specification does not define algorithm specific JSON constructs for performing the crypto validation. A series of ACVP sub-specifications define the constructs for testing individual crypto algorithms. Each sub-specification addresses a specific class of crypto algorithms. This sub-specification defines the JSON constructs for testing SP800-56a KAS ECC implementations using ACVP.¶
No terms and definitions are listed in this document.¶
The following key derivation functions MAY be advertised by the ACVP compliant cryptographic module:¶
The ACVP server performs a set of tests on the KAS protocol in order to assess the correctness and robustness of the implementation. A typical ACVP validation session SHALL require multiple tests to be performed for every supported permutation of KAS capabilities. This section describes the design of the tests used to validate implementations of KAS algorithms.¶
There are two test types for KAS testing:¶
"AFT" - Algorithm Function Test. In the AFT test mode, the IUT SHALL act as a party in the Key Agreement with the ACVP server. The server SHALL generate and provide all necessary information for the IUT to perform a successful key agreement; both the server and IUT MAY act as party U/V, as well as recipient/provider to key confirmation.¶
"VAL" - Validation Test. In the VAL test mode, The ACVP server MUST generate a complete (from both party U and party V's perspectives) key agreement, and expects the IUT to be able to determine if that agreement is valid. Various types of errors MUST be introduced in varying portions of the key agreement process (changed DKM, changed key, changed hash digest, etc), that the IUT MUST be able to detect and report on.¶
The tests described in this document have the intention of ensuring an implementation is conformant to [SP800-56a].¶
SP 800-56a - 4.1 Key Establishment Preparations. The ACVP server is responsible for generating domain parameters as per the IUT's capability registration.¶
SP 800-56a - 4.2 Key-Agreement Process. Both the ACVP server and IUT participate in the Key Agreement process. The server and IUT can both take the roles of party U/V, and as such the "performer" of steps depicted in "Figure 2: Key Agreement process" can vary.¶
SP 800-56a - 5.1 Cryptographic Hash Functions. All modes of performing KAS SHALL make use of a hash function. The hash function MAY be used for confirmation of a successfully generated shared secret Z (noKdfNoKc), or as a primitive within the KDF being tested (kdfNoKc and kdfKc).¶
SP 800-56a - 5.2 Message Authentication Code (MAC) Algorithm. A MAC is utilized for confirmation of success for kdfNoKc and kdfKc modes of KAS. Note - a MAC prerequisite is REQUIRED only for kdfKc, though is utilized for both kdfNoKc and kdfKc.¶
SP 800-56a - 5.4 Nonce. Nonces are made use of in various KAS schemes - both the ACVP server and IUT SHALL be expected to generate nonces.¶
SP 800-56a - 5.6 Domain Parameters. Domain Parameter Generation SHALL be performed solely from the ACVP server, with constraints from the IUTs capabilities registration. The same set of domain parameters SHALL generate all keypairs (party U/V, static/ephemeral) for a single test case.¶
SP 800-56a - 5.6 Key-Pair Generation. While Key-Pairs are used in each KAS scheme, the generation of said key-pairs is out of scope for KAS testing. Random tests from the VAL groups, MAY inject bad keypairs that the IUT MUST be able detect. These random tests are only present in groups given appropriate assurance functions see: Section 7.4¶
SP 800-56a - 4.3 DLC-based Key-Transport Process / 5.7 DLC Primitives. Depending on the scheme used, either Diffie Hellman or MQV SHALL be used to negotiate a shared secret of z. Testing and validation of such key exchanges is covered under their respective schemes.¶
SP 800-56a - 5.8 Key-Derivation Methods for Key-Agreement Schemes. All schemes/modes save noKdfNoKc (component) MUST make use of a KDF. KDF construction SHALL utilize Section 7.11.1 for its pattern.¶
SP 800-56a - 5.9 Key Confirmation. Most KAS schemes allow for a Key Confirmation process, the ACVP server and IUT MAY be Providers or Recipients of said confirmation. Additionally, key confirmation MAY be performed on one or both parties (depending on scheme).¶
SP 800-56a - 6 Key Agreement Schemes. All schemes specified in referenced document are supported for validation with the ACVP server.¶
SP 800-56a - 4.1 Key Establishment Preparations. The ACVP server SHALL NOT make a distinction between IUT generated keys via a trusted third party and the IUT itself.¶
SP 800-56a - 5.3 Random Number Generation. The IUT MUST perform all random number generation with a validated random number generator. A DRBG is REQUIRED as a prerequisite to KAS, but SHALL NOT be in the scope testing assurances.¶
SP 800-56a - 5.4 Nonce. Nonce generation is utilized for several schemes. The various methods of generating a nonce described in section 5.5 MUST be used, however their generation SHALL NOT be in scope of KAS testing assurances.¶
SP 800-56a - 5.5.2 Assurances of Domain-Parameter Validity. The ACVP server SHALL generate all domain parameters, IUT validation of such parameters is SHALL NOT be in scope for KAS testing.¶
SP 800-56a - 5.5.3 Domain Parameter Management. Domain Parameter Management SHALL NOT be in scope for KAS testing.¶
SP 800-56a - 5.6 Key-Pair Generation. While Key-Pairs MUST be used in each KAS scheme, the generation, assurances, and management of said key-pairs SHALL NOT be in scope of KAS testing.¶
SP 800-56a - 5.8 Key-Derivation Methods for Key-Agreement Schemes. Two-step Key-Derivation (Extraction-then-Expansion) SHALL NOT be utilized in KAS testing.¶
SP 800-56a - 5.9 Key Confirmation. KMAC is referenced in 800-56a as being a valid MAC function; it however SHALL NOT (currently) be supported in KAS testing.¶
SP 800-56a - 5.7 Rationale for Selecting a Specific Scheme. It is expected that the IUT registers all schemes it supports in its capabilities registration. Selecting specific schemes from a KAS testing perspective SHALL NOT be in scope.¶
SP 800-56a - 8 Key Recovery. Key Recovery SHALL NOT be in scope of KAS testing.¶
ACVP requires crypto modules to register their capabilities. This allows the crypto module to advertise support for specific algorithms, notifying the ACVP server which algorithms need test vectors generated for the validation process. This section describes the constructs for advertising support of KAS ECC algorithms to the ACVP server.¶
The algorithm capabilities MUST be advertised as JSON objects within the 'algorithms' value of the ACVP registration message. The 'algorithms' value is an array, where each array element is an individual JSON object defined in this section. The 'algorithms' value is part of the 'capability_exchange' element of the ACVP JSON registration message. See the ACVP specification [ACVP] for more details on the registration message.¶
Each algorithm implementation MAY rely on other cryptographic primitives. For example, RSA Signature algorithms depend on an underlying hash function. Each of these underlying algorithm primitives must be validated, either separately or as part of the same submission. ACVP provides a mechanism for specifying the required prerequisites:¶
Prerequisites, if applicable, MUST be submitted in the registration as the prereqVals
JSON property array inside each element of the algorithms
array. Each element in the prereqVals
array MUST contain the following properties¶
JSON Property | Description | JSON Type |
---|---|---|
algorithm | a prerequisite algorithm | string |
valValue | algorithm validation number | string |
A "valValue" of "same" SHALL be used to indicate that the prerequisite is being met by a different algorithm in the capability exchange in the same registration.¶
An example description of prerequisites within a single algorithm capability exchange looks like this¶
Some algorithm implementations rely on other cryptographic primitives. For example, IKEv2 uses an underlying SHA algorithm. Each of these underlying algorithm primitives must be validated, either separately or as part of the same submission. ACVP provides a mechanism for specifying the required prerequisites:¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
algorithm | a prerequisite algorithm | value | CCM, CMAC, DRBG, ECDSA, HMAC, SHA | valValue |
algorithm validation number | value | actual number or "same" | prereqAlgVal | prerequistie algorithm validation |
KAS has conditional prerequisite algorithms, depending on the capabilities registered:¶
Prerequisite Algorithm | Condition |
---|---|
DRBG | Always REQUIRED |
SHA | Always REQUIRED |
ECDSA | ECDSA.PKV validation REQUIRED when IUT using assurance functions of "fullVal", "keyPairGen", or "keyRegen". ECDSA.KeyPair validation REQUIRED when IUT using assurances functions of "keyPairGen", or "keyRegen". |
AES-CCM | AES-CCM validation REQUIRED when IUT is performing KeyConfirmation (KC) and utilizing AES-CCM. |
CMAC | CMAC validation REQUIRED when IUT is performing KeyConfirmation (KC) and utilizing CMAC. |
HMAC | HMAC validation REQUIRED when IUT is performing KeyConfirmation (KC) and utilizing HMAC. |
Each algorithm capability advertised is a self-contained JSON object using the following values.¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
algorithm | The algorithm under test | value | KAS-ECC | No |
mode | The algorithm mode. | value | Component | Yes |
revision | The algorithm testing revision to use. | value | "1.0" | No |
prereqVals | Prerequisite algorithm validations | array of prereqAlgVal objects | See Section 7.2 | No |
function | Type of function supported | array | See Section 7.4 | No |
scheme | Array of supported key agreement schemes each having their own capabilities | object | See Section 7.5.1 | No |
Note: Some optional values are required depending on the algorithm. Failure to provide these values will result in the ACVP server returning an error to the ACVP client during registration.¶
The following function types MAY be advertised by the ACVP compliant crypto module:¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
kasRole | Roles supported for key agreement | array | initiator and/or responder | No |
noKdfNoKc | Indicates no KDF, no KC tests are to be generated. Note this is a COMPONENT mode only test. This property MUST only be used with "KAS-ECC" / "Component" | object | Section 7.6.1 | Yes |
kdfNoKc | Indicates KDF, no KC tests are to be generated. Note this is a KAS-ECC only test. This mode MAY only be used for registrations with "KAS-ECC" (no mode) | object | Section 7.6.2 | Yes |
kdfKc | Indicates KDF, KC tests are to be generated. Note this is a KAS-ECC only test. This mode MAY only be used for registrations with "KAS-ECC" (no mode) | object | Section 7.6.3 | Yes |
The following schemes MAY be advertised by the ACVP compliant crypto module:¶
Contains properties REQUIRED for "noKdfNoKc" registration.¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
parameterSet | The parameterSet options for "noKdfNoKc" | object | Section 7.7.1 | No |
Contains properties REQUIRED for "kdfNoKc" registration.¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
kdfOption | The kdf options for "kdfNoKc" | object | Section 7.11 | No |
parameterSet | The parameterSet options for "kdfNoKc" | object | Section 7.7.1 | No |
Contains properties REQUIRED for "kdfKc" registration.¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
kdfOption | The kdf options for "kdfNoKc" | object | Section 7.11 | No |
kcOption | The kc options for "kdfNoKc" | object | Section 7.12 | No |
parameterSet | The parameterSet options for "kdfNoKc" | object | Section 7.7.1 | No |
Each parameter set advertised is a self-contained JSON object using the following values. Note that at least one parameter set ("eb", "ec", "ed", "ee") is REQUIRED.¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
eb | The eb parameter set | object | See Section 7.7.2 | Yes |
ec | The ec parameter set | object | See Section 7.7.2 | Yes |
ed | The ed parameter set | object | See Section 7.7.2 | Yes |
ee | The ee parameter set | object | See Section 7.7.2 | Yes |
eb: Len n - 224-255, min Len h - 112, min hash len - 224, min keySize - 112, min macSize - 64¶
ec: Len n - 256-283, min Len h - 128, min hash len - 256, min keySize - 128, min macSize - 64¶
ed: Len n - 384-511, min Len h - 192, min hash len - 384, min keySize - 192, min macSize - 64¶
ee: Len n - 512+, min Len h - 256, min hash len - 512, min keySize - 256, min macSize - 64¶
"noKdfNoKc" REQUIRES "hashAlg"¶
"kdfNoKc" REQUIRES "hashAlg" and at least one valid MAC registration¶
"kdfKc" REQUIRES "hashAlg" and at least one valid MAC registration¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
curve | The elliptic curve to use for key generation. | value | See Section 7.8 | No |
hashAlg | The hash algorithms to use for KDF (and noKdfNoKc) | array | See Section 7.9 | No |
macOption | The macOption(s) to use with "kdfNoKc" and/or "kdfKc" | object | See Section 7.10 | Yes |
The following ECC Curves MAY be advertised by the ACVP compliant crypto module:¶
Parameter Set | Prime | Koblitz | Binary |
---|---|---|---|
eb | P-224 | K-233 | B-233 |
ec | P-256 | K-283 | B-283 |
ed | P-384 | K-409 | B-409 |
ee | P-521 | K-571 | B-571 |
The following SHA methods MAY be advertised by the ACVP compliant crypto module:¶
The following MAC options MAY be advertised for registration under a "kdfNoKc" and "kdfKc" kasMode:¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
keyLen | The supported keyLens for the selected MAC. | Domain | AES based MACs limited to 128, 192, 256. HashAlg based MACs mod 8. All keySizes minimum MUST conform to parameter set requirements See Section 7.7.2 . | No |
nonceLen | The nonce len for use with AES-CCM mac | value | Input as bits, 56-104, odd byte values only (7-13). Additionally minimum MUST conform to parameter set requirements See Section 7.7.2 . | Yes (required for AES-CCM) |
macLen | The mac len for use with mac | value | Input as bits, mod 8, minimum MUST conform to parameter set requirements See Section 7.7.2 , maximum SHALL NOT exceed block size.. | Yes (required for AES-CCM) |
The following MAC options are available for registration under a "kdfNoKc" and "kdfKc" kasMode:¶
concatenation¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
oiPattern | The OI pattern to use for constructing OtherInformation. | value | See Section 7.11.1 . | No |
Pattern candidates:¶
literal[123456789ABCDEF]¶
uses the specified hex within "[]". literal[123456789ABCDEF] substitutes "123456789ABCDEF" in place of the field¶
uPartyInfo¶
vPartyInfo { || ephemeralKey } { || ephemeralNonce }¶
counter¶
32bit counter starting at "1" (0x00000001)¶
Example (Note that party U is the server in this case "434156536964", party V is the IUT "a1b2c3d4e5", using an ECC non-static scheme):¶
"concatenation" : "literal[123456789CAFECAFE]||uPartyInfo||vPartyInfo"¶
Evaluated as:¶
The following KC options are available for registration under a "kdfKc" kasMode:¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
kcRole | The role(s) the IUT is to act as for KeyConfirmation. | array | provider/recipient | No |
kcType | The type(s) the IUT is to act as for KeyConfirmation. | array | unilateral/bilateral | No |
nonceType | The nonce type(s) the IUT is to use for KeyConfirmation. | array | randomNonce, timestamp, sequence, timestampSequence | No |
The following is a example JSON object advertising support for KAS ECC.¶
The following is a example JSON object advertising support for KAS ECC Component.¶
The various schemes of KAS all have their own requirements as to keys and nonces per scheme, per party. The below table demonstrates those generation requirements:¶
Scheme | KasMode | KasRole | KeyConfirmationRole | KeyConfirmationDirection | StaticKeyPair | EphemeralKeyPair | EphemeralNonce | DkmNonce |
---|---|---|---|---|---|---|---|---|
DhHybrid1 | NoKdfNoKc | InitiatorPartyU | None | None | True | True | False | False |
DhHybrid1 | NoKdfNoKc | ResponderPartyV | None | None | True | True | False | False |
DhHybrid1 | KdfNoKc | InitiatorPartyU | None | None | True | True | False | False |
DhHybrid1 | KdfNoKc | ResponderPartyV | None | None | True | True | False | False |
DhHybrid1 | KdfKc | InitiatorPartyU | Provider | Unilateral | True | True | False | False |
DhHybrid1 | KdfKc | InitiatorPartyU | Provider | Bilateral | True | True | False | False |
DhHybrid1 | KdfKc | InitiatorPartyU | Recipient | Unilateral | True | True | False | False |
DhHybrid1 | KdfKc | InitiatorPartyU | Recipient | Bilateral | True | True | False | False |
DhHybrid1 | KdfKc | ResponderPartyV | Provider | Unilateral | True | True | False | False |
DhHybrid1 | KdfKc | ResponderPartyV | Provider | Bilateral | True | True | False | False |
DhHybrid1 | KdfKc | ResponderPartyV | Recipient | Unilateral | True | True | False | False |
DhHybrid1 | KdfKc | ResponderPartyV | Recipient | Bilateral | True | True | False | False |
Mqv2 | NoKdfNoKc | InitiatorPartyU | None | None | True | True | False | False |
Mqv2 | NoKdfNoKc | ResponderPartyV | None | None | True | True | False | False |
Mqv2 | KdfNoKc | InitiatorPartyU | None | None | True | True | False | False |
Mqv2 | KdfNoKc | ResponderPartyV | None | None | True | True | False | False |
Mqv2 | KdfKc | InitiatorPartyU | Provider | Unilateral | True | True | False | False |
Mqv2 | KdfKc | InitiatorPartyU | Provider | Bilateral | True | True | False | False |
Mqv2 | KdfKc | InitiatorPartyU | Recipient | Unilateral | True | True | False | False |
Mqv2 | KdfKc | InitiatorPartyU | Recipient | Bilateral | True | True | False | False |
Mqv2 | KdfKc | ResponderPartyV | Provider | Unilateral | True | True | False | False |
Mqv2 | KdfKc | ResponderPartyV | Provider | Bilateral | True | True | False | False |
Mqv2 | KdfKc | ResponderPartyV | Recipient | Unilateral | True | True | False | False |
Mqv2 | KdfKc | ResponderPartyV | Recipient | Bilateral | True | True | False | False |
DhEphem | NoKdfNoKc | InitiatorPartyU | None | None | False | True | False | False |
DhEphem | NoKdfNoKc | ResponderPartyV | None | None | False | True | False | False |
DhEphem | KdfNoKc | InitiatorPartyU | None | None | False | True | False | False |
DhEphem | KdfNoKc | ResponderPartyV | None | None | False | True | False | False |
DhHybridOneFlow | NoKdfNoKc | InitiatorPartyU | None | None | True | True | False | False |
DhHybridOneFlow | NoKdfNoKc | ResponderPartyV | None | None | True | False | False | False |
DhHybridOneFlow | KdfNoKc | InitiatorPartyU | None | None | True | True | False | False |
DhHybridOneFlow | KdfNoKc | ResponderPartyV | None | None | True | False | False | False |
DhHybridOneFlow | KdfKc | InitiatorPartyU | Provider | Unilateral | True | True | False | False |
DhHybridOneFlow | KdfKc | InitiatorPartyU | Provider | Bilateral | True | True | False | False |
DhHybridOneFlow | KdfKc | InitiatorPartyU | Recipient | Unilateral | True | True | False | False |
DhHybridOneFlow | KdfKc | InitiatorPartyU | Recipient | Bilateral | True | True | False | False |
DhHybridOneFlow | KdfKc | ResponderPartyV | Provider | Unilateral | True | False | False | False |
DhHybridOneFlow | KdfKc | ResponderPartyV | Provider | Bilateral | True | False | True | False |
DhHybridOneFlow | KdfKc | ResponderPartyV | Recipient | Unilateral | True | False | True | False |
DhHybridOneFlow | KdfKc | ResponderPartyV | Recipient | Bilateral | True | False | True | False |
Mqv1 | NoKdfNoKc | InitiatorPartyU | None | None | True | True | False | False |
Mqv1 | NoKdfNoKc | ResponderPartyV | None | None | True | False | False | False |
Mqv1 | KdfNoKc | InitiatorPartyU | None | None | True | True | False | False |
Mqv1 | KdfNoKc | ResponderPartyV | None | None | True | False | False | False |
Mqv1 | KdfKc | InitiatorPartyU | Provider | Unilateral | True | True | False | False |
Mqv1 | KdfKc | InitiatorPartyU | Provider | Bilateral | True | True | False | False |
Mqv1 | KdfKc | InitiatorPartyU | Recipient | Unilateral | True | True | False | False |
Mqv1 | KdfKc | InitiatorPartyU | Recipient | Bilateral | True | True | False | False |
Mqv1 | KdfKc | ResponderPartyV | Provider | Unilateral | True | False | False | False |
Mqv1 | KdfKc | ResponderPartyV | Provider | Bilateral | True | False | True | False |
Mqv1 | KdfKc | ResponderPartyV | Recipient | Unilateral | True | False | True | False |
Mqv1 | KdfKc | ResponderPartyV | Recipient | Bilateral | True | False | True | False |
DhOneFlow | NoKdfNoKc | InitiatorPartyU | None | None | False | True | False | False |
DhOneFlow | NoKdfNoKc | ResponderPartyV | None | None | True | False | False | False |
DhOneFlow | KdfNoKc | InitiatorPartyU | None | None | False | True | False | False |
DhOneFlow | KdfNoKc | ResponderPartyV | None | None | True | False | False | False |
DhOneFlow | KdfKc | InitiatorPartyU | Recipient | Unilateral | False | True | False | False |
DhOneFlow | KdfKc | ResponderPartyV | Provider | Unilateral | True | False | False | False |
DhStatic | NoKdfNoKc | InitiatorPartyU | None | None | True | False | False | False |
DhStatic | NoKdfNoKc | ResponderPartyV | None | None | True | False | False | False |
DhStatic | KdfNoKc | InitiatorPartyU | None | None | True | False | False | True |
DhStatic | KdfNoKc | ResponderPartyV | None | None | True | False | False | False |
DhStatic | KdfKc | InitiatorPartyU | Provider | Unilateral | True | False | False | True |
DhStatic | KdfKc | InitiatorPartyU | Provider | Bilateral | True | False | False | True |
DhStatic | KdfKc | InitiatorPartyU | Recipient | Unilateral | True | False | False | True |
DhStatic | KdfKc | InitiatorPartyU | Recipient | Bilateral | True | False | False | True |
DhStatic | KdfKc | ResponderPartyV | Provider | Unilateral | True | False | False | False |
DhStatic | KdfKc | ResponderPartyV | Provider | Bilateral | True | False | True | False |
DhStatic | KdfKc | ResponderPartyV | Recipient | Unilateral | True | False | True | False |
DhStatic | KdfKc | ResponderPartyV | Recipient | Bilateral | True | False | True | False |
The ACVP server provides test vectors to the ACVP client, which are then processed and returned to the ACVP server for validation. A typical ACVP validation test session would require multiple test vector sets to be downloaded and processed by the ACVP client. Each test vector set represents an individual algorithm defined during the capability exchange. This section describes the JSON schema for a test vector set used with SP800-56a KAS ECC algorithms.¶
The test vector set JSON schema is a multi-level hierarchy that contains meta data for the entire vector set as well as individual test vectors to be processed by the ACVP client. The following table describes the JSON elements at the top level of the hierarchy.¶
JSON Values | Description | JSON Type |
---|---|---|
acvVersion | Protocol version identifier | string |
vsId | Unique numeric vector set identifier | integer |
algorithm | Algorithm defined in the capability exchange | string |
mode | Mode defined in the capability exchange | string |
revision | Protocol test revision selected | string |
testGroups | Array of test groups containing test data, see Section 9.1 | array |
An example of this would look like this¶
The testGroups element at the top level in the test vector JSON object is an array of test groups. Test vectors are grouped into similar test cases to reduce the amount of data transmitted in the vector set. For instance, all test vectors that use the same key size would be grouped together. The Test Group JSON object contains meta data that applies to all test vectors within the group. The following table describes the secure hash JSON elements of the Test Group JSON object.¶
The test group for KAS ECC is as follows:¶
JSON Value | Description | JSON type | Optional |
tgId | Numeric identifier for the test group, unique across the entire vector set. | value | No |
scheme | The scheme for the test vectors. See Section 7.5.1 for possible values | value | No |
testType | The type of testCases expected within the group. AFT (Functional) tests produce test cases where the prompt file delivers only the needed public server information in which the IUT is expected to perform KAS. VAL (Validity) tests produce inputs/outputs from both server and IUT perspectives of a KAS negotiation. The expectation of the IUT on such tests is to determine if the KAS negotiation was successful or not. | AFT, VAL | No |
kasRole | The KAS role | initiator, responder | No |
kasMode | The KAS mode | noKdfNoKc, kdfNoKc, kdfKc | No |
parmSet | Parameter set value to use | eb, ec, ed, ee | No |
hashAlg | hashAlg values being used | See Section 7.9 | No |
macType | The MAC being used. REQUIRED for "kdfNoKc" and "kdfKc" modes. | See Section 7.10 | Yes |
keyLen | The key length of the MAC. REQUIRED for "kdfNoKc" and "kdfKc" modes. | See Section 7.10 | Yes |
nonceAesCcmLen | The nonce length of the MAC (applies only to AES-CCM). REQUIRED for "kdfNoKc" and "kdfKc" modes using a AES-CCM MAC. | See Section 7.10 | Yes |
macLen | The mac length. REQUIRED for "kdfNoKc" and "kdfKc" modes. | See Section 7.10 | Yes |
kdfType | The KDF being used. REQUIRED for "kdfNoKc" and "kdfKc" modes. | concatenation, asn1 | Yes |
idServerLen | The length of the server ID. REQUIRED for "kdfNoKc" and "kdfKc" modes. | value | Yes |
idServer | The server ID. REQUIRED for "kdfNoKc" and "kdfKc" modes. | value | Yes |
idIutLen | The length of the server ID. REQUIRED for "kdfNoKc" and "kdfKc" modes. Provided in response by IUT for AFT tests. | value | Yes |
idIut | The server ID. REQUIRED for "kdfNoKc" and "kdfKc" modes. Provided in response by IUT for AFT tests. | value | Yes |
oiPattern | The oiPattern used in the KDF. REQUIRED for "kdfNoKc" and "kdfKc" modes. | See Section 7.11.1 | Yes |
kcRole | Key confirmation roles supported. REQUIRED for "kdfKc" modes. | provider, recipient | Yes |
kcType | Key confirmation types supported. REQUIRED for "kdfKc" modes. | unilateral and/or bilateral | Yes |
curve | The curve useds for keypair generation | value | No |
tests | Array of individual test vector JSON objects, which are defined in Section 9.2 | array | No |
Each test group contains an array of one or more test cases. Each test case is a JSON object that represents a single test vector to be processed by the ACVP client. The following table describes the JSON elements for each test vector.¶
JSON Value | Description | JSON type | Optional |
---|---|---|---|
tcId | Numeric identifier for the test case, unique across the entire vector set. | value | No |
staticPublicServerX | The ECDSA static public key X coordinate | value | Yes |
staticPublicServerY | The ECDSA static public key Y coordinate | value | Yes |
ephemeralPublicServerX | The ECDSA ephemeral public key X coordinate | value | Yes |
ephemeralPublicServerY | The ECDSA ephemeral public key Y coordinate | value | Yes |
nonceEphemeralServer | nonceEphemeralServer ONLY USED BY C(1,2) and C(0,2) schemes with KC. nonce to be used in the MacData field | value | Yes |
nonceNoKc | The 16 byte nonce concatenated to the "Standard Test Message". Used for No Key Confirmation tests only. | value | Yes |
nonceDkm | The nonce supplied by the initiator to be used in the OI field in the PartyUInfo field. | value | Yes |
staticPrivateIut | The IUT ECDSA static private key | value | Yes |
staticPublicIutX | The IUT ECDSA static public key X coordinate | value | Yes |
staticPublicIutY | The IUT ECDSA static public key Y coordinate | value | Yes |
ephemeralPrivateIut | The IUT ECDSA ephemeral private key | value | Yes |
ephemeralPublicIutX | The IUT ECDSA ephemeral public key X coordinate | value | Yes |
ephemeralPublicIutY | The IUT ECDSA ephemeral public key Y coordinate | value | Yes |
oiLen | Length of the OtherInfo field | value | Yes |
oi | OtherInfo field | value | Yes |
dkm | Derived Keying Material. | value | Yes |
tagIut | The tag (or MAC) GENERATED BY THE SERVER/IUT by using the DKM to MAC the Message with the specified method | value | Yes |
nonceEphemeralIut | nonceEphemeralIut ONLY USED BY C(1,2) and C(0,2) schemes with KC. nonce to be used in the MacData field | value | Yes |
nonceDkmIut | ONLY USED BY STATIC SCHEME. The nonce supplied by the initiator to be used in the OI field in the PartyUInfo field | value | Yes |
nonceLenDkm | ONLY USED BY STATIC SCHEME. The length of the nonce supplied by the initiator to be used in the OI field in the PartyUInfo field. | value | Yes |
nonceEphemeralDkm | ONLY USED BY C(1,2) and C(0,2) schemes with KC. nonce to be used in the MacData field | value | Yes |
nonceEphemralDkmLen | length of nonceEphemeralIut value. | value | Yes |
nonceAesCcm | Nonce used by the CCM function, if CCM is used to generate the Tag. | value | Yes |
macData | The message to be MAced. | value | Yes |
A shared secret that is used to derive secret keying material using a key derivation function. | value | Yes | |
hashZServer | The hashed shared secret, only provided in noKdfNoKc modes of operation. | value | Yes |
hashZIut | The hashed shared secret, only provided in noKdfNoKc modes of operation. | value | Yes |
testPassed | Pass Fail indicating if the IUT agrees with the Tag generated by the server. | boolean | Yes |
The following is a example JSON object for KAS ECC test vectors sent from the ACVP server to the crypto module.¶
The following is a example JSON object for KAS ECC Component test vectors sent from the ACVP server to the crypto module.¶
After the ACVP client downloads and processes a vector set, it must send the response vectors back to the ACVP server. The following table describes the JSON object that represents a vector set response.¶
JSON Value | Description | JSON type |
---|---|---|
acvVersion | Protocol version identifier | value |
vsId | Unique numeric identifier for the vector set | value |
testGroups | Array of JSON objects that represent each test vector group. See Section 10.2 | array |
The testGroups section is used to organize the ACVP client response in a similar manner to how it receives vectors. Several algorithms SHALL require the client to send back group level properties in their response. This structure helps accommodate that.¶
JSON Value | Description | JSON type |
---|---|---|
tgId | The test group Id | value |
tests | The tests associated to the group specified in tgId | value |
The following is a example JSON object for KAS ECC test results sent from the crypto module to the ACVP server.¶
The following is a example JSON object for KAS ECC Component test results sent from the crypto module to the ACVP server.¶
The ECC CDH Component Test¶
Each algorithm capability advertised is a self-contained JSON object using the following values.¶
JSON Value | Description | JSON type | Valid Values | Optional |
algorithm | The algorithm under test | value | KAS-ECC | No |
mode | The algorithm mode | value | CDH-Component | No |
revision | The algorithm testing revision to use. | value | "1.0" | No |
prereqVals | Prerequisite algorithm validations | array of prereqAlgVal objects | See Section 7.2 | No |
curve | Array of supported curves | array | See Section 7.8 | No |
The following is a example JSON object advertising support for KAS ECC CDH-Component.¶
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
algorithm | The algorithm under test | value | KAS-ECC | No |
mode | The algorithm mode under test | value | CDH-Component | No |
revision | The algorithm testing revision to use. | value | "1.0" | No |
testGroups | Array of individual test group JSON objects, which are defined in Section 11.2.1 | Array | Array of test group information | No |
JSON Value | Description | JSON type | Valid Values | Optional |
---|---|---|---|---|
testType | The test type expected within the group. AFT is the only valid value for ECC Component. | value | AFT | No |
curve | The curve used in the test group | value | P-224, P-256, P-384, P-521, K-233, K-283, K-409, K-571, B-233, B-283, B-409, B-571 | No |
tests | Array of individual test vector JSON objects, which are defined in Section 11.2.2 | array | No |
JSON Value | Description | Valid Values | Optional |
---|---|---|---|
tcId | Numeric identifier for the test case, unique across the entire vector set. | value | No |
publicServerX | The X coordinate of the server's public key | value | Yes |
publicServerY | The Y coordinate of the server's public key | value | Yes |
publicIutX | The X coordinate of the iut's public key | value | No |
publicIutY | The Y coordinate of the iut's public key | value | No |
The shared secret Z | value | No |
The following is a example JSON object for KAS ECC CDH-Component test vectors sent from the ACVP server to the crypto module.¶
After the ACVP client downloads and processes a vector set, it must send the response vectors back to the ACVP server. The following table describes the JSON object that represents a vector set response.¶
JSON Value | Description | JSON type |
---|---|---|
acvVersion | Protocol version identifier | value |
vsId | Unique numeric identifier for the vector set | value |
testGroups | Array of JSON objects that represent each test vector group. See Section 11.3.2 | array |
The testGroups section is used to organize the ACVP client response in a similar manner to how it receives vectors. Several algorithms SHALL require the client to send back group level properties in their response. This structure helps accommodate that.¶
JSON Value | Description | JSON type |
---|---|---|
tgId | The test group Id | value tests |
Each test group contains an array of one or more test cases. Each test case is a JSON object that represents a single test vector to be processed by the ACVP client. The following table describes the JSON elements for each DRBG test vector.¶
JSON Value | Description | JSON type | Optional |
---|---|---|---|
tcId | Numeric identifier for the test case, unique across the entire vector set. | value | No |
publicIutX | x value of the IUT public key | value | No |
publicIutY | x value of the IUT public key | value | No |
Computed shared secret Z | value | No |
The following is a example JSON object for KAS ECC CDH Component test results sent from the crypto module to the ACVP server.¶
There are no additional security considerations outside of those outlined in the ACVP document.¶
This document does not require any action by IANA.¶