| Standard | FIPS 140-3 |
|---|---|
| Overall level | 1 |
| Module type | Software |
| Embodiment | Multi-Chip Stand Alone |
| Status | Active |
| Sunset date | 7/17/2030 |
| Caveat | When operated in approved mode. No assurance of the minimum strength of generated SSPs (e.g. keys). |
| Vendor | wolfSSL Inc. |
| Algorithm | ACVP Cert |
|---|---|
| AES-CBC | A2461 |
| AES-CCM | A2461 |
| AES-CMAC | A2461 |
| AES-CTR | A2461 |
| AES-ECB | A2461 |
| AES-GCM | A2461 |
| AES-GMAC | A2461 |
| AES-OFB | A2461 |
| DSA KeyGen (FIPS186-4) | A2461 |
| ECDSA KeyGen (FIPS186-4) | A2461 |
| ECDSA KeyVer (FIPS186-4) | A2461 |
| ECDSA SigGen (FIPS186-4) | A2461 |
| ECDSA SigVer (FIPS186-4) | A2461 |
| Hash DRBG | A2461 |
| HMAC-SHA-1 | A2461 |
| HMAC-SHA2-224 | A2461 |
| HMAC-SHA2-256 | A2461 |
| HMAC-SHA2-384 | A2461 |
| HMAC-SHA2-512 | A2461 |
| HMAC-SHA3-224 | A2461 |
| HMAC-SHA3-256 | A2461 |
| HMAC-SHA3-384 | A2461 |
| HMAC-SHA3-512 | A2461 |
| KAS-ECC-SSC Sp800-56Ar3 | A2461 |
| KAS-FFC-SSC Sp800-56Ar3 | A2461 |
| KDF SSH | A2461 |
| KDF TLS | A2461 |
| RSA Decryption Primitive | A2461 |
| RSA KeyGen (FIPS186-4) | A2461 |
| RSA SigGen (FIPS186-4) | A2461 |
| RSA SigVer (FIPS186-4) | A2461 |
| SHA-1 | A2461 |
| SHA2-224 | A2461 |
| SHA2-256 | A2461 |
| SHA2-384 | A2461 |
| SHA2-512 | A2461 |
| SHA3-224 | A2461 |
| SHA3-256 | A2461 |
| SHA3-384 | A2461 |
| SHA3-512 | A2461 |
| TLS v1.2 KDF RFC7627 | A2461 |
| TLS v1.3 KDF | A2461 |
flowchart LR
%% Deterministic review-risk graph for wolfCrypt
%% Review prompts and evidence gaps, NOT vulnerability findings.
subgraph CMVP["CMVP-disclosed clues"]
C2["[low] Firmware update / recovery<br/>/ rollback (referenced in<br/>text)<br/><i>update</i>"]
C3["[low] Self-test / status surface<br/>(referenced in text)<br/><i>Show Status<br/>Self-test</i>"]
C5["[low] Protocol / secure-channel<br/>references (may be KDF<br/>names, not a live channel)<br/><i>TLS<br/>SSH<br/>DTLS</i>"]
C6["[low] Operating system / runtime<br/>referenced (boundary<br/>membership not asserted)<br/><i>operating system<br/>linux<br/>application</i>"]
end
subgraph Inference["Derived inference"]
I2["Possible only, trusted<br/>code is reachable through<br/>update and recovery paths."]
I3["Possible only, some<br/>services may process input<br/>before, or without,<br/>operator authentication."]
I5["Possible only, a protocol<br/>is referenced, but whether<br/>it is a live channel or<br/>only a KDF/algorithm name<br/>is unconfirmed."]
I6["Possible only, a<br/>runtime/OS is referenced,<br/>but its membership in the<br/>cryptographic boundary is<br/>not established."]
end
subgraph Risk["Reviewer question"]
R2["Are update images<br/>authenticated before<br/>parsing, and are<br/>downgrade/rollback paths<br/>constrained?"]
R3["Can unauthenticated<br/>services leak state,<br/>consume resources, or<br/>transition security state?"]
R5["If a live TLS/SSH/IKE<br/>channel exists, could<br/>library CVEs apply, or is<br/>this only a<br/>KDF/documentation name?"]
R6["If the OS/runtime is<br/>in-boundary, could its<br/>CVEs be hidden by<br/>firmware-only versioning?"]
end
subgraph Evidence["Evidence needed to close"]
E2["confirm the disclosure<br/>itself (keyword hit,<br/>context unverified) ·<br/>update image format ·<br/>signature-before-parse<br/>proof · anti-rollback /<br/>downgrade policy"]
E3["confirm the disclosure<br/>itself (keyword hit,<br/>context unverified) ·<br/>pre-auth reachability<br/>matrix · rate limits and<br/>output redaction ·<br/>abuse-case tests"]
E5["confirm the disclosure<br/>itself (keyword hit,<br/>context unverified) ·<br/>library identity and<br/>version ·<br/>certificate-validation<br/>behaviour · protocol-CVE<br/>disposition"]
E6["confirm the disclosure<br/>itself (keyword hit,<br/>context unverified) ·<br/>runtime identity and<br/>config · kernel/runtime<br/>hardening profile ·<br/>patch/backport manifest"]
end
C2 --> I2 --> R2 --> E2
C3 --> I3 --> R3 --> E3
C5 --> I5 --> R5 --> E5
C6 --> I6 --> R6 --> E6
classDef clue fill:#eef3f9,stroke:#6f7f91,color:#1f3a5f;
classDef infer fill:#fff7e6,stroke:#b98500,color:#6b4e00;
classDef risk fill:#fbe9e9,stroke:#b02a2a,color:#7a1f1f;
classDef evidence fill:#e6f4ea,stroke:#1e7d34,color:#14532d;
class C2,C3,C5,C6 clue;
class I2,I3,I5,I6 infer;
class R2,R3,R5,R6 risk;
class E2,E3,E5,E6 evidence;flowchart LR
%% Deterministic clue tier for wolfCrypt
%% confidence: high = structured record field; medium = structured but soft; low (dashed) = bare keyword hit, context unverified
subgraph CMVP["CMVP-disclosed clues (deterministic)"]
C2["[low] Firmware update / recovery / rollback (referenced in text)<br/><i>update</i><br/>src: text:keyword"]
C3["[low] Self-test / status surface (referenced in text)<br/><i>Show Status<br/>Self-test</i><br/>src: text:keyword"]
C5["[low] Protocol / secure-channel references (may be KDF names, not a live channel)<br/><i>TLS<br/>SSH<br/>DTLS</i><br/>src: text:keyword"]
C6["[low] Operating system / runtime referenced (boundary membership not asserted)<br/><i>operating system<br/>linux<br/>application</i><br/>src: text:keyword"]
end
classDef clueHigh fill:#eef3f9,stroke:#2f6fb0,stroke-width:2px,color:#1f3a5f;
classDef clueMedium fill:#eef3f9,stroke:#6f7f91,color:#1f3a5f;
classDef clueLow fill:#f7f7f7,stroke:#999,stroke-dasharray:4 4,color:#444;
class C2,C3,C5,C6 clueLow;wolfCrypt Document Version 1.0 July 9, 2025 wolfSSL Inc.
Suite C-300 Edmonds, WA 98020 wolfssl.com +1 425-245-8247 wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
FIPS 140-3 Security Policy wolfCrypt Table of Contents wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
FIPS 140-3 Security Policy wolfCrypt List of Tables List of Figures wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
| ISO/IEC 24759 Section 6. [Number Below] | FIPS 140-3 Section Title | Security Level |
|---|---|---|
| 1 | General | 1 |
| 2 | Cryptographic Module Specification | 1 |
| 3 | Cryptographic Module Interfaces | 1 |
| 4 | Roles, Services, and Authentication | 1 |
| 5 | Software/Firmware Security | 1 |
| 6 | Operational Environment | 1 |
| 7 | Physical Security | N/A |
| 8 | Non-Invasive Security | N/A |
| 9 | Sensitive Security Parameter Management | 1 |
| 10 | Self-Tests | 1 |
| 11 | Life-Cycle Assurance | 1 |
| 12 | Mitigation of Other Attacks | N/A |
This document defines the Security Policy for the wolfCrypt cryptographic module by wolfSSL Inc., hereafter denoted the Module. The Module meets FIPS 140-3 overall Level 1 requirements, with security levels as described below.
The Module is a cryptography software library, defined as a software module per AS02.03 with a multi-chip standalone embodiment. The Module is intended for use by U.S. and Canadian Federal agencies in addition to other markets that require FIPS 140-3 validated cryptographic functionality. The Module version under validation is Software Version v5.2.0.1. The package/file name is wolfssl-5.7.2-commercial-fips-linuxv5.2.0.1.7z. Table 1
FIPS 140-3 Security Policy wolfCrypt
Figure 1 depicts the Module operational environment with the cryptographic boundary highlighted in red inclusive of all Module entry points (API calls). The physical perimeter of the module is the general purpose computer on which the software module resides. No components are excluded from [FIPS140-3] requirements. The pre-operational approved integrity test is performed over all components of the cryptographic boundary. Figure 1
FIPS 140-3 Security Policy wolfCrypt • rsa.c: RSA algorithm • sha.c: SHA algorithm • sha256.c: SHA2-256 algorithm • sha256_asm.s: SHA2-256 assembler optimizations (Linux) • sha512_asm.s: SHA2-512 assembler optimizations (Linux) • sha512.c: SHA2-512 algorithm • sha3.c: SHA-3 algorithm • wolfcrypt_first.c: First function marking start of cryptographic boundary • wolfcrypt_last.c: Last function marking end of cryptographic boundary
The Module supports an Approved mode of operation and a non-Approved mode of operation. Approved algorithms are listed in Table
4096 bits or greater. If RSA uses keys with k < 2048, the module enters the non-Approved mode.
d. The calling process shall adhere to all current [SP800-131Ar2] algorithm usage restrictions. 4. Manual key entry is not supported. wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
| # | Operating System | Hardware Platform | Processor | PAA/ Acceleration |
|---|---|---|---|---|
| 1 | Linux 4.4 (Ubuntu 16.04 LTS) | Intel Ultrabook 2 in 1 | Intel® Core™ i5-5300U CPU @2.30GHz x 4 | PAA |
| 2 | Linux 4.4 (Ubuntu 16.04 LTS) | Intel Ultrabook 2 in 1 | Intel® Core™ i5-5300U CPU @2.30GHz x 4 | None |
| 3 | Windows 10 | Intel Ultrabook 2 in 1 | Intel® Core™ i5-5300U CPU @2.30GHz x 4 | PAA |
| 4 | Windows 10 | Intel Ultrabook 2 in 1 | Intel® Core™ i5-5300U CPU @2.30GHz x 4 | None |
FIPS 140-3 Security Policy wolfCrypt
The Module implements a degraded mode of operation: when a CAST fails, the Module enters an error state. The algorithm CAST status is set to FIPS_CAST_STATE_FAILED and the Module runs all CASTs prior to the first operational use of any algorithm, regardless of the CAST having passed previously. Before exiting the error state, the Module status (reported in the Show Status service) is set to FIPS_MODE_DEGRADED. Upon exiting the error state, the Module enters the degraded mode of operation. The sequence of events is in accordance with AS02.26. The algorithm that failed its CAST, initially triggering the error state, will no longer be available for use in the degraded mode of operation and any algorithms that depend on that algorithm will also be unavailable for use. To recover from the degraded mode operation, the CO shall power cycle or reload the Module (equivalent to a power cycle).
The TOEPP is the General Purpose Computer on which the module is running on. Operational testing was performed for the following modifiable Operational Environments (with no restrictions on operational environments configuration): Table 2
| CAVP Cert | Algorithm and Standard | Mode/Method | Description/Key Size(s)/ Key Strength(s) | Use/Function |
|---|---|---|---|---|
| A2461 | AES [FIPS197], [SP800-38A] | AES-CBC, AES-CTR, AES-ECB, AES-OFB | AES-128 (s = 128), AES-192 (s = 192), AES-256 (s = 256) | Encryption, decryption |
| A2461 | AES [SP800-38C], [SP800-38D] | AES-CCM, AES-GCM | AES-128 (s = 128), AES-192 (s = 192), AES-256 (s = 256) | Authenticated encryption, authenticated decryption, message authentication |
| A2461 | AES [SP800-38B] | AES-CMAC | AES-128 (s = 128), AES-192 (s = 192), AES-256 (s = 256) | Message authentication generation, verification |
| A2461 | AES [SP800-38D] | AES-GMAC | AES-192 (s = 192), AES-256 (s = 256) | Message authentication generation, verification |
| Vendor Affirmed | CKG [SP800-133r2] | §4: Using the Output of a Random Bit Generator §5: Generation of Key Pairs for Asymmetric-Key Algorithms §6.2: Derivation of Symmetric Keys | N/A | Cryptographic key generation |
| A2461 | DSA KeyGen [FIPS186-4] | FFC key generation | L = 2048, N = 256 (s = 112) See Note 4 and Note 7 | FFC key generation |
| A2461 | ECDSA KeyGen [FIPS186-4] | Secret generation mode: Extra Bits | P-224 (s ~= 112), P-256 (s ~= 128), P-384 (s ~= 192), P-521 (s ~= 256) See Note 2 | ECC key generation |
| A2461 | ECDSA KeyVer [FIPS186-4] | Public Key Validity | P-192 (s < 112), P-224 (s ~= 112), P-256 (s ~= 128), P-384 (s ~= 192), P-521 (s ~= 256) See Note 2 | ECC public key validation (curve P-192 is for legacy use only) |
| A2461 | ECDSA SigGen [FIPS186-4] | SigGen (tested with SHA2-224, SHA2-256, SHA2-384, SHA2-512) | P-224 (s ~= 112), P-256 (s ~= 128), P-384 (s ~= 192), P-521 (s ~= 256) See Note 2 | ECC signature generation |
| A2461 | ECDSA SigVer [FIPS186-4] | SigVer (tested with SHA-1, SHA2-224, SHA2-256, SHA2-384, SHA2-512) | P-192 (s < 112), P-224 (s ~= 112), P-256 (s ~= 128), P-384 (s ~= 192), P-521 (s ~= 256) See Note 2 | ECC signature verification. (verification with SHA-1 and curve P-192 is for legacy use only) |
| A2461 | Hash DRBG [SP800-90Ar1] | No prediction resistance | SHA2-256 (s = 256) | Random bit generation |
FIPS 140-3 Security Policy wolfCrypt
The Module implements the Approved and allowed cryptographic functions listed in the table below. Equivalent strength in bits is given for each key or algorithm type (as some algorithms do not use or produce keys). The term s is used throughout to indicate security strength, following the notation used in the majority of the sources (refer to the notes below Table 3). This table is referenced by Table 9 (SSPs). Table 3
| CAVP Cert | Algorithm and Standard | Mode/Method | Description/Key Size(s)/ Key Strength(s) | Use/Function |
|---|---|---|---|---|
| A2461 | HMAC-SHA-1 [FIPS198-1] | Generate HMAC-SHA-1 MAC, with SHA-1 mode | SHA-1 (s = 160) | Generation, verification, message authentication |
| A2461 | HMAC-SHA2 [FIPS198-1] | Generate HMAC-SHA2 MAC with the listed SHA2 modes | SHA2-224 (s = 224), SHA2-256 (s = 256), SHA2-384 (s = 384), SHA2-512 (s = 512) | Generation, verification, message authentication |
| A2461 | HMAC-SHA3 [FIPS198-1] | Generate HMAC-SHA3 MAC with the listed SHA3 modes | SHA3-224 (s = 224), SHA3-256 (s = 256), SHA3-384 (s = 384), SHA3-512 (s = 512) | Generation, verification, message authentication |
| A2461 | KAS-ECC-SSC [SP800-56Ar3] | Scheme: ephemeralUnified KAS Role: Initiator, responder | P-256 (s ~= 128), P-384 (s ~= 192), P-521 (s ~= 256) See Note 2 and Note 3 | Shared secret computation |
| A2461 | KAS-FFC-SSC [SP800-56Ar3] | Scheme: dhEphem KAS Role: Initiator, responder | ffdhe2048 (s = 112), ffdhe3072 (112 ≤ s ≤ 128), ffdhe4096 (112 ≤ s ≤ 152), ffdhe6144 (112 ≤ s ≤ 176), ffdhe8192 (112 ≤ s ≤ 200) See Note 5 | Shared secret computation |
| CVL A2461 | KDF SSH [SP800-135r1] | Derivation of key blocks for the listed AES cipher key types and hash algorithms | AES-128 (s = 128), AES-192 (s = 192), AES-256 (s = 256); SHA-1 (s = 160), SHA2-256 (s = 256), SHA2-384 (s = 384), SHA2-512 (s = 512) | Key derivation for use with the SSH v2 protocol |
| CVL A2461 | KDF TLS [SP800-135r1] | TLS key derivation using the listed hash algorithms | SHA2-256 (s = 256), SHA2-384 (s = 384), SHA2-512 (s = 512) | Key derivation for use with the TLS v1.2 protocol |
| CVL A2461 | RSA Decryption Primitive [SP800-56Br2] | RSA primitive operations only (no claims of key transport) | k = 2048 (s ~= 112) See Note 6 | Key transport primitive RSADP |
| Vendor Affirmed | RSA Encryption Primitive [SP800-56Br2] | RSA primitive operations only (no claims of key transport) | k=2048 (s ~= 112), k=3072 (s ~= 128), k=4096 (s ~= 152) See Note 6 | Key transport primitive RSAEP |
| A2461 | RSA KeyGen [FIPS186-4] | Key generation mode: B.3.3 Primality tests per Table C.2, with listed moduli | k=2048 (s ~= 112), k=3072 (s ~= 128), k=4096 (s ~= 152) See Note 4, Note 6, and Note 10 | Key generation |
| A2461 | RSA SigGen [FIPS186-4] | Signature types: PKCS 1.5 and PKCSPSS tested with the listed moduli and the following hash algorithms: SHA2-224, SHA2-256, SHA2-384, SHA2-512 | k=2048 (s ~= 112), k=3072 (s ~= 128), k=4096 (s ~= 152) See Note 4, Note 6, and Note 10 | Signature generation |
FIPS 140-3 Security Policy wolfCrypt wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
| CAVP Cert | Algorithm and Standard | Mode/Method Signature types: PKCS 1.5 and PKCSPSS with the listed moduli and the following hash algorithms: SHA3-224, SHA3-256, SHA3-384, SHA3-512 (no ACVP testing is currently available, See Note 9) | Description/Key Size(s)/ Key Strength(s) | Use/Function |
|---|---|---|---|---|
| A2461 | RSA SigVer [FIPS186-4] | Signature types: PKCS 1.5 and PKCSPSS tested with the listed moduli and the following hash algorithms: SHA-1, SHA2-224, SHA2-256, SHA2-384, SHA2-512 Signature types: PKCS 1.5 and PKCSPSS with the listed moduli and the following hash algorithms: SHA3-224, SHA3-256, SHA3-384, SHA3-512 (no ACVP testing is currently available, See Note 9) | k=1024 (s ≤ 112), k=2048 (s ~= 112), k=3072 (s ~= 128), k=4096 (s ~= 152) See Note 4 and Note 6 | Signature verification (verification with SHA-1 and modulus length k=1024 is for legacy use only) |
| A2461 | SHA-1 [FIPS180-4] | SHA-1 mode listed at right | SHA-1 (s = 160) See Note 1 | Message digest generation |
| A2461 | SHA2 [FIPS180-4] | SHA2 modes listed at right | SHA2-224 (s = 224), SHA2-256 (s = 256), SHA2-384 (s = 384), SHA2-512 (s = 512) See Note 1 | Message digest generation |
| A2461 | SHA3 [FIPS202] | SHA3 modes listed at right See Note 9 | SHA3-224 (s = 224), SHA3-256 (s = 256), SHA3-384 (s = 384), SHA3-512 (s = 512) See Note 1 | Message digest generation |
| CVL A2461 | TLS v1.2 KDF [RFC7627] | TLS [RFC7627] key derivation with Extended Master Secret (EMS) support, using the listed hash algorithms | SHA2-256 (s = 256), SHA2-384 (s = 384), SHA2-512 (s = 512) | Key derivation for use with the TLS v1.2 protocol |
| CVL A2461 | TLS v1.3 KDF [RFC8446] | KDF running modes: DHE, PSK, PSK-DHE, using the listed HMAC algorithms | HMAC-SHA2-256 (s = 256), HMAC-SHA2-384 (s = 384) | Key derivation for use with the TLS v1.3 protocol |
FIPS 140-3 Security Policy wolfCrypt Note 1: Preimage resistance strength applies to hash algorithms used in DRBG, KDFs. Described also in [SP800-57P1r5] Table
| Algorithm/Function | Use/Function |
|---|---|
| RSA SigGen using 1024 bit keys | RSA Signature Generation |
| Physical Port | Logical Interface | Data that Passes over Port/Interface |
|---|---|---|
| N/A: Internal (call stack) | Control In | API entry point: stack frame including non-sensitive parameters |
| N/A: Internal (call stack) | Control Out | API call parameters passed by reference for structures allocated by wolfCrypt |
| N/A: Internal (call stack) | Data In | API call parameters passed by reference or value for cryptographic service input |
| N/A: Internal (call stack) | Data Out | API call parameters passed by reference for cryptographic service output |
| N/A: Internal (call stack) | Status Out | API return value: enumerated status resulting from call execution |
FIPS 140-3 Security Policy wolfCrypt Note 6: Estimated security strengths of common RSA moduli are given in [SP800-56Br2] Table
Table 5 defines the Module’s [FIPS140-3] logical interfaces; the Module does not interact with physical ports. Table 5 – Ports and Interfaces
The Module supports the Cryptographic Officer (CO) operator role, and does not support multiple concurrent operators, a maintenance role or bypass capability. wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
| Role | Service | Input | Output |
|---|---|---|---|
| CO | Digital signature | Sign: signing key; message Verify: signature value; flags; sizes | Status return; Signature value Status return |
| CO | Generate key pair | FFC, ECC: curve identifier RSA: modulus size | Status return; general digital signature private and public keys |
| CO | Key agreement | Key structs (key agreement keys); flags | Status return; key agreement shared secret |
| CO | Key derivation | Key agreement shared secret; flags | Status return; derived keying material |
| CO | Key transport primitives | Decrypt primitive: Key structs; encapsulated keying material; flags | Status return; keying material |
| CO | Keyed hash | Keyed hash key | Status return; Tag value |
| CO | Message digest | Message; flags | Status return; Hash value |
| CO | Random | DRBG struct (RGB_State); RBG_Seed | Status return; Random value |
| CO | Self-test | Flags | Status return |
| CO | Show status | None | Status return (includes Module version) |
| CO | Symmetric cipher | Encryption or decryption key; flags; plaintext or ciphertext | Status return; Plaintext or ciphertext |
| CO | Zeroise | FreeRNG destroys the DRBG struct (RGB_State), and is used on module shutdown for the internal DRBG. Key structures allocated by the caller are zeroized by the Free call corresponding to the allocated structure. | Status return |
FIPS 140-3 Security Policy wolfCrypt The Module does not provide an authentication or identification method of its own. The CO role is implicitly The cryptographic module does not support loading software from an external source.
All services implemented by the Module are listed in Table 6. The calling application may use the Show status service (wolfCrypt_GetStatus_fips call) to determine the status of the Module. A return code of FIPS_MODE_NORMAL means the Module is in a state without errors; the return code FIPS_MODE_DEGRADED means a CAST has failed
| Service | Description | Approved Security Functions | Keys and/or SSPs | Roles | Access Rights to Keys and/or SSPs | Indicator |
|---|---|---|---|---|---|---|
| Digital signature | Generate or verify digital signatures | ECDSA SigGen, ECDSA SigVer, RSA SigGen, RSA SigVer | DS_SGK/ECC DS_SVK/ECC DS_SGK/IFC DS_SVK/IFC | CO | E,W E,W E,W E,W | k |
| Generate key pair† | Generate asymmetric key pairs | ECDSA KeyGen, ECDSA KeyVer, RSA KeyGen, DSA KeyGen | GKP_Private/ECC GKP_Public/ECC GKP_Private/IFC GKP_Public/IFC GKP_Private/FFC GKP_Public/FFS | CO | G,W G,W G,W G,W G,W G,W | f |
| Key agreement† | DH key agreement primitives | KAS-ECC-SSC, KAS-FFC-SSC | KAS_Private/ECC KAS_Public/ECC KAS_Private/FFC KAS_Public/FFC KAS_SS/ECC KAS_SS/FFC | CO | E,W E,W E,W E,W G,R G,R | f |
| Key derivation† | Derive keying material from a shared secret | KDF SSH, KDF TLS, TLS v1.2 KDF RFC7627, TLS v1.3 KDF | KAS_SS/ECC KAS_SS/FFC KD_DKM, KTS_SS/IFC | CO | E,W E,W G,R E,W | f |
| Key transport primitives ‡ | Encapsulate or decapsulate key material on behalf of the calling process | RSA Decryption Primitive, RSA Encryption Primitive | KTS_KDK/IFC KTS_KEK/IFC KTS_SS/IFC | CO | E, E, R | f |
| Keyed hash | Generate or verify message integrity | AES-CMAC, AES-GMAC, HMAC-SHA-1, HMAC-SHA2-224, HMAC-SHA2-256, HMAC-SHA2-384, HMAC-SHA2-512, HMAC-SHA3-224, HMAC-SHA3-256, HMAC-SHA3-384, HMAC-SHA3-512 | KH_Key/AES-CMAC KH_Key/AES-GMAC KH_Key/HMAC | CO | E,W E,W E,W | f |
| Message digest | Generate a message digest | SHA-1, SHA2-224, SHA2- 256, SHA2-384, SHA2-512, SHA3-224, SHA3-256, SHA3-384, SHA3-512 | -- | CO | -- | f |
| Random | Generate random bits using the DRBG | CKG, Hash DRBG | RBG_Seed RBG_State Entropy Input | CO | E,W E,G E,W | f |
| Self-test | Perform the designated self-test | -- | -- | CO | -- | f |
| Show status | Provide Module status (includes Module version) | -- | -- | CO | -- | t |
FIPS 140-3 Security Policy wolfCrypt Table 7
| Service | Description | Approved Security Functions | Keys and/or SSPs | Roles | Access Rights to Keys and/or SSPs | Indicator |
|---|---|---|---|---|---|---|
| Symmetric cipher | Encrypt or decrypt data, including AEAD modes (CCM, GCM) | AES-CBC, AES-CCM, AES-CTR, AES-ECB, AES-GCM, AES-OFB | SC_EDK/AES | CO | E,W | f |
| Zeroise | wc_FreeRng_fips() destroys RNG CSPs All functions zeroise CSPs using function ForceZero() (overwriting with zeroes) within the function scope after use Caller stack cleanup is the duty of the application GPC restart/power- cycle clears all CSPs in RAM | -- | Entropy Input RBG_State DS_SGK/ECC DS_SGK/IFC GKP_Private/ECC GKP_Private/IFC KAS_Private/ECC KAS_Private/FFC KAS_SS/ECC KAS_SS/FFC KH_Key/AES-CMAC KH_Key/AES-GMAC KH_Key/HMAC RBG_Seed SC_EDK/AES | CO | Z Z Z Z Z Z Z Z Z Z Z Z Z Z | f |
FIPS 140-3 Security Policy wolfCrypt Note that the caller provides the KAS_Private and KAS_Public keys for shared secret computation; the caller’s exchange and assurance of SSPs with the remote participant is outside the scope of the Module. † Consistent with [FIPS140-3_IG] §9.5.A, available only if the private_key_read_enable property is set to TRUE. ‡ Not claiming key transport, but the RSADP and RSAEP are available for interoperation with peers using the TLS protocol stack without an approved cryptography implementation. wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
| Service | Description | Algorithms Accessed | Role | Indicator |
|---|---|---|---|---|
| Digital signature | Generate digital signatures | RSA SigGen using 1024 bit keys | CO | 1024 |
FIPS 140-3 Security Policy wolfCrypt Table 8 – Non-Approved Services
The Module uses HMAC-SHA2-256 with a 256-bit key (HMAC Cert. #A2461) as the approved integrity technique. The object files from section 2 are linked into the library. The code section is delimited by two functions that do not perform any actions; they are used only for their addresses. The constant data section is delimited by two constant arrays of unused data; they are only used for their addresses. The code is first added to the hash, then the constant data is added to the hash. The verify hash stored in the code is excluded from the HMAC-SHA2-256 calculation. The calculated HMAC is compared to the HMAC stored in the constant data section. Before the integrity technique is executed, the Module performs an HMAC-SHA2-256 KAT.
The operator can initiate the integrity test on demand by reloading the Module.
While the Module is not “open-source” since it is only shipped under a commercial license, the open-source practice of source code delivery with a commercial license is standard for the Module. While not required to do so, the Module will abide by [ISO19790] §B.2.5. Please see details in the wolfCrypt FIPS 140-3 User Guide [UG] for the OEs listed on the validation certificate. Details will include information about compiler, compiler configuration settings and methods to compile the source code into an executable form in an approved mode of operation. See also §11.1 below.
Table 2 lists the operational environments on which the Module was tested. The module runs on a modifiable operating environment. The operational environment that is designed to accept functional changes that may contain non-controlled software. For Linux builds, the configure script provided with the package detects the environment and sets the required flags. On Windows, a header file is provided to set the required flags.
N/A. The Module does not implement physical security.
N/A. The Module does not implement non-invasive security mechanisms. wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
| Key/SSP Name/Type | Strength1 | Security Function and Cert Number | n o ti a r e n e G | t r o p x E / t r o p m I | t n e m h s ilb a t s E | e g a r o t S | n o ti a s io r e Z | Use & Related Keys |
|---|---|---|---|---|---|---|---|---|
| DS_SGK/ECC | 112, 128, 192, 256 | ECDSA SigGen #A2461 | -- | IE1 | -- | S1 | Z1 | SigGen (private) key; related to DS_SVK/ECC |
| DS_SVK/ECC | <112, 112, 128, 192, 256 | ECDSA SigVer #A2461 | -- | IE1 | -- | S1 | Z1 | SigVer (public) key, related to DS_SGK/ECC; key type with security strength <112 bits (P-192) used only for legacy signature verification |
| DS_SGK/IFC | 112, 128, 152 | RSA SigGen #A2461 | -- | IE1 | -- | S1 | Z1 | SigGen (private) key, related to DS_SVK/IFC |
| DS_SVK/IFC | <112, 112, 128, 152 | RSA SigVer #A2461 | -- | IE1 | -- | S1 | Z1 | SigVer (public) key, related to DS_SGK/IFC; key type with security strength <112 bits (k=1024) used only for legacy signature verification |
| GKP_Private/ECC | 112, 128, 192, 256 | ECDSA KeyGen #A2461, ECDSA KeyVer #A2461 | G2 | IE2 | -- | S1 | Z1 | General ECDSA (private) key, related to GKP_Public/ECC |
| GKP_Public/ECC | <112, 112, 128, 192, 256 | ECDSA KeyGen #A2461, ECDSA KeyVer #A2461 | G2 | IE2 | -- | S1 | Z1 | General ECDSA (public) key, related to GKP_Private/ECC; key type with security strength <112 bits (P-192) used only for legacy public key validation (KeyVer) |
| GKP_Private/FFC | 112 | DSA KeyGen #A2461 | G3 | IE2 | -- | S1 | Z1 | General DSA (private) key, related to GKP_Public/FFC |
| GKP_Public/FFC | 112 | DSA KeyGen #A2461 | G3 | IE2 | -- | S1 | Z1 | General DSA (public) key, related to GKP_Private/FFC |
| GKP_Private/IFC | 112, 128, 152 | RSA KeyGen #A2461 | G1 | IE2 | -- | S1 | Z1 | General RSA (private) key, related to GKP_Public/IFC |
| GKP_Public/IFC | 112, 128, 152 | RSA KeyGen #A2461 | G1 | IE2 | -- | S1 | Z1 | General RSA (public) key, related to GKP_Private/IFC |
| KAS_Private/ECC | 128, 192, 256 | KAS-ECC-SSC #A2461 | -- | IE1 | -- | S1 | Z1 | Key pair component used for shared secret generation |
| KAS_Public/ECC | 128, 192, 256 | KAS-ECC-SSC #A2461 | -- | IE1 | -- | S1 | Z1 | Peer key pair component used for shared secret generation |
| KAS_Private/FFC | 112 ≤ s ≤ 200 | KAS-FFC-SSC #A2461 | -- | IE1 | -- | S1 | Z1 | Key pair component used for shared secret generation |
| KAS_Public/FFC | 112 ≤ s ≤ 200 | KAS-FFC-SSC #A2461 | -- | IE1 | -- | S1 | Z1 | Peer key pair component used for shared secret generation |
| KAS_SS/ECC | 128, 192, 256 | KAS-ECC-SSC #A2461 | -- | -- | E2 | S1 | Z1 | Shared secret calculation z output value (for KDF) |
| KAS_SS/FFC | 112 ≤ s ≤ 200 | KAS-FFC-SSC #A2461 | -- | -- | E1 | S1 | Z1 | Shared secret calculation z output value (for KDF) |
FIPS 140-3 Security Policy wolfCrypt
All Sensitive Security Parameters (SSPs) used by the Module are described in this section, arranged for consistency with Table 7. The text ‘--’ indicates the table cell contents are intentionally not present. Table 9
| Key/SSP Name/Type | Strength1 | Security Function and Cert Number | n o ti a r e n e G | t r o p x E / t r o p m I | t n e m h s ilb a t s E | e g a r o t S | n o ti a s io r e Z | Use & Related Keys |
|---|---|---|---|---|---|---|---|---|
| KD_DKM | 160, 128, 192, 256, 384, 512 | KDF SSH #A2461, KDF TLS #A2461, TLS v1.2 KDF RFC7627 #A2461, TLS v1.3 KDF #A2461 | -- | -- | E3 | S1 | Z1 | Key Derivation derived keying material2 |
| KH_Key/ AES-CMAC | 128, 192, 256 | AES-CMAC #A2461 | -- | IE1 | -- | S1 | Z1 | Keyed Hash key |
| KH_Key/ AES-GMAC | 128, 192, 256 | AES-GMAC #A2461 | -- | IE1 | -- | S1 | Z1 | Keyed Hash key |
| KH_Key/HMAC | 112 to 1024 in 8-bit increments | HMAC SHA-1 HMAC SHA2-224 HMAC SHA2-256 HMAC SHA2-384 HMAC SHA2-512 HMAC SHA3-224 HMAC SHA3-256 HMAC SHA3-384 HMAC SHA3-512 #A2461 | -- | IE1 | -- | S1 | Z1 | Keyed Hash key |
| KTS_KDK/IFC | 112, 128, 152 | RSA Decryption Primitive #A2461 | -- | IE1 | -- | S1 | Z1 | RSA key de-encapsulation Key (for KDF) |
| KTS_KEK/IFC | 112, 128, 152 | RSA Encryption Primitive | -- | IE1 | -- | S1 | Z1 | RSA key encapsulation Key (for KDF) |
| KTS_SS/IFC | 112, 128, 152 | RSA Decryption Primitive #A2461, RSA Encryption Primitive | -- | IE1 | -- | S1 | Z1 | RSA key transport shared secret (for KDF) |
| Entropy Input | 112 | External source (see Table 9) | -- | IE1 | -- | S1 | Z1, Z2 | Entropy input string |
| RBG_Seed | 112 | Hash DRBG #A2461 | G4 | -- | -- | S1 | Z1, Z2 | DRBG seed used for DRBG instantiate and reseed |
| RBG_State | 256 | Hash DRBG #A2461 | G5 | -- | E4 | S1 | Z1, Z2 | Hash DRBG (SHA2-256) state: V (440) and C (440) |
| SC_EDK/AES | 128, 192, 256 | AES-CBC #A2461, AES-CCM #A2461, AES-CTR #A2461, AES-ECB #A2461, AES-GCM #A2461, AES-OFB #A2461 | -- | IE1 | -- | S1 | Z1 | AES key used for symmetric encryption and decryption (including AES authenticated encryption and decryption) |
FIPS 140-3 Security Policy wolfCrypt Generation Import/Export Establishment Zeroisation Storage Legend Generation Establishment Storage G1: [FIPS186-4] RSA keypair generation, E1: [SP800-56Ar3] §5.7.1.1 FFC DH S1: RAM in plaintext [SP800-133r2] Section 5 compliant E2: [SP800-56Ar3] §5.7.1.1 ECC CDH G2: [FIPS186-4] ECDSA keypair generation E3: [SP800-56Cr2] Extract-then-expand Zeroisation [SP800-133r2] Section 5 compliant KDF Z1: Cleared after use via Free, or as part of G3: [FIPS186-4] DSA keypair generation, E4: [SP800-90Ar1] Hash_df; Instantiate; function cleanup before return. [SP800-133r2] Section 5 compliant. Generate; Reseed Z2: the internal RBG is zeroized upon G4: [SP800-90B] DRBG seed material, module shutdown. [SP800-133r2] Section 4 compliant The separation into specific keys is done outside the scope of the module but must be conformant to [SP800-56Cr2]. wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
| Entropy Sources | Minimum Number of Bits of Entropy | Details |
|---|---|---|
| Calling application | 112 to 256 inclusive | The Module passively obtains entropy via callback functions outside the Module boundary, while exercising no control over the amount or quality of the obtained entropy; the following caveat is applicable to this scenario: No assurance of the minimum strength of generated SSPs (e.g., keys) |
FIPS 140-3 Security Policy wolfCrypt G5: [SP800-90Ar1] DRBG state Import/Export (instantiation or update); [SP800-133r2] IE1: Call stack (API) input parameters Section 4 compliant. (electronic entry) IE2: Call stack (API) output parameters (electronic entry)
Each time the Module is powered up, it tests that the cryptographic algorithms still operate correctly, and that sensitive data has not been damaged. The pre-operational self-tests are available on demand by reloading the On instantiation, the Module performs the pre-operational self-tests described below. All cryptographic functions include a check of a self-test flag; a self-test will be invoked if it has not yet been performed. All KATs must complete successfully prior to any other use of cryptography by the Module. The error state is persistent, and no services are available. All attempts to use the Module’s services result in the return of a non-zero error code, FIPS_NOT_ALLOWED_E (-197). To recover from an error state, reload the Module into memory. The module error state is called “Err”. Once the Module is powered on and has passed the pre-operational self-tests, calls to any cryptographic algorithm will trigger the CAST on first operational use of the algorithm. The CASTs are available on demand after power-on and can be executed by the Cryptographic Officer (CO) at any time. The CO may optionally invoke any CAST ahead of algorithm use at a more convenient time rather than letting it run automatically on first use. Regardless of the CAST running manually or automatically, once it has passed, the CO may manually re-run any CAST at any time in a periodic fashion. A CAST will no longer run automatically after it has passed the first time. wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
FIPS 140-3 Security Policy wolfCrypt wolfSSL Inc. highly recommends a periodic power cycle or reload of the Module (once in a 24-hour period) as a best security practice. If a periodic power cycle is not possible, a periodic call to the function wc_RunAllCast_fips() is recommended as an alternative (at least once in a 24-hour period). See §10.2 below for details on proper use of the API from a calling application. Pre-Operational Self-Tests
FIPS 140-3 Security Policy wolfCrypt
For calling applications, the following is required:
FIPS 140-3 Security Policy wolfCrypt
The CO shall use the provided FIPS 140-3 User Guide, hereafter referred to as [UG]. A common name for this document is also the Cryptographic Officer Guidance Manual (COGM). [UG] and COGM are one and the same for this Module. The [UG] has a section specific to each Operational Environment (OE), also referred to as the “Tested Configuration”, that appears on the Module’s certificate and in the above Table 2
FIPS 140-3 Security Policy wolfCrypt
Operation of wolfCrypt in the FIPS 140-3 Approved Mode requires the wolfCrypt library version 5.2.0.1. To verify the fingerprint of the package, calculate the SHA2-256 sum using a FIPS 140-2 or FIPS 140-3 validated cryptographic module. The following command serves as an example: $ shasum -a 256 wolfssl-5.2.0.1-commercial-fips-linuxv5.7z 746341ac6d88b0d6de02277af5b86275361ed106c9ec07559aa57508e218b3f5 Compare the sum to the sum provided with the package. If the sums do not match stop using the Module and contact wolfSSL. To unpack the bundle: $ 7za x wolfssl-5.7.2-commercial-fips-linuxv5.2.0.1.7z 7-Zip... Extracting archive: wolfssl-5.7.2-commercial-fips-linuxv5.2.0.1.7z ... Enter password (will not be echoed): When prompted, enter the password. The password is provided in the distribution email. To build and install wolfCrypt in Approved mode: $ ./configure --enable-fips=v5 $ ./wolfcrypt/test/testwolfcrypt $ sudo make install If you have not received the library with FIPS 140-3 support the ./configure step will fail. Please contact wolfSSL. The enable and disable options required for running in the Approved Mode are automatically set by the FIPS enable option. Any encryption algorithms that are not enabled by the configuration must not be enabled separately. Options affecting wolfSSL usage are still allowed. make check will verify the build and that the library is operating correctly. If make check fails this probably means the In Core Integrity check has failed, which is expected. To verify this do: $ ./wolfcrypt/test/testwolfcrypt wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
FIPS 140-3 Security Policy wolfCrypt ... in my Fips callback, ok = 0, err = 203 message = In Core Integrity check FIPS error hash = 622B4F8714276FF8845DD49DD3AA27FF68A8226C50D5651D320D914A5660B3F5 In core integrity hash check failure, copy above hash into verifyCore[] in fips_test.c and rebuild Copy the value given for the hash in the output, and replace the value of verifyCore[] in ./wolfcrypt/src/fips_test.c with this new value. After updating verifyCore[], recompile the wolfSSL library by running make check again. The In Core Integrity checksum will vary with compiler versions, runtime library versions, target hardware, and build type.
Operation of wolfCrypt in the FIPS 140-3 Approved Mode requires the wolfCrypt library version 5.2.0.1. To verify the fingerprint of the package, calculate the SHA2-256 sum using a FIPS 140-2 or FIPS 140-3 validated cryptographic module. The following command serves as an example: % shasum –a 256 wolfssl-5.7.2-commercial-fips-linuxv5.2.0.1.7z 02da35d0a4d6b8e777236fe30da7a6ff93834fb16939ea16da663773f1b34cf0 And compare the sum to the sum provided with the package. If for some reason the sums do not match stop using the Module and contact wolfSSL. A GUI-based 7-zip extraction may be used. To unpack the bundle from a command shell: % 7za x wolfssl-5.7.2-commercial-fips-linuxv5.2.0.1.7z 7-Zip... Extracting archive: wolfssl-5.7.2-commercial-fips-linuxv5.2.0.1.7z ... Enter password (will not be echoed): When prompted, enter the password. The password is provided in the distribution email. To build and install wolfCrypt for use in a FIPS 140-3 approved mode:
FIPS 140-3 Security Policy wolfCrypt The In Core Integrity checksum will vary with compiler versions, runtime library versions, target hardware, and build type.
The library uses an allocator method to initialize itself after loading, without programmer interaction. The library will perform its own self-test in a thread safe manner.
The library uses the DllMain() function to initialize itself after loading, without programmer interaction. The library will perform its own self-test in a thread safe manner.
The CO shall use the provided [UG].
The Module supports the Cryptographic Officer (CO) operator role and does not support non-administrators.
N/A. The Module does not claim mitigation of other attacks. wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
FIPS 140-3 Security Policy wolfCrypt References
FIPS 140-3 Security Policy wolfCrypt
FIPS 140-3 Security Policy wolfCrypt Acronyms and Definitions • AES: Advanced Encryption Standard • AES-NI: Advanced Encryption Standard New Instructions • API: Application Programming Interface • CAST: Cryptographic Algorithm Self-Test • CAVP: Cryptographic Algorithm Validation Program • CBC: Cipher-Block Chaining • CCM: Counter with CBC-MAC • CMAC: Cipher-based Message Authentication Code • CMVP: Cryptographic Module Validation Program • CO: Cryptographic Officer • CPU: Central Processing Unit • CSP: Critical Security Parameter • CTR: Counter-mode • CVL: Component Validation List • DH: Diffie-Hellman • DRBG: Deterministic Random Bit Generator • DSA: Digital Signature Algorithm • ECB: Electronic Code Book • ECC: Elliptic Curve Cryptography • ECC-CDH: Elliptic Curve Cryptography Cofactor Diffie-Hellman • ECDH: Elliptic Curve Diffie-Hellman • ECDSA: Elliptic Curve Digital Signature Algorithm • EMC: Electromagnetic Compatibility • EMI: Electromagnetic Interference • FFC: Finite Field Cryptography • FIPS: Federal Information Processing Standard • GCM: Galois/Counter Mode • GMAC: Galois Message Authentication Code • GPC: General-Purpose Computer • HMAC: Keyed-Hash Message Authentication Code • IG: Implementation Guidance • IV: Initialization Vector • KAS: Key Agreement Scheme • KAT: Known Answer Test • KDF: Key Derivation Function • LTS: Long Term Support • NIST: National Institute of Standards and Technology • PAA: Processor Algorithm Accelerators • PCT: Pair-wise Consistency Test • PSP: Public Security Parameter • RAM: Random Access Memory wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.
FIPS 140-3 Security Policy wolfCrypt • RNG: Random Number Generator • RSA: Rivest, Shamir, and Adleman Algorithm • RSADP: RSA Decryption Primitive • RSAEP: RSA Encryption Primitive • SHA: Secure Hash Algorithm • SHS: Secure Hash Standard • SSC: Shared Secret Computation • SSP: Sensitive Security Parameter • TLS: Transport Layer Security wolfSSL Inc. Public Material – May be reproduced in its original entirety without revision.