| Standard | FIPS 140-3 |
|---|---|
| Overall level | 1 |
| Module type | Software |
| Embodiment | Multi-Chip Stand Alone |
| Status | Active |
| Sunset date | 7/28/2029 |
| Caveat | When operated in approved mode. No assurance of the minimum strength of generated SSPs (e.g., keys). |
| Vendor | Keeper Security, Inc. |
| Requirement area | Level |
|---|---|
| Roles, Services, and Authentication | 4 |
| Software/Firmware Security | 1 |
| Operational Environment | 1 |
| Physical Security | N/A |
| Non-Invasive Security | N/A |
| Self-Tests | 1 |
| Life-Cycle Assurance | 1 |
| Mitigation of Other Attacks | 1 |
flowchart LR
%% Deterministic review-risk graph for Keeper Security Cryptographic Module v2
%% 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>recovery</i>"]
C3["[high] Unauthenticated /<br/>self-test / status service<br/>surface<br/><i>Show Status</i>"]
C5["[low] Protocol / secure-channel<br/>references (may be KDF<br/>names, not a live channel)<br/><i>TLS<br/>SSH<br/>IKEV</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["Some services may process<br/>input 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["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 Keeper Security Cryptographic Module v2
%% 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>recovery</i><br/>src: text:keyword"]
C3["[high] Unauthenticated / self-test / status service surface<br/><i>Show Status</i><br/>src: securityPolicy.services"]
C5["[low] Protocol / secure-channel references (may be KDF names, not a live channel)<br/><i>TLS<br/>SSH<br/>IKEV</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,C5,C6 clueLow;
class C3 clueHigh;Keeper Security, Inc. Keeper Security Cryptographic Module v2 Non-Proprietary FIPS 140-3 Cryptographic Module Security Policy Software Version: 2.0.0 Date: 11/26/24 Prepared by: Corsec Security, Inc. Keeper Security, Inc.
Chicago, Ill 60607 www.corsec.com https://www.keepersecurity.com/ only in its original entirety (without revision).
| # | Section | Page |
|---|---|---|
| 1 | General | 4 |
| 1.1 | Confirming the Module Checksum, Functionality, and Versioning | 4 |
| 2 | Cryptographic Module Specification | 5 |
| 2.1 | Basic Enforcement | 18 |
| 2.2 | Enforcement and Guidance for GCM IVs | 19 |
| 2.3 | Enforcement and Guidance for use of the Approved PBKDF | 20 |
| 2.4 | Rules for setting the N and the S String in cSHAKE | 21 |
| 2.5 | Guidance for the use of Format-Preserving Encryption | 21 |
| 2.6 | Cryptographic Key Generation | 21 |
| 3 | Cryptographic Module Interfaces | 21 |
| 4 | Roles, Services, and Authentication | 22 |
| 4.1 | Basic Guidance | 22 |
| 4.2 | Assumption of Roles | 23 |
| 4.3 | Services | 24 |
| 5 | Software/Firmware Security | 32 |
| 6 | Operational Environment | 33 |
| 6.1 | Use of External RNG | 33 |
| 6.2 | Additional Enforcement with a Java SecurityManager | 33 |
| 6.3 | Approved Mode Configuration | 33 |
| 6.4 | Guidance for the use of DRBGs and Configuring the JVM's Entropy Source | 35 |
| 7 | Physical Security | 35 |
| 8 | Non-Invasive Security | 35 |
| 9 | Sensitive Security Parameter Management | 35 |
| 9.1 | RBG Entropy Sources | 46 |
| 10 | Self-Tests | 46 |
| 10.1 | Pre-Operational Self-Tests | 46 |
| 10.2 | Conditional Self-Tests | 46 |
| 10.3 | Error Handling | 47 |
| 11 | Life-Cycle Assurance | 48 |
| 12 | Mitigation of Other Attacks | 48 |
| Appendix: References and Definitions | 50 | |
| Claimed | 16 | |
| radix in range of 2..216 in range of 2 | 216 |
| Item | Page |
|---|---|
| Table 1 - Security Levels | 4 |
| Table 2 - Tested Operational Environments | 6 |
| Table 3 - Vendor Affirmed Operational Environments | 9 |
| Table 4 - Approved Algorithms | 16 |
| Claimed | 16 |
| Table 6 - Non-Approved Algorithms Not Allowed in the Approved Mode of Operation | 18 |
| Table 7 - Ports and Interfaces | 22 |
| Table 8 - Roles, Service Commands, Input and Output | 23 |
| Table 9 - Roles and Authentication | 24 |
| Table 10 - Approved Services | 31 |
| Table 11 - Non-Approved Services | 32 |
| Table 12 - SSPs | 45 |
| Table 13 - Non-Deterministic Random Number Generation Specification | 46 |
| Figure 1- Cryptographic boundary | 5 |
| ISO/IEC 24759 | FIPS 140-3 Section Title | Security |
|---|---|---|
| Section 6. Number | 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 | 1 |
This document defines the Security Policy for the Keeper Security, Inc.'s Keeper Security Cryptographic Module v2, hereafter denoted as the Module. The Module is a cryptographic library and has a Multi-Chip Stand Alone embodiment. The Module meets FIPS 140- 3 overall Level 1 requirements. The SW version is 2.0.0. The FIPS 140-3 security levels for the Module are given in Table 1 as follows: N/A N/A Table 1 - Security Levels 1.1 Confirming the Module Checksum, Functionality, and Versioning The module checksum, functionality, and versioning can be confirmed by executing the command: java -cp bc-fips-2.0.0.jar org.bouncycastle.util.DumpInfo which should display: Version Info: BouncyCastle Security Provider (FIPS edition) v2.0.0 FIPS Ready Status: READY Module SHA-256 HMAC: 164c8ae41945cb85fdc65666fc4de7301a65d29659ecd455ee5199c7d42d107e Indicating the jar represents the software release BC-FJA 2.0.0 (correlating to “Keeper Security Cryptographic Module v2”), that it has successfully passed all its startup tests, and that the software release is confirmed to have a HMAC of: 164c8ae41945cb85fdc65666fc4de7301a65d29659ecd455ee5199c7d42d107e only in its original entirety (without revision).
Cryptographic Module Specification The Module is intended for use by US Federal agencies and other markets that require a FIPS 140-3 validated Cryptographic Library. The Module is of type software and the module has a Multi-Chip Stand Alone embodiment; the cryptographic boundary is the Java Archive (JAR) file, bc-fips2.0.0.jar. This module is the only software component within the Cryptographic Boundary and the only software component that carries out cryptographic functions covered by FIPS 140-3. Figure 1 shows the logical relationship of the cryptographic module to the other software and hardware components of the computer. The BC classes are executed on the Java Virtual Machine (JVM) using the classes of the Java Runtime Environment (JRE). The JVM is the interface to the computer’s Operating System (OS) that is the interface to the various physical components of the computer. Figure 1- Cryptographic boundary The cryptographic module was tested on the following operational environments on the generalpurpose computer (GPC) platforms detailed in Table 2, which is also the TOEPP (Tested Operational Environment’s Physical Perimeter) of the module. only in its original entirety (without revision).
| Name | Operating System | Hardware Platform | Processor | Paa Pai | # |
|---|---|---|---|---|---|
| 1 | VMware Photon OS 4.0 with JRE 8 on VMware ESXi 8.0 | Dell PowerEdge R650 | Intel Xeon Gold 6330 | Without PAA | 1 |
| 2 | VMware Photon OS 4.0 with JRE 11 on VMware ESXi 8.0 | Dell PowerEdge R650 | Intel Xeon Gold 6330 | Without PAA | 2 |
| 3 | VMware Photon OS 4.0 with JRE 17 on VMware ESXi 8.0 | Dell PowerEdge R650 | Intel Xeon Gold 6330 | Without PAA | 3 |
| 4 | VMware Photon OS 5.0 with JRE 21 on VMware ESXi 8.0 | Dell PowerEdge R650 | Intel Xeon Gold 6330 | Without PAA | 4 |
| 1 | Java SE Runtime Environment v8 (1.8) with HP-UX | Generic Hardware Platform | 1 | ||
| 2 | Java SE Runtime Environment v11 (1.11) with HP-UX | Generic Hardware Platform | 2 | ||
| 3 | Java SE Runtime Environment v17 (1.17) with HP-UX | Generic Hardware Platform | 3 | ||
| 4 | Java SE Runtime Environment v21 (21) with HP-UX | Generic Hardware Platform | 4 | ||
| 5 | Java SE Runtime Environment v8 (1.8) with Linux Centos | Generic Hardware Platform | 5 | ||
| 6 | Java SE Runtime Environment v11 (1.11) with Linux Centos | Generic Hardware Platform | 6 | ||
| 7 | Java SE Runtime Environment v17 (1.17) with Linux Centos | Generic Hardware Platform | 7 | ||
| 8 | Java SE Runtime Environment v21 (21) with Linux Centos | Generic Hardware Platform | 8 | ||
| 9 | Java SE Runtime Environment v8 (1.8) with Red Hat Enterprise Linux | Generic Hardware Platform | 9 | ||
| 10 | Java SE Runtime Environment v11 (1.11) with Red Hat Enterprise Linux | Generic Hardware Platform | 10 | ||
| 11 | Java SE Runtime Environment v17 (1.17) with Red Hat Enterprise Linux | Generic Hardware Platform | 11 | ||
| 12 | Java SE Runtime Environment v21 (21) with Red Hat Enterprise Linux | Generic Hardware Platform | 12 |
| Name | Operating System | Hardware Platform | Processor | Paa Pai | # |
|---|---|---|---|---|---|
| 1 | VMware Photon OS 4.0 with JRE 8 on VMware ESXi 8.0 | Dell PowerEdge R650 | Intel Xeon Gold 6330 | Without PAA | 1 |
| 2 | VMware Photon OS 4.0 with JRE 11 on VMware ESXi 8.0 | Dell PowerEdge R650 | Intel Xeon Gold 6330 | Without PAA | 2 |
| 3 | VMware Photon OS 4.0 with JRE 17 on VMware ESXi 8.0 | Dell PowerEdge R650 | Intel Xeon Gold 6330 | Without PAA | 3 |
| 4 | VMware Photon OS 5.0 with JRE 21 on VMware ESXi 8.0 | Dell PowerEdge R650 | Intel Xeon Gold 6330 | Without PAA | 4 |
| 1 | Java SE Runtime Environment v8 (1.8) with HP-UX | Generic Hardware Platform | 1 | ||
| 2 | Java SE Runtime Environment v11 (1.11) with HP-UX | Generic Hardware Platform | 2 | ||
| 3 | Java SE Runtime Environment v17 (1.17) with HP-UX | Generic Hardware Platform | 3 | ||
| 4 | Java SE Runtime Environment v21 (21) with HP-UX | Generic Hardware Platform | 4 | ||
| 5 | Java SE Runtime Environment v8 (1.8) with Linux Centos | Generic Hardware Platform | 5 | ||
| 6 | Java SE Runtime Environment v11 (1.11) with Linux Centos | Generic Hardware Platform | 6 | ||
| 7 | Java SE Runtime Environment v17 (1.17) with Linux Centos | Generic Hardware Platform | 7 | ||
| 8 | Java SE Runtime Environment v21 (21) with Linux Centos | Generic Hardware Platform | 8 | ||
| 9 | Java SE Runtime Environment v8 (1.8) with Red Hat Enterprise Linux | Generic Hardware Platform | 9 | ||
| 10 | Java SE Runtime Environment v11 (1.11) with Red Hat Enterprise Linux | Generic Hardware Platform | 10 | ||
| 11 | Java SE Runtime Environment v17 (1.17) with Red Hat Enterprise Linux | Generic Hardware Platform | 11 | ||
| 12 | Java SE Runtime Environment v21 (21) with Red Hat Enterprise Linux | Generic Hardware Platform | 12 | ||
| 13 | Java SE Runtime Environment v8 (1.8) with Linux Debian | Generic Hardware Platform | 13 | ||
| 14 | Java SE Runtime Environment v11 (1.11) with Linux Debian | Generic Hardware Platform | 14 | ||
| 15 | Java SE Runtime Environment v17 (1.17) with Linux Debian | Generic Hardware Platform | 15 | ||
| 16 | Java SE Runtime Environment v21 (21) with Linux Debian | Generic Hardware Platform | 16 | ||
| 17 | Java SE Runtime Environment v8 (1.8) with Linux Fedora | Generic Hardware Platform | 17 | ||
| 18 | Java SE Runtime Environment v11 (1.11) with Linux Fedora | Generic Hardware Platform | 18 | ||
| 19 | Java SE Runtime Environment v17 (1.17) with Linux Fedora | Generic Hardware Platform | 19 | ||
| 20 | Java SE Runtime Environment v21 (21) with Linux Fedora | Generic Hardware Platform | 20 | ||
| 21 | Java SE Runtime Environment v8 (1.8) with Linux Oracle RHC | Generic Hardware Platform | 21 | ||
| 22 | Java SE Runtime Environment v11 (1.11) with Linux Oracle RHC | Generic Hardware Platform | 22 | ||
| 23 | Java SE Runtime Environment v17 (1.17) with Linux Oracle RHC | Generic Hardware Platform | 23 | ||
| 24 | Java SE Runtime Environment v21 (21) with Linux Oracle RHC | Generic Hardware Platform | 24 | ||
| 25 | Java SE Runtime Environment v8 (1.8) with Linux Oracle UEK | Generic Hardware Platform | 25 | ||
| 26 | Java SE Runtime Environment v11 (1.11) with Linux Oracle UEK | Generic Hardware Platform | 26 | ||
| 27 | Java SE Runtime Environment v17 (1.17) with Linux Oracle UEK | Generic Hardware Platform | 27 | ||
| 28 | Java SE Runtime Environment v21 (21) with Linux Oracle UEK | Generic Hardware Platform | 28 | ||
| 29 | Java SE Runtime Environment v17 (1.8) with Linux Photon | Generic Hardware Platform | 29 | ||
| 30 | Java SE Runtime Environment v17 (1.11) with Linux Photon | Generic Hardware Platform | 30 | ||
| 31 | Java SE Runtime Environment v17 (1.17) with Linux Photon | Generic Hardware Platform | 31 | ||
| 32 | Java SE Runtime Environment v21 (21) with Linux Photon | Generic Hardware Platform | 32 | ||
| 33 | Java SE Runtime Environment v8 (1.8) with Linux SUSE | Generic Hardware Platform | 33 | ||
| 34 | Java SE Runtime Environment v11 (1.11) with Linux SUSE | Generic Hardware Platform | 34 | ||
| 35 | Java SE Runtime Environment v17 (1.17) with Linux SUSE | Generic Hardware Platform | 35 | ||
| 36 | Java SE Runtime Environment v21 (21) with Linux SUSE | Generic Hardware Platform | 36 | ||
| 37 | Java SE Runtime Environment v8 (1.8) with Linux Ubuntu | Generic Hardware Platform | 37 | ||
| 38 | Java SE Runtime Environment v11 (1.11) with Linux Ubuntu | Generic Hardware Platform | 38 | ||
| 39 | Java SE Runtime Environment v17 (1.17) with Linux Ubuntu | Generic Hardware Platform | 39 | ||
| 40 | Java SE Runtime Environment v21 (21) with Linux Ubuntu | Generic Hardware Platform | 40 | ||
| 41 | Java SE Runtime Environment v8 (1.8) with Mac OS X | Generic Hardware Platform | 41 | ||
| 42 | Java SE Runtime Environment v11 (1.11) with Mac OS X | Generic Hardware Platform | 42 | ||
| 43 | Java SE Runtime Environment v8 (1.8) with Microsoft Windows | Generic Hardware Platform | 43 | ||
| 44 | Java SE Runtime Environment v11 (1.11) with Microsoft Windows | Generic Hardware Platform | 44 | ||
| 45 | Java SE Runtime Environment v17 (1.17) with Microsoft Windows | Generic Hardware Platform | 45 | ||
| 46 | Java SE Runtime Environment v21 (21) with Microsoft Windows | Generic Hardware Platform | 46 | ||
| 47 | Java SE Runtime Environment v8 (1.8) with Microsoft Windows Server | Generic Hardware Platform | 47 | ||
| 48 | Java SE Runtime Environment v11 (1.11) with Microsoft Windows Server | Generic Hardware Platform | 48 | ||
| 49 | Java SE Runtime Environment v17 (1.17) with Microsoft Windows Server | Generic Hardware Platform | 49 | ||
| 50 | Java SE Runtime Environment v21 (21) with Microsoft Windows Server | Generic Hardware Platform | 50 | ||
| 51 | Java SE Runtime Environment v8 (1.8) with Microsoft Windows XP | Generic Hardware Platform | 51 | ||
| 52 | Java SE Runtime Environment v11 (1.11) with Microsoft Windows XP | Generic Hardware Platform | 52 | ||
| 53 | Java SE Runtime Environment v17 (1.17) with Microsoft Windows XP | Generic Hardware Platform | 53 | ||
| 54 | Java SE Runtime Environment v21 (21) with Microsoft Windows XP | Generic Hardware Platform | 54 | ||
| 55 | Java SE Runtime Environment v8 (1.8) with Solaris | Generic Hardware Platform | 55 | ||
| 56 | Java SE Runtime Environment v11 (1.11) with Solaris | Generic Hardware Platform | 56 | ||
| 57 | Java SE Runtime Environment v17 (1.17) with Solaris | Generic Hardware Platform | 57 | ||
| 58 | Java SE Runtime Environment v21 (21) with Solaris | Generic Hardware Platform | 58 | ||
| 59 | Java SE Runtime Environment v8 (1.8) with AIX | Generic Hardware Platform | 59 | ||
| 60 | Java SE Runtime Environment v11 (1.11) with AIX | Generic Hardware Platform | 60 | ||
| 61 | Java SE Runtime Environment v17 (1.17) with AIX | Generic Hardware Platform | 61 | ||
| 62 | Java SE Runtime Environment v21 (21) with AIX | Generic Hardware Platform | 62 | ||
| 63 | Java SE Runtime Environment v17 (1.17) with Red Hat Enterprise Linux | Generic hardware platform with Intel Cascade Lakes | 63 | ||
| 64 | Java SE Runtime Environment v21 (21) with Red Hat Enterprise Linux | Generic hardware platform with Intel Cascade Lakes | 64 | ||
| 65 | Java SE Runtime Environment v17 (1.17) with Red Hat Enterprise Linux | Generic hardware platform with Intel Sapphire Rapids | 65 | ||
| 66 | Java SE Runtime Environment v21 (21) with Red Hat Enterprise Linux | Generic hardware platform with Intel Sapphire Rapids | 66 | ||
| 67 | Java SE Runtime Environment v17 (1.17) with Ubuntu | Generic hardware platform with Intel Cascade Lakes | 67 | ||
| 68 | Java SE Runtime Environment v21 (21) with Ubuntu | Generic hardware platform with Intel Cascade Lakes | 68 | ||
| 69 | Java SE Runtime Environment v17 (1.17) with Ubuntu | Generic hardware platform with Intel Sapphire Rapids | 69 | ||
| 70 | Java SE Runtime Environment v21 (21) with Ubuntu | Generic hardware platform with Intel Sapphire Rapids | 70 | ||
| 71 | Java SE Runtime Environment v17 (1.17) with ClevOS | Generic hardware platform with Intel Cascade Lake | 71 | ||
| 72 | Java SE Runtime Environment v21 (21) with ClevOS | Generic hardware platform with Intel Cascade Lake | 72 | ||
| 73 | Java SE Runtime Environment v17 (1.17) with ClevOS | Generic hardware platform with Intel Sapphire Rapids | 73 | ||
| 74 | Java SE Runtime Environment v21 (21) with ClevOS | Generic hardware platform with Intel Sapphire Rapids | 74 | ||
| 75 | Java SE Runtime Environment v17 (1.17) with ClevOS | Generic hardware platform with Intel Haswell | 75 | ||
| 76 | Java SE Runtime Environment v21 (21) with ClevOS | Generic hardware platform with Intel Haswell | 76 | ||
| 77 | Java SE Runtime Environment v17 (1.17) with ClevOS | Generic hardware platform with Intel Broadwell | 77 | ||
| 78 | Java SE Runtime Environment v21 (21) with ClevOS | Generic hardware platform with Intel Broadwell | 78 |
# Table 2 - Tested Operational Environments The cryptographic module will remain compliant with the FIPS 140-3 validation when operating on any general-purpose computer (GPC) provided that:
only in its original entirety (without revision).
only in its original entirety (without revision).
Table 3 - Vendor Affirmed Operational Environments For the avoidance of doubt, it is hereby stated that the CMVP makes no statement as to the correct operation of the module or the security strengths of the generated keys when so ported if the specific operational environment is not listed on the validation certificate. The Module implements the Approved and Non-Approved but Allowed cryptographic functions with no security claimed listed in Tables 4 and 5 below. There are algorithms, modes, and keys that have been CAVP tested but not used by the module. Only the algorithms, modes/methods, and key lengths/curves/moduli shown in this table are used by the module. The Module supports both Approved and Non-Approved mode of operation. Please see Section 6.3 for configuration of the Module in Approved mode of operation. Please see Section 11 for initialization steps. only in its original entirety (without revision).
| Name | CAVP Cert | Mode Method | Key Size | Use Function | Use / Function |
|---|---|---|---|---|---|
| AES [FIPS 197, SP 800-38A], AES- FF1 Format Preserving Encryption [SP 800-38G] | A4399 | ECB, CBC, OFB, CFB8, CFB128, CTR, FF1 | Key sizes: 128, 192, 256 bits | Encryption, Decryption | |
| AES-CBC Ciphertext Stealing (CS) [Addendum to SP 800-38A, Oct 2010] | A4399 | CBC-CS1, CBC-CS2, CBC-CS3 | Key sizes: 128, 192, 256 bits | Encryption, Decryption | |
| CCM [SP 800-38C] | A4399 | N/A | Key sizes: 128, 192, 256 bits | Generation, Authentication | |
| CMAC [SP 800-38B] | A4399 | AES | Key sizes: AES with 128, 192, 256 bits | Generation, Authentication | |
| GCM/GMAC1 [SP 800-38D] | A4399 | N/A | Key sizes: 128, 192, 256 bits | Generation, Authentication | |
| Counter DRBG [SP 800-90Ar1] | A4399 | N/A | AES-128, AES-192, AES- 256 | AES-CTR DRBG. | |
| Hash DRBG [SP 800-90Ar1] | A4399 | N/A | SHA sizes: SHA-1, SHA2- 224, SHA2-256, SHA2-384, SHA2-512, SHA2-512/224, SHA2-512/256 | Hash DRBG | |
| HMAC DRBG [SP 800-90Ar1] | A4399 | N/A | SHA sizes: SHA-1, SHA2- 224, SHA2-256, SHA2-384, SHA2-512, SHA2-512/224, SHA2-512/256 | HMAC DRBG | |
| DSA2 [FIPS 186-4] | A4399 | N/A | Key sizes: 1024, 2048, 3072 bits (1024 only for SigVer) | PQG Generation, PQG Verification, Key Pair Generation, Signature Generation, Signature Verification | |
| ECDSA [FIPS 186-4] | A4399 | N/A | Curves/Key sizes: P-192*, P- 224, P-256, P-384, P-521, K- 163*, K-233, K-283, K-409, K-571, B-163*, B-233, B- 283, B-409, B-571 * Curves only used for Signature Verification and Public Key Validation | Public Key Generation, Signature Generation, Signature Verification, Public Key Validation | |
| KDA-HKDF [SP 800-56C- rev2] | A4399 | N/A | PRFs: HMAC SHA-1, HMAC SHA-224, HMAC SHA-256, HMAC SHA-384, HMAC SHA-512, HMAC SHA-512/224, HMAC SHA- 512/256, HMAC SHA3-224, HMAC SHA3-256, HMAC SHA3-384, HMAC SHA3- 512 | Key Derivation | |
| HMAC [FIPS 198-1] | A4399 | N/A | SHA sizes: SHA-1, SHA- 224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256, SHA3-224, SHA3-256, SHA3-384, SHA3-512 | Generation, Authentication | |
| KAS-FFC3 [SP 800-56A- rev3] | A4399 | N/A | Domain Parameter Generation Methods/Scheme: ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192, MODP-2048, MODP-3072, MODP-4096, MODP-6144, MODP-8192 dhHybrid1, MQV2, dhEphem, dhHybrid, OneFlow, MQV1, dhOneFlow, dhStatic Groups specified above providing between 112 and 200 bits of encryption strength | Key Agreement | |
| KAS-ECC3 [SP 800-56A- rev3] | A4399 | N/A | Domain Parameter Generation Methods/Scheme: P-224, P- 256, P-384, P-521,K-233, K- 283, K-409, K-571, B-233, B-283, B-409, B-571 ephemeralUnified, fullMqv, fullUnified, onePassDh, onePassMqv, onePassUnified, staticUnified Curves specified above providing between 112 and 256 bits of encryption strength | Key Agreement | |
| KDA, One Step [SP 800-56C- rev2] | A4399 | N/A | PRFs: SHA-1, SHA-224, SHA-256, SHA-384, SHA- 512, SHA-512/224, SHA- 512/256, SHA3-224, SHA3- 256, SHA3-384, SHA3-512, HMAC SHA-1, HMAC SHA-224, HMAC SHA-256, HMAC SHA-384, HMAC SHA-512, HMAC SHA- 512/224, HMAC SHA- 512/256, HMAC SHA3-224, HMAC SHA3-256, HMAC SHA3-384, HMAC SHA3- 512, KMAC-128, KMAC- 256 | Key Derivation | |
| KDA, Two Step [SP 800-56C- rev2] | A4399 | N/A | PRFs: HMAC SHA-1, HMAC SHA-224, HMAC SHA-256, HMAC SHA-384, HMAC SHA-512, HMAC SHA-512/224, HMAC SHA- 512/256, HMAC SHA3-224, HMAC SHA3-256, HMAC SHA3-384, HMAC SHA3- 512, KMAC-128, KMAC- 256 | Key Derivation | |
| KDF, Existing Application- Specific4 [SP 800-135- rev1] | CVL A4399 | N/A | TLS v1.0/1.1 KDF SHA sizes: SHA2-256 , SHA2-384, SHA2-512 | Key Derivation | |
| KDF, Existing Application- Specific4 [SP 800-135- rev1] | CVL A4399 | N/A | TLS 1.2 KDF SHA sizes: SHA2-256, SHA2-384, SHA2-512 | Key Derivation | |
| KDF, Existing Application- Specific4 [SP 800-135- rev1] | CVL A4399 | N/A | SNMP KDF Password Length: 64, 8192 | Key Derivation | |
| KDF, Existing Application- Specific4 [SP 800-135- rev1] | CVL A4399 | N/A | SSH KDF SHA sizes: SHA2-224 | Key Derivation | |
| KDF, Existing Application- Specific4 [SP 800-135- rev1] | CVL A4399 | N/A | X9.63 KDF SHA sizes: SHA2-224, SHA2-256, SHA2-384, SHA2-512 | Key Derivation Can be used along with KAS- SSC | |
| KDF, Existing Application- Specific4 [SP 800-135- rev1] | CVL A4399 | N/A | IKEv2 KDF SHA sizes:SHA-1, SHA2- 224, SHA2-256, SHA2-384, SHA2-512 | Key Derivation | |
| KDF, Existing Application- Specific4 [SP 800-135- rev1] | CVL A4399 | N/A | SRTP KDF | Key Derivation | |
| KDF, Password- Based [SP 800-132] | A4399 | N/A | Options: PBKDF with Option 1a Types: HMAC-based KDF using SHA-1, SHA-224, SHA-256, SHA-384, SHA- 512 | Key Derivation | |
| KDF, using Pseudorandom Functions5 [SP 800-108- rev1] | A4399 | Counter Mode, Feedback Mode, Double- Pipeline Iteration Mode | Types: CMAC-based KBKDF with AES, HMAC- based KBKDF with SHA-1, SHA-224, SHA-256, SHA- 384, SHA-512, SHA3-224, SHA3-256, SHA3-384, SHA3-512 | Key Derivation | |
| Key Wrapping Using Block Ciphers6 [SP 800-38F] | A4399 | AES KW, KWP | Key sizes: 128, 192, 256 bits (Key establishment methodology providing 128, 192 or 256 bits of encryption strength) | Key Wrapping | |
| RSA [FIPS 186-4, ANSI X9.31- 1998 and PKCS #1 v2.1 (PSS and PKCS1.5)] | A4399 | N/A | Key sizes: 2048, 3072, 4096 | Key Pair Generation | |
| RSA [FIPS 186-4, ANSI X9.31- 1998 and PKCS #1 v2.1 (PSS and PKCS1.5)] | A4399 | N/A | Key sizes: 2048, 3072, 4096 | Signature Generation | |
| RSA [FIPS 186-4, ANSI X9.31- 1998 and PKCS #1 v2.1 (PSS and PKCS1.5)] | A4399 | N/A | Key sizes: 1024, 2048, 3072, 4096 | Signature Verification | |
| RSA [FIPS 186- 2, ANSI X9.31- 1998 and PKCS #1 v2.1 (PSS and PKCS1.5)] | A4399 | N/A | Key sizes: 1024, 1536, 2048, 3072, 4096 | Signature Verification | |
| RSA Decryption Primitive | CVL A4399 | N/A | 2048 | Component Test | |
| RSA Signature Primitive | CVL A4399 | N/A | 2048 | Component Test | |
| KTS-IFC [SP 800-56B- rev2, Section 7.2.2] | A4399 | N/A | RSA-OAEP with, and without, key confirmation. Key sizes: 2048, 3072, 4096 providing between 112 and 152 bits of encryption strength Key Generation Method: rsakpg2-crt | Key Transport | |
| KAS-IFC [SP 800-56B- rev2, Section 7.2.1] | A4399 | N/A | RSASVE with, and without, key confirmation. Key sizes: 2048, 3072, 4096 providing between 112 and 152 bits of encryption strength | Key Agreement | |
| Safe Primes [SP 800-56A- rev3] | A4399 | N/A | Parameter sets: ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192, MODP-2048, MODP-3072, MODP-4096, MODP-6144, MODP-8192 | Key Generation, Key Verification | |
| SHS [FIPS 180-4] | A4399 | N/A | SHA sizes: SHA-1, SHA- 224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256 | Digital Signature Generation, Digital Signature Verification, non- Digital Signature Applications | |
| SHA-3, SHAKE [FIPS 202] | A4399 | N/A | SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256 | Digital Signature Generation, Digital Signature Verification, non- Digital Signature Applications | |
| SHA-3 Derived Functions [SP 800-185] | A4399 | N/A | Types: cSHAKE-128, KMAC-128, TupleHash-128, ParallelHash-128, cSHAKE- 256, KMAC-256, TupleHash-256, ParallelHash-256 | Digital Signature Generation, Digital Signature Verification, non- Digital Signature Applications | |
| CKG using output from DRBG7 [SP 800-133- rev2] | Vendor Affirmed IG D.H | N/A | Section 5.1 (Asymmetric from DRBG) Section 6.1 (Symmetric from DRBG) | Key Generation | |
| MD5 within TLS | Allowed per IG 2.4.A, no security claimed | MD5 used within a TLS handshake | |||
| AES (non-compliant8) | Non-approved modes for AES | ||||
| ARC4 (RC4) | ARC4/RC4 stream cipher | ||||
| Blowfish | Blowfish block cipher | ||||
| Camellia | Camellia block cipher | ||||
| CAST5 | CAST5 block cipher | ||||
| ChaCha20 | ChaCha20 stream cipher | ||||
| ChaCha20-Poly1305 | AEAD ChaCha20 using Poly1305 as the MAC | ||||
| DES | DES block cipher | ||||
| Diffie-Hellman KAS (non- compliant9) | non-compliant key agreement methods |
N/A N/A N/A N/A N/A GCM encryption with an internally generated IV, see section 2.2 concerning external IVs. IV generation is compliant with IG C.H. only in its original entirety (without revision).
N/A N/A N/A N/A only in its original entirety (without revision).
N/A N/A N/A Keys are not established directly into the module using the key agreement algorithms. only in its original entirety (without revision).
N/A ApplicationSpecific4 N/A ApplicationSpecific4 N/A ApplicationSpecific4 N/A ApplicationSpecific4 N/A ApplicationSpecific4 N/A ApplicationSpecific4 N/A No parts of the protocols (TLS, SSHv2, X9.63, IKEv2, SRTP, SNMPv3), other than the approved cryptographic algorithms and the KDFs, have been reviewed or tested by the CAVP and CMVP. only in its original entirety (without revision).
ApplicationSpecific4 N/A KDF, PasswordBased N/A Mode, DoublePipeline N/A N/A Note: CAVP testing is not provided for use of the PRFs SHA-512/224 and SHA-512/256. These must not be used in approved mode. Keys are not established directly into the module using key unwrapping. only in its original entirety (without revision).
N/A N/A N/A N/A 7.2.2] N/A 7.2.1] N/A N/A N/A only in its original entirety (without revision).
| Name | CAVP Cert | Mode Method | Key Size | Use Function | Use / Function |
|---|---|---|---|---|---|
| SHA-3, SHAKE [FIPS 202] | A4399 | N/A | SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256 | Digital Signature Generation, Digital Signature Verification, non- Digital Signature Applications | |
| SHA-3 Derived Functions [SP 800-185] | A4399 | N/A | Types: cSHAKE-128, KMAC-128, TupleHash-128, ParallelHash-128, cSHAKE- 256, KMAC-256, TupleHash-256, ParallelHash-256 | Digital Signature Generation, Digital Signature Verification, non- Digital Signature Applications | |
| CKG using output from DRBG7 [SP 800-133- rev2] | Vendor Affirmed IG D.H | N/A | Section 5.1 (Asymmetric from DRBG) Section 6.1 (Symmetric from DRBG) | Key Generation | |
| MD5 within TLS | Allowed per IG 2.4.A, no security claimed | MD5 used within a TLS handshake | |||
| AES (non-compliant8) | Non-approved modes for AES | ||||
| ARC4 (RC4) | ARC4/RC4 stream cipher | ||||
| Blowfish | Blowfish block cipher | ||||
| Camellia | Camellia block cipher | ||||
| CAST5 | CAST5 block cipher | ||||
| ChaCha20 | ChaCha20 stream cipher | ||||
| ChaCha20-Poly1305 | AEAD ChaCha20 using Poly1305 as the MAC | ||||
| DES | DES block cipher | ||||
| Diffie-Hellman KAS (non- compliant9) | non-compliant key agreement methods |
| Name | CAVP Cert | Mode Method | Key Size | Use Function | Use / Function |
|---|---|---|---|---|---|
| SHA-3, SHAKE [FIPS 202] | A4399 | N/A | SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256 | Digital Signature Generation, Digital Signature Verification, non- Digital Signature Applications | |
| SHA-3 Derived Functions [SP 800-185] | A4399 | N/A | Types: cSHAKE-128, KMAC-128, TupleHash-128, ParallelHash-128, cSHAKE- 256, KMAC-256, TupleHash-256, ParallelHash-256 | Digital Signature Generation, Digital Signature Verification, non- Digital Signature Applications | |
| CKG using output from DRBG7 [SP 800-133- rev2] | Vendor Affirmed IG D.H | N/A | Section 5.1 (Asymmetric from DRBG) Section 6.1 (Symmetric from DRBG) | Key Generation | |
| MD5 within TLS | Allowed per IG 2.4.A, no security claimed | MD5 used within a TLS handshake | |||
| AES (non-compliant8) | Non-approved modes for AES | ||||
| ARC4 (RC4) | ARC4/RC4 stream cipher | ||||
| Blowfish | Blowfish block cipher | ||||
| Camellia | Camellia block cipher | ||||
| CAST5 | CAST5 block cipher | ||||
| ChaCha20 | ChaCha20 stream cipher | ||||
| ChaCha20-Poly1305 | AEAD ChaCha20 using Poly1305 as the MAC | ||||
| DES | DES block cipher | ||||
| Diffie-Hellman KAS (non- compliant9) | non-compliant key agreement methods | ||||
| DSA (non-compliant10) | non-approved digest signatures using DSA | ||||
| DSTU4145 | DSTU4145 EC algorithm | ||||
| ECDSA (non-compliant10) | non-approved digest signatures using ECDSA | ||||
| EdDSA | Ed25519 and Ed448 signature algorithms | ||||
| ElGamal | ElGamal key transport algorithm | ||||
| FF3-1 | Format Preserving Encryption – AES FF3-1 | ||||
| GOST28147 | GOST-28147 block cipher | ||||
| GOST3410-1994 | GOST-3410-1994 algorithm | ||||
| GOST3410-2001 | GOST-3410-2001 EC algorithm | ||||
| GOST3410-2012 | GOST-3410-2012 EC algorithm | ||||
| GOST3411 | GOST-3411-1994 message digest | ||||
| GOST3411-2012-256 | GOST-3411-2012 256-bit message digest | ||||
| GOST3411-2012-512 | GOST-3411-2012 512-bit message digest | ||||
| HMAC-GOST3411 | GOST-3411 HMAC | ||||
| HMAC-MD5 | MD5 HMAC | ||||
| HMAC-RIPEMD128 | RIPEMD128 HMAC | ||||
| HMAC-RIPEMD160 | RIPEMD160 HMAC | ||||
| HMAC-RIPEMD256 | RIPEMD256HMAC | ||||
| HMAC-RIPEMD320 | RIPEMD320 HMAC | ||||
| HMAC-TIGER | TIGER HMAC | ||||
| HMAC-WHIRLPOOL | WHIRLPOOL HMAC | ||||
| HSS | HSS signature scheme (RFC 8708) | ||||
| IDEA | IDEA block cipher | ||||
| KAS11 using SHA-512/224 or SHA-512/256 | Key Agreement using SHA-512/224 and SHA-512/256 based KDFs | ||||
| KBKDF using SHA-512/224 or SHA-512/256 (non-compliant) | PBKDF2 using the PRFs SHA-512/224 and SHA- 512/256 | ||||
| LMS | LMS signature scheme (RFC 8708) | ||||
| MD5 | MD5 message digest | ||||
| OpenSSL PBKDF (non- compliant) | OpenSSL PBE key derivation scheme | ||||
| PKCS#12 PBKDF (non- compliant) | PKCS#12 PBE key derivation scheme | ||||
| PKCS#5 Scheme 1 PBKDF (non- compliant) | PKCS#5 PBE key derivation scheme | ||||
| Poly1305 | Poly1305 message MAC | ||||
| PRNG X9.31 | X9.31 PRNG | ||||
| RC2 | RC2 block cipher | ||||
| RIPEMD128 | RIPEMD128 message digest | ||||
| RIPEMD160 | RIPEMD160 message digest | ||||
| RIPEMD256 | RIPEMD256 message digest | ||||
| RIPEMD320 | RIPEMD320 message digest | ||||
| RSA (non-compliant12) | Non-compliant RSA signature schemes | ||||
| RSA KTS (non-compliant13) | Non-compliant RSA key transport schemes | ||||
| SCrypt (non-compliant) | Scrypt using non-compliant PBKDF2 | ||||
| SEED | SEED block cipher | ||||
| Serpent | Serpent block cipher | ||||
| SipHash | SipHash MAC | ||||
| SHACAL-2 | SHACAL2 block cipher | ||||
| TIGER | TIGER message digest | ||||
| Triple-DES | Triple-DES cipher | ||||
| Twofish | Twofish block cipher | ||||
| WHIRLPOOL | WHIRLPOOL message digest | ||||
| XDH | X25519 and X448 key agreement algorithms |
N/A N/A N/A Table 4 - Approved Algorithms Table 5 - Non-Approved Algorithms Allowed in the Approved Mode of Operation with No The resulting key or a generated seed is an unmodified output from a DRBG. Support for additional modes of operation. Support for additional key sizes and the establishment of keys of less than 112 bits of security strength. only in its original entirety (without revision).
Deterministic signature calculation, support for additional digests, and key sizes. Keys are not directly established into the module using key agreement or transport techniques. only in its original entirety (without revision).
Table 6 - Non-Approved Algorithms Not Allowed in the Approved Mode of Operation 2.1 Basic Enforcement The module design corresponds to the Module security rules. This section documents the security rules enforced by the cryptographic module to implement the security requirements of this FIPS 140-3 Level 1 module:
11. The module does not output intermediate key values. HMAC algorithms specified in the Approved Algorithms table produce truncated versions of the HMAC in question. The right most bits are truncated as per the NIST SP 800-107 rev1. When the module is used within the context of Java Security Manager or the system/security property org.bouncycastle.fips.approved_only is set to true, the module will start in approved mode and non-approved services are not accessible in this mode. When the module is not used within the context of Java Security Manager, the module will start in a non-approved mode by default. From non-approved mode to approved mode: It is a combination of granted permission (a) and request to change mode (b): a. org.bouncycastle.crypto.CryptoServicesPermission “changeToApprovedModeEnabled” b. CryptoServicesRegistrar.setApprovedMode(true) The CSPs made available in non-approved mode will not be accessible, once the thread transitions into approved mode. The CSPs generated using the non-approved mode cannot be passed or shared with algorithms operating in approved mode, and vice-versa. This is done by indicating within the class (object), instantiating the key, as being created in an approved mode or non-approved mode. Any attempt by a thread within the execution of the module to use the key in an opposite mode will result in an exception being generated by the module. For example, if an RSA private key has been created in either approved or non-approved mode, then any request to access that key will first need to see if the thread making the request is in the same mode. From approved mode to non-approved mode: The module cannot transition from approved mode to non-approved mode. To initiate the module in non-approved mode, either it should not be used in the context of Java Security Manager, or the module should have the permission “org.bouncycastle.crypto.CryptoServicesPermission unapprovedModeEnabled” granted by the Java Security Manager. 2.2 Enforcement and Guidance for GCM IVs IVs for GCM can be generated randomly, or via a FipsNonceGenerator. Where an IV is not generated within the module the module supports the importing of GCM IVs. In approved mode, when a GCM IV is generated randomly, the module enforces the use of an approved DRBG in line with Section 8.2.2 of SP 800-38D. In approved mode, when a GCM IV is generated using the FipsNonceGenerator a counter is used as the basis for the nonce and the IV is generated in accordance with TLS protocol. Rollover of the counter in the FipsNonceGenerator will result in an IllegalStateException indicating the FipsNonceGenerator is exhausted and, as per IG C.H, where used for TLS 1.2, rollover will terminate any TLS session in process using the current key and the exception can only be recovered from by using a new handshake and creating a new FipsNonceGenerator. In approved mode, importing a GCM IV for encryption that originates from outside the module is non-conformant. A service indicator for IV usage is provided in the module through Java logging. Setting the logging level to Level.FINE for the named logger “org.bouncycastle.jcajce.provider.BaseCipher” will produce a log message when an IV which may have been produced outside the module and/or not from a compliant source is detected. The log message will be of the standard form including the detail: only in its original entirety (without revision).
FINE: Passed in GCM nonce detected: <IV value> where <IV value> is a HEX representation of the IV in use. Setting the logging level to Level.FINER will produce an additional log message for any GCM IV which is used if the previous Level.FINE message is not activated. Log messages in this case will show the detail as: FINER: GCM nonce detected: <IV value> where <IV value> is a HEX representation of the IV in use. Per IG C.H, in the event module power is lost and restored the consuming application must ensure that any of its AES-GCM keys used for encryption or decryption are re-distributed. The AES-GCM Mode falls under: 2.3
For users interested in introducing memory hardness as a layer on top of the PBKDF the scrypt augmentation to PBDKF based on HMAC SHA-256 (as described in RFC 7914) is also available. 2.4 Rules for setting the N and the S String in cSHAKE The cSHAKE algorithm offers to input string for customizing the output of the cSHAKE function, the Function-Name input (N) and the Customization String (S). The Function-Name input (N) is reserved for values specified by NIST and should only be set to the appropriate NIST specified value. Any other use of N is non-conformant. The Customization String (S) is available to allow users to customize the cSHAKE function as they wish. The length of S is limited to the available size of a byte array in the JVM running the module. 2.5 Guidance for the use of Format-Preserving Encryption The module supports both FF1 and, in non-approved mode, FF3-1 format preserving encryption. Below shows the parameter constraints applicable to the module’s implementation. SP800-38G Format-Preserving Encryption Constraints radix in range of 2..216 in range of 2..216 radixminlen >= 1000000 >= 1000000 minlen >= 2 octets
An attempt to use the FF1 or FF3-1 without meeting the radixminlen constraint or by exceeding maxlen will result in an IllegalArgumentException. Note: only FF1 should be used in approved mode. 2.6 Cryptographic Key Generation The module performs Cryptographic Key Generation in conformance to FIPS 140-3 IG D.H. The CKG for symmetric keys and seeds used for generating asymmetric keys is performed as per Section 4 of the SP800-133r2 and compliant with FIPS 186-4 and SP800-90Arev1 for DRBG. The seed used in asymmetric key generation is the direct output of SP800-90Arev1 DRBG. Cryptographic Module Interfaces The Keeper Security Cryptographic Module v2is a software module, and, therefore, control of the physical ports is outside of the module’s scope. The module does provide a set of logical interfaces which are mapped to the following FIPS 140-3 defined logical interfaces: data input, data output, control input, status output, and power. When the module performs self-tests, is in an error state, is generating keys, or performing zeroization, the module prevents all output on the logical data output interface as only the thread performing the operation has access to the data. The module only in its original entirety (without revision).
| Name | Physical Port | Logical Interface |
|---|---|---|
| Data Input | API input parameters – plaintext and/or ciphertext data. | Data Input |
| Data Output | API output parameters and return values – plaintext and/or ciphertext data. | Data Output |
| Control Input | API method calls – method calls, or input parameters, that specify commands and/or control data used to control the operation of the module. | Control Input |
| Status Output | API output parameters and return/error codes that provide status information used to indicate the state of the module. | Status Output |
| Name | Roles | Input | Output |
|---|---|---|---|
| Initialize Module and Run Self-Tests on Demand | CO/User | N/A | Exception in case of failure |
| Show Status | CO/User | N/A | Boolean |
| Info Service | CO/User | N/A | Module name and version |
| Zeroize / Power-off | CO/User | N/A | Shutdown indication |
| Data Encryption | CO/User | Key, Plaintext | Ciphertext |
| Data Decryption | CO/User | Key, Ciphertext | Plaintext |
| MAC Calculation | CO/User | Key, Message | MAC |
| Signature Authentication | CO/User | Key, Message | Signature |
| Signature Verification | CO/User | Key, Message, Signature | Boolean |
| DRBG (SP800-90Arev1) Output | CO/User | N/A | Data |
| Message Hashing | CO/User | Message | Hash |
| Keyed Message Hashing | CO/User | Key, Message | Hash |
| TLS Key Derivation Function | CO/User | TLS Parameters | Data |
| SP 800-108-rev1 KDF | CO/User | KDF Parameters | Data |
| SSH Derivation Function | CO/User | SSH Parameters | Data |
| X9.63 Derivation Function | CO/User | X9.63 Parameters | Data |
| SP 800-56C-rev2 OneStep/TwoStep Key Derivation Function (KDM) | CO/User | KDM Parameters | Data |
| IKEv2 Derivation Function | CO/User | IKEv2 Parameters | Data |
| SRTP Derivation Function | CO/User | SRTP Parameters | Data |
| PBKDF | CO/User | Password, PBKDF Parameters | Data |
| Key Agreement Schemes | CO/User | Key Agreement keys, parameters | Data |
| Key Wrapping | CO/User | Wrapping key, Key | Wrapped key |
| Key Unwrapping | CO/User | Unwrapping Key, Wrapped key | Key |
| Key Verification | CO/User | Key Pair | Boolean |
| Entropy Callback | CO/User | N/A | Random bits |
| DRBG Health-Tests | CO/User | N/A | N/A |
| SSP Export Operation | CO/User | SSP | Data |
| Utility | CO/User | N/A | N/A |
is single-threaded, and in an error state, the module does not return any output data, only an error value. The module does not implement control output interface. The mapping of the FIPS 140-3 logical interfaces to the module is described in Table 7. Table 7 - Ports and Interfaces Roles, Services, and Authentication 4.1 Basic Guidance The jar file representing the module needs to be installed in a JVM’s class path in a manner appropriate to its use in applications running on the JVM. Functionality in the module is provided in two ways. At the lowest level there are distinct classes that provide access to the approved and non-approved services provided by the module. A more abstract level of access can also be gained using strings providing operation names passed into the module’s Java cryptography provider through the APIs described in the Java Cryptography Architecture (JCA) and the Java Cryptography Extension (JCE). When the module is being used in approved mode, classes providing implementations of algorithms which are not approved, or allowed, are explicitly disabled. SSPs such as private and secret keys implement the Destroyable interface. Where appropriate these SSPs can be zeroized on demand by invoking the destroy() method. The return of the destroy() method indicates that the zeroization is complete. Roles, with corresponding service with input and output is specified in Table 8 below: N/A N/A N/A N/A only in its original entirety (without revision).
N/A N/A N/A N/A N/A N/A Table 8 - Roles, Service Commands, Input and Output 4.2 Assumption of Roles The module supports two distinct operator roles, User and Cryptographic Officer (CO). The cryptographic module implicitly maps the two roles to the services. A user is considered the owner of the thread that instantiates the module and, therefore, only one concurrent user is allowed. only in its original entirety (without revision).
| Role | Authentication Method | Authentication Strength |
|---|---|---|
| CO | N/A – Authentication not required for Level 1 | N/A |
| User | N/A – Authentication not required for Level 1 | N/A |
Table 9 lists all operator roles supported by the module. The module does not support a maintenance role and/or bypass capability. The module does not support authentication. 4.3 N/A N/A Table 9 - Roles and Authentication Services Table 10 lists the services and a description of each service with the usage and roles. Services in the module are accessed via the public APIs of the jar file. The ability of a thread to invoke non-approved services depends on whether it has been registered with the module as approved mode only. In approved only mode no non-approved services are accessible. In the presence of a Java SecurityManager approved mode services specific to a context, such as DSA and ECDSA for use in TLS, require specific permissions to be configured in the JVM configuration by the Cryptographic Officer or User. In the absence of a Java SecurityManager specific services related to protocols such as TLS are available, however must only be used in relation to those protocols. only in its original entirety (without revision).
| Name | Description | Roles | Csps Accessed | Approved Functions | Access | Indicator |
|---|---|---|---|---|---|---|
| Initialize Module and Run Self- Tests on Demand | The JRE will call the static constructor for self-tests on module initialization | CO/User | N/A | N/A | N/A | Flag |
| Show Status | A user can call FipsStatus.IsReady() at any time to determine if the module is ready. CryptoServicesRegistrar.IsIn ApprovedOnlyMode() can be called to determine the approved mode of operation | CO/User | N/A | N/A | N/A | Flag |
| Info Service | A user can call DumpInfo.main() at any time to display the module version, checksum, and status information | CO/User | N/A | N/A | N/A | Flag |
| Zeroize / Power- off | SSPs can be zeroized on demand by invoking the destroy() method or power cycle the module. | CO/User | All SSPs | N/A | Z | Flag |
| Data Encryption | Used to encrypt data | CO/User | AES Encryption Key | AES-ECB, AES- CBC, AES-OFB, AES-CFB8, AES-CFB128, AES-CTR, AES- CBC-CS, CCM, GCM, FF1 | E | Flag |
| Data Decryption | Used to decrypt data | CO/User | AES Decryption Key | AES-ECB, AES- CBC, AES-OFB, AES-CFB8, AES-CFB128, AES-CTR, AES- CBC-CS, CCM, GCM, FF1 | E | Flag |
| MAC Calculation | Used to calculate data integrity codes with CMAC | CO/User | AES Authentication Key, HMAC Authentication Key, KMAC Authentication Key | CMAC, GMAC | E | Flag |
| Signature Authentication | Used to generate signatures (DSA, ECDSA, RSA) | CO/User | DSA Signing Key, EC Signing Key, RSA Signing Key | DSA, ECDSA, RSA | E | Flag |
| Signature Verification | Used to verify digital signatures | CO/User | DSA Verification Key, EC Verification Key, RSA Verification Key | DSA, ECDSA, RSA | E | Flag |
| DRBG (SP800- 90Arev1) output | Used for random number, IV and key generation | CO/User | AES Encryption Key, AES Decryption Key, AES Authentication Key, AES Wrapping Key, DH Agreement Private Key, DH Agreement Public Key, DRBG Seed, Internal State V and C value, and DRBG Key, DSA Signing Key, DSA Verification Key, EC Agreement Private Key, EC Agreement Public Key, EC Signing Key, EC Verification Key, HMAC Authentication Key, KMAC Authentication Key, RSA Signing Key, RSA Verification Key, RSA Key Transport Private Key, RSA Key Transport Public Key | Counter DRBG, Hash DRBG, HMAC DRBG | G | Flag |
| DRBG Seed, Internal State V and C value, and DRBG Key | CO/User | DRBG Seed, Internal State V and C value, and DRBG Key | E | |||
| Message Hashing | Used to generate message digest, SHAKE output | CO/User | N/A | SHS, SHA-3, SHAKE, SHA-3 Derived Functions (cSHAKE, TupleHash, ParallelHash) | N/A | Flag |
| Keyed Message Hashing | Used to calculate data integrity codes with HMAC and KMAC | CO/User | HMAC Authentication Key, KMAC Authentication Key | HMAC, SHA-3 Derived Functions (KMAC) | E | Flag |
| TLS Key Derivation Function | Used to calculate a value suitable to be used for a master secret in TLS | CO/User | TLS KDF Secret Value | HKDF, KDF, Existing Application- Specific (TLS KDF) | E | Flag |
| SP 800-108-rev1 KDF | Used to calculate a value suitable to be used for a secret key | CO/User | SP800-108-rev1 KDF Secret Value | KBKDF, using Pseudorandom Functions | E | Flag |
| SSH Derivation Function | Used to calculate a value suitable to be used for a secret key | CO/User | SSH KDF Secret Value | Existing Application- Specific (SSH KDF) | E | Flag |
| X9.63 Derivation Function | Used to calculate a value suitable to be used for a secret key | CO/User | DH Agreement Private Key, EC Agreement Private Key, RSA Signing Key | Existing Application- Specific (X9.63 KDF) | G | Flag |
| X9.63 KDF Secret Value | CO/User | X9.63 KDF Secret Value | E | |||
| SP 800-56C-rev2 OneStep/TwoStep Key Derivation Function (KDM) | Used to calculate a value suitable to be used for a secret key | CO/User | DH Agreement Private Key, EC Agreement Private Key, RSA Signing Key | HKDF, KDF One Step, KDF Two Step. | G | Flag |
| SP800-56C-rev2 KDF Secret Value | CO/User | SP800-56C-rev2 KDF Secret Value | E | |||
| IKEv2 Derivation Function | Used to calculate a value suitable to be used for a secret key | CO/User | IKEv2 KDF Secret Value | Existing Application- Specific (IKEv2) | E | Flag |
| SRTP Derivation Function | Used to calculate a value suitable to be used for a secret key | CO/User | SRTP KDF Secret Value | Existing Application- Specific (SRTP) | E | Flag |
| PBKDF | Used to generate a key using an encoding of a password and message hash | CO/User | HMAC Authentication Key, KMAC Authentication Key | KDF, Password- Based | G | Flag |
| HMAC Authentication Key, KMAC Authentication Key, PBDKF Secret | CO/User | HMAC Authentication Key, KMAC Authentication Key, PBDKF Secret | E | |||
| Key Agreement Schemes | Used to calculate key agreement values (SP800- 56A-rev3, Diffie-Hellman) | CO/User | AES Encryption Key, AES Decryption Key, AES Authentication Key, AES Wrapping Key, HMAC Authentication Key, KMAC Authentication Key | KAS-FFC, KAS- ECC, KAS-IFC, SafePrimes | G | Flag |
| DH Agreement Private Key, EC Agreement Private Key, RSA Key Transport Private Key | CO/User | DH Agreement Private Key, EC Agreement Private Key, RSA Key Transport Private Key | E | |||
| Key Wrapping | Used to encrypt a key value (RSA, AES) | CO/User | AES Wrapping Key, HMAC Authentication Key, KMAC Authentication Key, RSA Key Transport Private Key | AES KW, AES KWP, KTS-IFC | E | Flag |
| Key Unwrapping | Used to decrypt a key value (RSA, AES) | CO/User | AES Wrapping Key, HMAC Authentication Key, KMAC Authentication Key, RSA Key Transport Public Key | AES KW, AES KWP, KTS-IFC | E | Flag |
| Key Verification | Used to verify key pair | CO/User | EC Signing Key, EC Verification Key | ECDSA KeyVer | E | Flag |
| Entropy Callback | Gathers entropy in a passive manner from a user-provided function | CO/User | DRBG Seed, Internal State V and C value, and DRBG Key | DRBG, CKG | G | Flag |
| DRBG Health- Tests | Used to perform checks of incoming entropy against Section 4.4 of SP800-90B | CO/User | N/A | DRBG | N/A | Flag |
| SSP Export Operation | Returns a CSP as data that can be used for later output | CO/User | AES Encryption Key, AES Decryption Key, AES Authentication Key, AES Wrapping Key, DH Agreement Private Key, DH Agreement Public Key, DSA Signing Key, DSA Verification Key, EC Agreement Private Key, EC Agreement Public Key, EC Signing Key, EC Verification Key, HMAC Authentication Key, KMAC Authentication Key, RSA Signing Key, RSA Verification Key, RSA Key Transport Private Key, RSA Key Transport Public Key | N/A | R | Flag |
| Utility | Miscellaneous utility functions, does not access CSPs | CO/User | N/A | N/A | N/A | Flag |
N/A N/A N/A N/A N/A N/A N/A N/A N/A Zeroize / Poweroff Z N/A Flag is accessed by calling the method CryptoServicesRegistrar.isInApprovedOnlyMode() - this method will return true if the thread is running in approved mode, false otherwise. in its original entirety (without revision).
E E E E E in its original entirety (without revision).
G E N/A N/A in its original entirety (without revision).
E E E ApplicationSpecific (SSH E G E G E ApplicationSpecific (TLS in its original entirety (without revision).
ApplicationSpecific (IKEv2) E ApplicationSpecific (SRTP) E PasswordBased G E G E E in its original entirety (without revision).
E E E G DRBG HealthTests N/A N/A in its original entirety (without revision).
N/A R N/A N/A N/A Table 10 - Approved Services The modes of access shown in the table above are defined as:
| Name | Description | Roles | Approved Functions | Indicator |
|---|---|---|---|---|
| Data Encryption | Used to encrypt data | CO/User | Triple-DES | Flag |
| Data Decryption | Used to decrypt data | CO/User | Triple-DES | Flag |
| MAC Calculation | Used to calculate data integrity codes with CMAC | CO/User | Triple-DES CMAC | Flag |
| DRBG (SP800- 90Arev1) output | Used for random number, IV and key generation | CO/User | ctrDRBG-Triple-DES | Flag |
| Key Agreement Schemes | Used to calculate key agreement values | CO/User | Triple-DES | Flag |
| Key Wrapping | Used to encrypt a key value (Triple- DES) | CO/User | Triple-DES KW | Flag |
| Key Unwrapping | Used to decrypt a key value (Triple- DES) | CO/User | Triple-DES KW | Flag |
CASTs are preformed prior to the first use of services related to the test target. CASTs also run periodically on service invocation. Initial CAST self–tests are available on demand by power cycling the module and then invoking the service related to the test target. Operational Environment The module operates in a modifiable operational environment under the FIPS 140-3 definitions. The module runs on a GPC running one of the operating systems specified in the approved operational environment list in Table 2. Each approved operating system manages processes and threads in a logically separated manner. The Module’s user is considered the owner of the calling application that instantiates the Module within the process space of the Java Virtual Machine. The module optionally uses the Java Security Manager and starts in approved mode by default when used with the Java Security Manager. 6.1 Use of External RNG The module makes use of the JVM's configured SecureRandom entropy source to provide entropy when required. The module will request entropy as appropriate to the security strength and seeding configuration for the DRBG that is using it and for the default DRBG will request a minimum of
256 bits of entropy. In approved mode the minimum amount of entropy that can be requested by a
DRBG is 112 bits. The module will wait until the SecureRandom.generateSeed() returns the requested amount of entropy, blocking if necessary. The JVMs entropy source can be configured through setting the security property: securerandom.strongAlgorithms in the JVM's java.security file. 6.2 Additional Enforcement with a Java SecurityManager In the presence of a Java SecurityManager approved mode services specific to a context, such as DSA and ECDSA for use in TLS, require specific policy permissions to be configured in the JVM configuration by the Cryptographic Officer or User. The SecurityManager can also be used to restrict the ability of particular code bases to examine CSPs. See Section 6.3 for further advice. In the absence of a Java SecurityManager, specific services related to protocols such as TLS are available, however must only be used in relation to those protocols. 6.3 Approved Mode Configuration In default operation the module will start with all algorithms and services enabled. If the module detects that the system property org.bouncycastle.fips.approved_only is set to true the module will start in approved mode and non-approved mode functionality will not be available. If the underlying JVM is running with a Java Security Manager installed the module will be running in approved mode with secret and private key export disabled. When the module is not used within the context of the Java Security Manager, it will start by default in the non-approved mode. Use of the module with a Java Security manager requires the setting of some basic permissions to allow the module HMAC-SHA-256 software integrity test to take place as well as to allow the in its original entirety (without revision).
| Permission | Settings | Req | Usage |
|---|
module itself to examine secret and private keys. The basic permissions required for the module to operate correctly with a Java Security manager are indicated by a Y: Available Java Permissions RuntimePermission “getProtectionDomain” Y Allows checksum to be carried out on jar. RuntimePermission “accessDeclaredMembers” Y Allows use of reflection API within the provider. PropertyPermission “java.runtime.name”, “read” N Only if configuration properties are used. SecurityPermission "putProviderProperty.BCFIPS" N Only if provider installed during execution. CryptoServicesPermission “unapprovedModeEnabled” N Only if non-approved mode algorithms required. CryptoServicesPermission “changeToApprovedModeEnabled” N Only if threads allowed to change modes. CryptoServicesPermission “exportSecretKey” N To allow export of secret keys only. CryptoServicesPermission “exportPrivateKey” N To allow export of private keys only. CryptoServicesPermission “exportKeys” Y Required to be applied for the module itself. Optional for any other codebase. CryptoServicesPermission “tlsNullDigestEnabled” N Only required for TLS digest calculations. CryptoServicesPermission “tlsPKCS15KeyWrapEnabled” N Only required if TLS is used with RSA encryption. CryptoServicesPermission “tlsAlgorithmsEnabled” N Enables both NullDigest and PKCS15KeyWrap. CryptoServicesPermission “defaultRandomConfig” N Allows setting of default SecureRandom. CryptoServicesPermission “threadLocalConfig” N Required to set a thread local property in the CryptoServicesRegistrar CryptoServicesPermission “globalConfig” N Required to set a global property in the CryptoServicesRegistrar. The JVM's entropy source is checked according to SP 800-90B, Section 4.4 using the suggest C values for the Repetition Count Test (Section 4.4.1) and the Adaptive Proportion Test (Section 4.4.2) by default. These values can also be configured by the Cryptographic Officer using the security property: “org.bouncycastle.entropy.factors” which takes a comma separated list of C values, one for 4.4.1 and one for 4.4.2, and a value of H. in its original entirety (without revision).
6.4 Guidance for the use of DRBGs and Configuring the JVM's Entropy Source A user can instantiate the default Approved DRBG for the module explicitly by using SecureRandom.getInstance("DEFAULT", "BCFIPS"), or by using a BouncyCastleFipsProvider object instead of the provider name as appropriate. This will seed the Approved DRBG from the live entropy source of the JVM with a number of bits of entropy appropriate to the security strength of the default Approved DRBG configured for the module. The JVM's entropy source is checked according to SP 800-90B, Section 4.4 using the suggest C values for the Repetition Count Test (Section 4.4.1) and the Adaptive Proportion Test (Section 4.4.2). These values can also be configured by the user using the security property: “org.bouncycastle.entropy.factors” which takes a comma separated list of C values, one for 4.4.1 and one for 4.4.2, and a value of H. For the default the property would be set as: org.bouncycastle.entropy.factors: 4, 13, 8.0 in the java.security property file. An additional option is available using the Approved Hash_DRBG and the process outlined in SP800 90A, Section 8.6.5. This can be turned on by following the instructions in Section 2.3 of the User Guide. The two DRBGs are instantiated in a chain as a "Source DRBG" to seed the "Target DRBG" in accordance with Section 7 of Draft NIST SP 800-90C, where the Target DRBG is the default Approved DRBG used by the module. The initial seed and the subsequent reseeds for the DRBG chain come from the live entropy source configured for the JVM. The DRBG chain will reseed automatically by pausing for 20 requests (which will usually equate to 5120 bytes). An entropy gathering thread reseeds the DRBG chain when it has gathered sufficient entropy (currently 256 bits) from the live entropy source. Once reseeded, the request counter is reset and the reseed process begins again. The “Source DRBG” in the chain is internal to the module and inaccessible to the user to ensure it is only used for generating seeds for the default Approved DRBG of the module. The user shall ensure that the entropy source is configured per Section 6.1 of this Security Policy and will block, or fail, if it is unable to provide the amount of entropy requested. Physical Security This section is not applicable as the module is a software module. Non-Invasive Security This section is not applicable to this module. Sensitive Security Parameter Management All Sensitive Security Parameters (SSPs) used by the Module are described in this section in Table
| Name | Strength | Security Function | Generation | Establishment | Storage | Import Export | Key/SSP Name/Type | Zeroisation |
|---|---|---|---|---|---|---|---|---|
| AES encryption19 | 128, 192, 256 bits | AES ECB, CBC, OFB, CFB8, CFB128, CTR, FF1, CBC- CS1, CBC- CS2, CBC- CS3, GCM, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | AES Encryption Key | destroy() service call or host platform power cycle |
| AES decryption | 128, 192, 256 bits | AES ECB, CBC, OFB, CFB8, CFB128, CTR, FF1, CBC- CS1, CBC- CS2, CBC- CS3, GCM, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | AES Decryption Key | destroy() service call or host platform power cycle |
| AES CMAC/GMAC | 128, 192, 256 bits | AES CMAC, GMAC, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | AES Authentication Key | destroy() service call or host platform power cycle |
| AES (128/192/256) key wrapping key for KTS | 128, 192, 256 bits | AES KW, KWP, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | AES Wrapping Key | destroy() service call or host platform power cycle |
| Diffie-Hellman key agreement | 112, 128, 152, 176, 200 bits | KAS-FFC, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | DH Agreement Private Key | destroy() service call or host platform power cycle |
| Diffie-Hellman key agreement | 112, 128, 152, 176, 200 bits | KAS-FFC, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | DH Agreement Public Key | Not zeroized, public key value known outside of module |
| DSA signature generation | 112, 128 bits | DSA Signature Generation, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | DSA Signing Key | destroy() service call or host platform power cycle |
| DSA signature verification | 80, 112, 128 bits | DSA Signature Verification, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | DSA Verification Key | Not zeroized, public key value known outside of module |
| EC (P-224, P- 256, P-384, P- 521, K-233, K- 283, K-409, K- 571, B-233, B- 283, B-409 and B-571) key agreement | 112, 128, 192, 256 bits | KAS-ECC, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | EC Agreement Private Key | destroy() service call or host platform power cycle |
| EC (P-224, P- 256, P-384, P- 521, K-233, K- 283, K-409, K- 571, B-233, B- 283, B-409 and B-571) key agreement | 112, 128, 192, 256 bits | KAS-ECC, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | EC Agreement Public Key | Not zeroized, public key value known outside of module |
| ECDSA (P-224, P-256, P-384, P-521, K-233, K-283, K-409, K-571, B-233, B-283, B-409 and B-571) signature generation. | 112, 128, 192, 256 bits | ECDSA Signature Generation, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | EC Signing Key | destroy() service call or host platform power cycle |
| ECDSA (P-192, P-224, P-256, P-384, P-521, K-163, K-233, K-283, K-409, K-571, B-163, B-233, B-283, B-409 and B- 571) signature verification. | 80, 112, 128, 192, 256 bits | ECDSA Signature Verification, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | EC Verification Key | Not zeroized, public key value known outside of module |
| Keyed-Hash calculation (SHA-1, SHA- 2, SHA-3, KMAC). | 112-256 bits | SHA-1, SHA2, SHA3, KMAC, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | HMAC/KMA C Authentication Key | destroy() service call or host platform power cycle |
| RSA signature generation | 112, 128, 152 bits | RSA Signature Generation, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | RSA Signing Key | destroy() service call or host platform power cycle |
| RSA signature verification | 80, 112, 128, 152 bits | RSA Signature Verification, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | RSA Verification Key | Not zeroized, public key value known outside of module |
| RSA key transport and decryption | 112, 128, 152 bits | KTS-IFC, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | RSA Key Transport Private Key20 | destroy() service call or host platform power cycle |
| RSA key transport | 112, 128, 152 bits | KTS-IFC, CKG A4399 | DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | RSA Key Transport Public Key20 | Not zeroized, public key value known outside of module |
| Key Derivation | 112, 128, 192, 256 bits | KDF IKEv2 A4399 | Generated as output of an IKEv2 agreement scheme | N/A | N/A, the module does not provide persistent storage | N/A | IKEv2 KDF Secret Value | destroy() service call or host platform power cycle |
| Key Derivation | 112-256 bits | PBKDF A4399 | Generated as output of a PBE key and a PRF | N/A | N/A, the module does not provide persistent storage | N/A | PBKDF Secret Value | destroy() service call or host platform power cycle |
| Key Derivation | 112, 128, 192, 256 bits | KDA OneStep SP800-56Cr2 KDA TwoStep SP800-56Cr2 A4399 | Generated as output of an agreement scheme | N/A | N/A, the module does not provide persistent storage | N/A | SP 800-56C- rev2 OneStep/TwoS tep KDF Secret Value | destroy() service call or host platform power cycle |
| Key Derivation | 112, 128, 192, 256 bits | KDF SP800- 108 A4399 | Generated as output of an agreement scheme | N/A | N/A, the module does not provide persistent storage | N/A | SP 800-108- rev1 KDF Secret Value | destroy() service call or host platform power cycle |
| Key Derivation | 128, 192, 256 bits | KDF SRTP A4399 | Generated as output of an SRTP agreement scheme | N/A | N/A, the module does not provide persistent storage | N/A | SRTP KDF Secret Value | destroy() service call or host platform power cycle |
| Key Derivation | 80, 112, 128, 192, 256 bits | KDF SSH A4399 | Generated as output of an SSH agreement scheme | N/A | N/A, the module does not provide persistent storage | N/A | SSH KDF Secret Value | destroy() service call or host platform power cycle |
| Used to derive keys using TLS KDF | 384 bits | KDF TLS A4399 | Protocol version (2 bytes) and 46 bytes from a DRBG16 | N/A | N/A, the module does not provide persistent storage | Import17, Export18 | TLS Premaster Secret Value | destroy() service call or host platform power cycle |
| Key Derivation | 112, 128, 192, 256 bits | KDF TLS A4399 | Generated as output of TLS agreement scheme | N/A | N/A, the module does not provide persistent storage | N/A | TLS KDF Secret Value | destroy() service call or host platform power cycle |
| Key Derivation | 112, 128, 192, 256 bits | KDF ANS 9.63 A4399 | Generated as output of an agreement scheme | N/A | N/A, the module does not provide persistent storage | N/A | X9.63 KDF Secret Value | destroy() service call or host platform power cycle |
| Random Number Generation | >128 bits | N/A | N/A | N/A | N/A, the module does not provide persistent storage | Obtained from the entropy source | Entropy Input String | destroy() service call or host platform power cycle |
| Internal use | 128, 192, 256 bits | N/A | N/A | N/A | N/A, the module does not provide persistent storage | Obtained from the entropy source | CTR DRBG Seed | Immediately after use or host platform power cycle |
| Internal use | 128 bits | N/A | From seed value | N/A | N/A, the module does not provide persistent storage | N/A | CTR DRBG V Value | reseed() service call or host platform power cycle |
| Internal use | 128, 192, 256 bits | N/A | From DRBG V value | N/A | N/A, the module does not provide persistent storage | N/A | CTR DRBG Key | reseed() service call or host platform power cycle |
| Internal use | 112, 128, 192, 256 bits | N/A | N/A | N/A | N/A, the module does not provide persistent storage | From external entropy source | Hash DRBG Seed | Immediately after use or host platform power cycle |
| Internal use | 112, 128, 192, 256 bits | N/A | From seed value | N/A | N/A, the module does not provide persistent storage | N/A | Hash DRBG V Value | reseed() service call or host platform power cycle |
| Internal use | 112, 128, 192, 256 bits | N/A | From DRBG V value | N/A | N/A, the module does not provide persistent storage | N/A | Hash DRBG C Value | reseed() service call or host platform power cycle |
| Internal use | 112, 128, 192, 256 bits | N/A | N/A | N/A | N/A, the module does not provide persistent storage | From external entropy source | HMAC DRBG Seed | Immediately after use or host platform power cycle |
| Internal use | 112, 128, 192, 256 bits | N/A | From seed value | N/A | N/A, the module does not provide persistent storage | N/A | HMAC DRBG V Value | reseed() service call or host platform power cycle |
| Internal use | 112, 128, 192, 256 bits | N/A | From DRBG V value | N/A | N/A, the module does not provide persistent storage | N/A | HMAC DRBG Key | reseed() service call or host platform power cycle |
| Used as seed for asymmetric key generation or for symmetric key generation | 128, 192, 256 bits | N/A | DRBG | N/A | N/A, the module does not provide persistent storage | N/A | DRBG Output | destroy() service call or host platform power cycle |
FF1, CBCCS1, CBCCS2, CBCCS3, GCM, N/A FF1, CBCCS1, CBCCS2, CBCCS3, GCM, N/A Key generator used in conjunction with an approved DRBG. Import done via key constructor and/or factory (Electronic Entry). Export done via key recovery using getEncoded() method and followed by separate step to export key details as either plaintext or encrypted (Electronic Entry). The AES-GCM key and IV is generated randomly per IG C.H, and the Initialization Vector (IV) is a minimum of 96 bits. In the event module power is lost and restored, the consuming application must ensure that any of its AES-GCM keys used for encryption or decryption are re-distributed. in its original entirety (without revision).
N/A N/A N/A N/A in its original entirety (without revision).
N/A N/A N/A EC (P-224, P256, P-384, P521, K-233, K283, K-409, K571, B-233, B283, B-409 and N/A EC (P-224, P256, P-384, P521, K-233, K283, K-409, K571, B-233, B283, B-409 and in its original entirety (without revision).
N/A N/A C N/A in its original entirety (without revision).
N/A N/A N/A N/A RSA key transport using PKCS#1 1.5 padding is deprecated through 2023 and disallowed after 2023. in its original entirety (without revision).
N/A N/A N/A N/A N/A N/A KDF SP800108 N/A N/A N/A N/A in its original entirety (without revision).
N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A in its original entirety (without revision).
N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A in its original entirety (without revision).
N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A in its original entirety (without revision).
Table 12 - SSPs in its original entirety (without revision).
| Name | Key Size | |
|---|---|---|
| Details | Minimum number of bits of | Entropy sources |
| entropy | entropy | |
| As per FIPS 140-3 IG 9.3.A Section 2b, a minimum of 16 bytes is required from the source configured for seed generation for the JVM. The entropy reader will block until the seed generator has provided the minimum number of bytes. | 128 | Passive Entropy |
9.1 The module’s use of Non-Deterministic Random Number Generators is determined by the settings described in Section 6.1. Table 13 - Non-Deterministic Random Number Generation Specification Self-Tests CASTs are performed prior to the first use of services related to the test target. CASTs also run periodically on service invocation. Initial CAST self–tests are available on demand by power cycling the module and then invoking the service related to the test target. 10.1 Pre-Operational Self-Tests Each time the module is powered up, it performs the pre-operational self-tests to confirm that sensitive data have not been damaged. The pre-operational tests include the Software Integrity test, which verifies the module using HMAC-SHA2-256, and the HMAC and SHS Conditional Cryptographic Algorithm Self-Tests (CAST) which are run prior to the Software Integrity test to ensure the correctness of the HMAC used. Pre-operational self–tests are available on demand by power cycling the module. 10.2 Conditional Self-Tests The module performs conditional self-tests when the conditions specified for cryptographic algorithm self-test and pair-wise consistency tests occur. Below are the self-tests implemented: Conditional Cryptographic Algorithm Self-Test:
Life-Cycle Assurance Vulnerabilities found in the module will be reported on the National Vulnerability Database, located at https://nvd.nist.gov/. Researchers and users are encouraged to report any security related concerns to feedbackcrypto@bouncycastle.org. A PGP public key can be provided if confidentiality is required around the report. Please find the procedures for secure installation, initialization, startup and operation of the module: The module exists as part of the running JVM as such:
advantage of undetected errors in the use of RSA private keys with CRT values and, if exploitable, can be used to discover the private value of the RSA key. its original entirety (without revision).
Appendix: References and Definitions The following standards are referred to in this Security Policy. ANSI X9.31 X9.31-1998, Digital Signatures using Reversible Public Key Cryptography for the Financial Services Industry (rDSA), September 9, 1998 FIPS 140-3 Security Requirements for Cryptographic modules, March 22, 2019 FIPS 180-4 Secure Hash Standard (SHS) FIPS 186-3 Digital Signature Standard (DSS) FIPS 186-4 Digital Signature Standard (DSS) FIPS 197 Advanced Encryption Standard FIPS 198-1 The Keyed-Hash Message Authentication Code (HMAC) FIPS 202 SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions IG Implementation Guidance for FIPS PUB 140-3 and the Cryptographic Module Validation Program PKCS#1 v2.1 RSA Cryptography Standard PKCS#5 Password-Based Cryptography Standard PKCS#12 Personal Information Exchange Syntax StandardRecommendation for the Triple Data Encryption Algorithm (TDEA) Block Cipher SP 800-38A Recommendation for Block Cipher Modes of Operation: Three Variants of Ciphertext Stealing for CBC Mode SP 800-38B Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication SP 800-38C Recommendation for Block Cipher Modes of Operation: The CCM Mode for Authentication and Confidentiality SP 800-38D Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC SP 800-38F Recommendation for Block Cipher Modes of Operation: Methods for Key Wrapping SP 800-38G Recommendation for Block Cipher Modes of Operation: Methods for FormatPreserving Encryption SP 800-56A-rev3 Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography SP 800-56B-rev2 Recommendation for Pair-Wise Key Establishment Schemes Using Integer Factorization Cryptography SP 800-56C-rev2 Recommendation for Key Derivation through Extraction-then-Expansion SP 800-67-rev2 Recommendation for the Triple Data Encryption Algorithm (TDEA) Block Cipher SP 800-89 Recommendation for Obtaining Assurances for Digital Signature Applications SP 800-90A Recommendation for Random Number Generation Using Deterministic Random Bit Generators SP 800-90B Recommendation for the Entropy Sources Used for Random Bit Generation SP 800-108-rev1 Recommendation for Key Derivation Using Pseudorandom Functions SP 800-132 Recommendation for Password-Based Key Derivation SP 800-133-rev2 Recommendation for Cryptographic Key Generation SP 800-135-rev1 Recommendation for Existing Application
The following are acronyms used in this Security Policy: AES Advanced Encryption Standard API Application Programming Interface BC Bouncy Castle BC-FJA Bouncy Castle FIPS Java API CBC Cipher-Block Chaining CCM Counter with CBC-MAC CDH Computational Diffie-Hellman CFB Cipher Feedback Mode CMAC Cipher-based Message Authentication Code CMVP Crypto Module Validation Program CO Cryptographic Officer CPU Central Processing Unit CS Ciphertext Stealing CSP Critical Security Parameter CTR Counter-mode CVL Component Validation List DES Data Encryption Standard DH Diffie-Hellman DRAM Dynamic Random Access Memory DRBG Deterministic Random Bit Generator DSA Digital Signature Authority DSTU4145 Ukrainian DSTU-4145-2002 Elliptic Curve Scheme EC Elliptic Curve ECB Electronic Code Book ECC Elliptic Curve Cryptography ECDSA Elliptic Curve Digital Signature Authority EdDSA Edwards Curve DSA using Ed25519, Ed448 EMC Electromagnetic Compatibility EMI Electromagnetic Interference FIPS Federal Information Processing Standards GCM Galois/Counter Mode GMAC Galois Message Authentication Code GOST Gosudarstvennyi Standard Soyuza SSR/Government Standard of the Union of Soviet Socialist Republics GPC General Purpose Computer HMAC key-Hashed Message Authentication Code IG See References JAR Java ARchive JCA JCE Java Cryptography Architecture Java Cryptography Extension its original entirety (without revision).
JDK Java Development Kit JRE Java Runtime Environment JVM Java Virtual Machine IV Initialization Vector KAS Key Agreement Scheme KAT Known Answer Test KDF Key Derivation Function KW Key Wrap KWP Key Wrap with Padding KMAC KECCAK Message Authentication Code MAC Message Authentication Code MD5 Message Digest algorithm MD5 N/A Non Applicable OCB Offset Codebook Mode OFB Output Feedback OS Operating System PBKDF Password-Based Key Derivation Function PKCS Public Key Cryptography Standards PQG Diffie-Hellman Parameters P, Q and G RC Rivest Cipher, Ron’s Code RIPEMD RACE Integrity Primitives Evaluation Message Digest RSA Rivest Shamir Adleman SHA Secure Hash Algorithm SSP Sensitive Security Parameter TCBC TDEA Cipher-Block Chaining TCFB TDEA Cipher Feedback Mode TDEA Triple Data Encryption Algorithm TDES Triple Data Encryption Standard TECB TDEA Electronic Codebook TOFB TDEA Output Feedback TLS Transport Layer Security USB Universal Serial Bus XDH XOF Edwards Curve Diffie-Hellman using X25519, X448 Extendable-Output Function its original entirety (without revision).