All modules
CMVP Validated Module · FIPS 140-3 Security Policy

BC-FJA (Bouncy Castle FIPS Java API)

Certificate#4943StandardFIPS 140-3Level1TypeSoftwareEmbodimentMulti-Chip Stand AloneStatusActiveVendorLegion of the Bouncy Castle Inc.
Low review priority  ·  exposes network crypto parser/protocol  ·  last validated 8 months ago. How this is derived →

Certificate

StandardFIPS 140-3
Overall level1
Module typeSoftware
EmbodimentMulti-Chip Stand Alone
StatusActive
Sunset date1/16/2027
CaveatInterim Validation. When operated in approved mode. The module generates SSPs (e.g., keys) whose strengths are modified by available entropy
VendorLegion of the Bouncy Castle Inc.

Approved Algorithms (85)

AlgorithmACVP Cert
AES-CBCA4270
AES-CBC-CS1A4270
AES-CBC-CS2A4270
AES-CBC-CS3A4270
AES-CCMA4270
AES-CFB128A4270
AES-CFB8A4270
AES-CMACA4270
AES-CTRA4270
AES-ECBA4270
AES-FF1A4270
AES-GCMA4270
AES-GMACA4270
AES-KWA4270
AES-KWPA4270
AES-OFBA4270
Counter DRBGA4270
cSHAKE-128A4270
cSHAKE-256A4270
DSA KeyGen (FIPS186-4)A4270
DSA PQGGen (FIPS186-4)A4270
DSA PQGVer (FIPS186-4)A4270
DSA SigGen (FIPS186-4)A4270
DSA SigVer (FIPS186-4)A4270
ECDSA KeyGen (FIPS186-4)A4270
ECDSA KeyVer (FIPS186-4)A4270
ECDSA SigGen (FIPS186-4)A4270
ECDSA SigVer (FIPS186-4)A4270
EDDSA KeyGenA4270
EDDSA KeyVerA4270
EDDSA SigGenA4270
EDDSA SigVerA4270
Hash DRBGA4270
HMAC DRBGA4270
HMAC-SHA-1A4270
HMAC-SHA2-224A4270
HMAC-SHA2-256A4270
HMAC-SHA2-384A4270
HMAC-SHA2-512A4270
HMAC-SHA2-512/224A4270
HMAC-SHA2-512/256A4270
HMAC-SHA3-224A4270
HMAC-SHA3-256A4270
HMAC-SHA3-384A4270
HMAC-SHA3-512A4270
KAS-ECC Sp800-56Ar3A4270
KAS-FFC Sp800-56Ar3A4270
KAS-IFCA4270
KDA HKDF SP800-56Cr2A4270
KDA OneStep SP800-56Cr2A4270
KDA TwoStep SP800-56Cr2A4270
KDF ANS 9.63A4270
KDF IKEv2A4270
KDF SP800-108A4270
KDF SRTPA4270
KDF SSHA4270
KDF TLSA4270
KMAC-128A4270
KMAC-256A4270
KTS-IFCA4270
LMS SigVerA4270
ParallelHash-128A4270
ParallelHash-256A4270
PBKDFA4270
RSA KeyGen (FIPS186-5)A4270
RSA SigGen (FIPS186-5)A4270
RSA SigVer (FIPS186-5)A4270
Safe Primes Key GenerationA4270
Safe Primes Key VerificationA4270
SHA-1A4270
SHA2-224A4270
SHA2-256A4270
SHA2-384A4270
SHA2-512A4270
SHA2-512/224A4270
SHA2-512/256A4270
SHA3-224A4270
SHA3-256A4270
SHA3-384A4270
SHA3-512A4270
SHAKE-128A4270
SHAKE-256A4270
TLS v1.2 KDF RFC7627A4270
TupleHash-128A4270
TupleHash-256A4270

Security Levels (Table 1)

Requirement areaLevel
Roles, Services, and Authentication4
Physical SecurityN/A
Self-Tests1

Derived Review-Risk Graph (review prompts, not findings)

flowchart LR
  %% Deterministic review-risk graph for BC-FJA (Bouncy Castle FIPS Java API)
  %% Review prompts and evidence gaps, NOT vulnerability findings.
  subgraph CMVP["CMVP-disclosed clues"]
    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"]
    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"]
    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"]
    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
  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 C3,C5,C6 clue;
  class I3,I5,I6 infer;
  class R3,R5,R6 risk;
  class E3,E5,E6 evidence;
Underlying clues
flowchart LR
  %% Deterministic clue tier for BC-FJA (Bouncy Castle FIPS Java API)
  %% confidence: high = structured record field; medium = structured but soft; low (dashed) = bare keyword hit, context unverified
  subgraph CMVP["CMVP-disclosed clues (deterministic)"]
    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 C3 clueHigh;
  class C5,C6 clueLow;

Security Policy, page by page

Page 1

Legion of the Bouncy Castle Inc. BC-FJA (Bouncy Castle FIPS Java API) Non-Proprietary FIPS 140-3 Cryptographic Module Security Policy Software Version: 2.1.1 Date: 07/18/2025 Legion of the Bouncy Castle Inc. (ABN 84 166 338 567) https://www.bouncycastle.org Public Material

Page 2
Table of Contents
#SectionPage
1General4
1.1Confirming the Module Checksum, Functionality, and Versioning4
1.1.1Additional Information Displayed if Native Support Available5
2Cryptographic Module Specification6
2.1Basic Enforcement22
2.2Enforcement and Guidance for GCM IVs23
2.3Enforcement and Guidance for use of the Approved PBKDF24
2.4Rules for setting the N and the S String in cSHAKE25
2.5Guidance for the use of Format-Preserving Encryption25
2.6Cryptographic Key Generation26
3Cryptographic Module Ports and Interfaces27
4Roles, Services, and Authentication28
4.1Basic Guidance28
4.2Assumption of Roles29
4.3Services30
5Software/Firmware Security38
6Operational Environment39
6.1Use of External RNG39
6.2Additional Enforcement with a Java SecurityManager39
6.3Approved Mode Configuration39
6.4Guidance for the use of DRBGs and Configuring the JVM's Entropy Source41
7Physical Security42
8Non-invasive Security43
9Sensitive Security Parameter Management44
9.1RBG Entropy Sources51
10Self-Tests52
10.1Pre-Operational Self-Tests52
10.2Conditional Self-Tests52
10.3Error Handling53
11Life-cycle Assurance54
12Mitigation of Other Attacks55
Appendix: References and Definitions56
Claimed20
radix in range of 2..216 in range of 2216
Page 3
List of Tables
ItemPage
Table 1: Security Levels4
Table 2: Tested Operational Environments9
Table 3: Vendor Affirmed Operational Environments12
Table 4: Approved Algorithms20
Claimed20
Table 6: Non-Approved Algorithms Not Allowed in the Approved Mode of Operation22
Table 7: Ports and Interfaces27
Table 8: Roles, Service Commands, Input and Output29
Table 9: Roles and Authentication30
Table 10: Approved Services36
Table 11: Non-Approved Services37
Table 12: SSPs50
Table 13: Non-Deterministic Random Number Generation Specification51
Figure 1: Cryptographic Boundary7
Page 4
Security level
NameISO SectionRequirementLevel
11General1
22Cryptographic Module Specification1
33Cryptographic Module Ports and Interfaces1
44Roles, Services, and Authentication1
55Software/Firmware Security1
66Operational Environment1
77Physical SecurityN/A
88Non-invasive SecurityN/A
99Sensitive Security Parameter Management1
1010Self-Tests1
1111Life-cycle Assurance1
1212Mitigation of Other Attacks1

This document defines the Security Policy for the Legion of the Bouncy Castle Inc.'s BC-FJA (Bouncy Castle FIPS Java API) Module, hereafter denoted the Module. The Module is a cryptographic library and has a Multi-Chip Stand Alone embodiment. The Module meets FIPS 1403 overall Level 1 requirements. The SW version is 2.1.1. The FIPS 140-3 security levels for the Module are given in Table 1as 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.1.1.jar org.bouncycastle.util.DumpInfo which should display: Version Info: BouncyCastle Security Provider (FIPS edition) v2.1.1 FIPS Ready Status: READY Public Material

Page 5

Module SHA2-256 HMAC: d231036b466c2216d352c4c1ee9df602bc6e05514817bdfea2eab8a376566e90 Indicating the jar represents the software release BC-FJA 2.1.1, that it has successfully passed all its startup tests, and that the software release is confirmed to have a HMAC of: d231036b466c2216d352c4c1ee9df602bc6e05514817bdfea2eab8a376566e90

1.1.1 Additional Information Displayed if Native Support Available

Where native support is available DumpInfo will also provide what native facilities are supported. The module will make use of AES and SHA2 acceleration where available in addition to accepting entropy directly from the underlying hardware if possible. On a platform with native support turned on you will see something like: Version Info: BouncyCastle Security Provider (FIPS edition) v2.1.1 FIPS Ready Status: READY Native Ready Status: READY Native Variant: avx Native Build Date: 2024-11-15T15:56:42 Native Support: AES/CBC AES/CFB AES/CTR AES/ECB AES/GCM DRBG NRBG Module SHA2-256 HMAC: d231036b466c2216d352c4c1ee9df602bc6e05514817bdfea2eab8a376566e90 Note that, for validation purposes, the native component of the module is included in the module checksum regardless of whether it is enabled or not. Public Material

Page 6

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.1.1.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) with the performance being hardware assisted through augmentation where possible by different native functions in the contained runtime libraries. The JVM is the interface to the computer’s Operating System (OS) that is the interface to the various physical components of the computer. Public Material

Page 7
Module configuration
NameOperating SystemHardware PlatformProcessorPaa Pai#
1Java SE Runtime Environment v8 (1.8) onIntel NUC 11 Pro Board11th Gen Intel Core i7None1

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. # Public Material

Page 8
2 3 4 5 6 7 8 9 10 11 12 13Ubuntu 22.04 LTS Java SE Runtime Environment v8 (1.8) on Ubuntu 22.04 LTS Java SE Runtime Environment v8 (1.8) on Ubuntu 22.04 LTS Java SE Runtime Environment v8 (1.8) on Ubuntu 22.04 LTS Java SE Runtime Environment v11 (1.11) on Ubuntu 22.04 LTS Java SE Runtime Environment v11 (1.11) on Ubuntu 22.04 LTS Java SE Runtime Environment v11 (1.11) on Ubuntu 22.04 LTS Java SE Runtime Environment v11 (1.11) on Ubuntu 22.04 LTS Java SE Runtime Environment v17 (1.17) on Ubuntu 22.04 LTS Java SE Runtime Environment v17 (1.17) on Ubuntu 22.04 LTS Java SE Runtime Environment v17 (1.17) on Ubuntu 22.04 LTS Java SE Runtime Environment v17 (1.17) on Ubuntu 22.04 LTS Java SE Runtime Environment v21 (1.21) on Ubuntu 22.04 LTSIntel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7With PAA (AVX) With PAA (VAES) With PAA (VAESF) None With PAA (AVX) With PAA (VAES) With PAA (VAESF) None With PAA (AVX) With PAA (VAES) With PAA (VAESF) None

Public Material

Page 9
14 15 16Java SE Runtime Environment v21 (1.21) on Ubuntu 22.04 LTS Java SE Runtime Environment v21 (1.21) on Ubuntu 22.04 LTS Java SE Runtime Environment v21 (1.21) on Ubuntu 22.04 LTSIntel NUC 11 Pro Board Intel NUC 11 Pro Board Intel NUC 11 Pro Board11th Gen Intel Core i7 11th Gen Intel Core i7 11th Gen Intel Core i7With PAA (AVX) With PAA (VAES) With PAA (VAESF)

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:

  1. No source code has been modified.
  2. The GPC uses the specified single-user platform, or another compatible single-user platform such as one of the Java SE Runtime Environments listed on any of the following: # Operating System with HP-UX with HP-UX with HP-UX with HP-UX with Linux Centos with Linux Centos with Linux Centos with Linux Centos with Red Hat Enterprise Linux with Red Hat Enterprise Linux with Red Hat Enterprise Linux with Red Hat Enterprise Linux with Linux Debian with Linux Debian Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Public Material – May be reproduced only in its original entirety (without revision).
Page 10

Java SE Runtime Environment v17 (1.17) with Linux Debian Java SE Runtime Environment v21 (1.21) with Linux Debian Java SE Runtime Environment v8 (1.8) with Linux Fedora Java SE Runtime Environment v11 (1.11) with Linux Fedora Java SE Runtime Environment v17 (1.17) with Linux Fedora Java SE Runtime Environment v21 (1.21) with Linux Fedora Java SE Runtime Environment v8 (1.8) with Linux Oracle RHC Java SE Runtime Environment v11 (1.11) with Linux Oracle RHC Java SE Runtime Environment v17 (1.17) with Linux Oracle RHC Java SE Runtime Environment v21 (1.21) with Linux Oracle RHC Java SE Runtime Environment v8 (1.8) with Linux Oracle UEK Java SE Runtime Environment v11 (1.11) with Linux Oracle UEK Java SE Runtime Environment v17 (1.17) with Linux Oracle UEK Java SE Runtime Environment v21 (1.21) with Linux Oracle UEK Java SE Runtime Environment v17 (1.8) with Linux Photon Java SE Runtime Environment v17 (1.11) with Linux Photon Java SE Runtime Environment v17 (1.17) with Linux Photon Java SE Runtime Environment v21 (1.21) with Linux Photon Java SE Runtime Environment v8 (1.8) with Linux SUSE Java SE Runtime Environment v11 (1.11) with Linux SUSE Java SE Runtime Environment v17 (1.17) with Linux SUSE Java SE Runtime Environment v21 (1.21) with Linux SUSE Java SE Runtime Environment v8 (1.8) with Linux Ubuntu Java SE Runtime Environment v11 (1.11) with Linux Ubuntu Java SE Runtime Environment v17 (1.17) with Linux Ubuntu Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Public Material

Page 11

Java SE Runtime Environment v21 (1.21) with Linux Ubuntu Java SE Runtime Environment v8 (1.8) with Mac OS X Java SE Runtime Environment v11 (1.11) with Mac OS X Java SE Runtime Environment v8 (1.8) with Microsoft Windows Java SE Runtime Environment v11 (1.11) with Microsoft Windows Java SE Runtime Environment v17 (1.17) with Microsoft Windows Java SE Runtime Environment v21 (1.21) with Microsoft Windows Java SE Runtime Environment v8 (1.8) with Microsoft Windows Server Java SE Runtime Environment v11 (1.11) with Microsoft Windows Server Java SE Runtime Environment v17 (1.17) with Microsoft Windows Server Java SE Runtime Environment v21 (1.21) with Microsoft Windows Server Java SE Runtime Environment v8 (1.8) with Microsoft Windows XP Java SE Runtime Environment v11 (1.11) with Microsoft Windows XP Java SE Runtime Environment v17 (1.17) with Microsoft Windows XP Java SE Runtime Environment v21 (1.21) with Microsoft Windows XP Java SE Runtime Environment v8 (1.8) with Solaris Java SE Runtime Environment v11 (1.11) with Solaris Java SE Runtime Environment v17 (1.17) with Solaris Java SE Runtime Environment v21 (1.21) with Solaris Java SE Runtime Environment v8 (1.8) with AIX Java SE Runtime Environment v11 (1.11) with AIX Java SE Runtime Environment v17 (1.17) with AIX Java SE Runtime Environment v21 (1.21) with AIX Java SE Runtime Environment v17 (1.17) with Red Hat Enterprise Linux Java SE Runtime Environment v21 (1.21) with Red Hat Enterprise Linux Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic Hardware Platform Generic hardware platform with Intel Cascade Lakes Generic hardware platform with Intel Cascade Lakes Public Material

Page 12

Java SE Runtime Environment v17 (1.17) Generic hardware platform with Intel Sapphire with Red Hat Enterprise Linux Rapids Java SE Runtime Environment v21 (1.21) Generic hardware platform with Intel Sapphire with Red Hat Enterprise Linux Rapids Java SE Runtime Environment v17 (1.17) Generic hardware platform with Intel Cascade with Ubuntu Lakes Java SE Runtime Environment v21 (1.21) Generic hardware platform with Intel Cascade with Ubuntu Lakes Java SE Runtime Environment v17 (1.17) Generic hardware platform with Intel Sapphire with Ubuntu Rapids Java SE Runtime Environment v21 (1.21) Generic hardware platform with Intel Sapphire with Ubuntu Rapids Java SE Runtime Environment v17 (1.17) Generic hardware platform with Intel Cascade with ClevOS Lake Java SE Runtime Environment v21 (1.21) Generic hardware platform with Intel Cascade with ClevOS Lake Java SE Runtime Environment v17 (1.17) Generic hardware platform with Intel Sapphire with ClevOS Rapids Java SE Runtime Environment v21 (1.21) Generic hardware platform with Intel Sapphire with ClevOS Rapids Java SE Runtime Environment v17 (1.17) Generic hardware platform with Intel Haswell with ClevOS Java SE Runtime Environment v21 (1.21) Generic hardware platform with Intel Haswell with ClevOS Java SE Runtime Environment v17 (1.17) Generic hardware platform with Intel Broadwell with ClevOS Java SE Runtime Environment v21 (1.21) Generic hardware platform with Intel Broadwell with ClevOS 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 Table 4 and Table 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 6.1 for initialization steps. Public Material

Page 13
Approved algorithm
NameCAVP CertMode MethodKey SizeUse FunctionDescription
AES [FIPS 197, SP 800- 38A], AES-FF1 Format Preserving Encryption [SP 800- 38G]A4270ECB, CBC, OFB, CFB8, CFB128, CTRKey sizes: 128, 192, 256 bitsEncryption, Decryption
AES-CBC Ciphertext Stealing (CS) [Addendum to SP 800-38A, Oct 2010]A4270CBC-CS1, CBC- CS2, CBC-CS3Key sizes: 128, 192, 256 bitsEncryption, Decryption
CCM [SP 800-38C]A4270N/AKey sizes: 128, 192, 256 bitsGeneration, Authentication
CMAC [SP 800-38B]A4270AESKey sizes: AES with 128, 192, 256 bitsGeneration, Authentication
GCM/GMAC1 [SP 800-38D]A4270N/AKey sizes: 128, 192, 256 bitsGeneration, Authentication
Counter DRBG [SP 800-90Ar1]A4270N/AAES-128, AES-192, AES- 256Random Number Generation
Hash DRBG [SP 800-90Ar1]A4270N/ASHA sizes: SHA-1, SHA2- 224, SHA2-256, SHA2- 384, SHA2-512, SHA2- 512/224, SHA2-512/256Random Number Generation
HMAC DRBG [SP 800-90Ar1]A4270N/ASHA sizes: SHA-1, SHA2- 224, SHA2-256, SHA2- 384, SHA2-512, SHA2- 512/224, SHA2-512/256Random Number Generation
DSA2 [FIPS 186-5]A4270N/AKey sizes: 1024, 2048, 3072 bits (1024 only for SigVer)PQG Generation, PQG Verification, Key Pair Generation, Signature Generation, Signature Verification
ECDSA [FIPS 186-5]A4270N/ACurves/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 ValidationPublic Key Generation, Signature Generation, Signature Verification, Public Key Validation
EdDSA [FIPS 186-5]A4270N/ACurves/Key sizes: Ed25519, Ed448Public Key Generation, Signature Generation, Signature Verification, Public Key Validation
KDA-HKDF [SP 800-56C, Rev 2]A4270N/APRFs: 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-512Key Derivation
HMAC [FIPS 198-1]A4270N/ASHA sizes: SHA-1, SHA- 224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256, SHA3-224, SHA3-256, SHA3-384, SHA3-512Generation, Authentication
KAS-FFC3 [SP 800-56A-rev3]A4270N/ADomain 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 provide between 112 and 200 bits of encryption strengthKey Agreement
KAS-ECC3 [SP 800-56A-rev3]A4270N/ACurves: 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 provide between 112 and 256 bits of encryption strengthKey Agreement
KDA, One Step [SP 800-56C-rev2]A4270N/APRFs: 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-256Key Derivation
KDA, Two Step [SP 800-56C-rev2]A4270N/APRFs: 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-256Key Derivation
KDF, Existing Application- Specific4 [SP 800-135-rev1]CVL A4270N/ATLS v1.0/1.1 KDF SHA sizes: SHA2-256 , SHA2-384, SHA2-512Key Derivation
KDF, Existing Application- Specific4 [SP 800-135-rev1]CVL A4270N/ATLS 1.2 KDF SHA sizes: SHA2-256, SHA2-384, SHA2-512Key Derivation
KDF, Existing Application- Specific4 [SP 800-135-rev1]CVL A4270N/ASSH KDF SHA sizes: SHA-1, SHA2- 224, SHA2-256, SHA2- 384, SHA2-512Key Derivation
KDF, Existing Application- Specific4 [SP 800-135-rev1]CVL A4270N/AX9.63 KDF SHA sizes: SHA-1, SHA2- 224, SHA2-256, SHA2- 384, SHA2-512Key Derivation Can be used along with KAS-SSC
KDF, Existing Application- Specific4 [SP 800-135-rev1]CVL A4270N/AIKEv2 KDF SHA sizes: SHA-1, SHA2- 224, SHA2-256, SHA2- 384, SHA2-512Key Derivation
KDF, Existing Application- Specific4 [SP 800-135-rev1]CVL A4270N/ASRTP KDFKey Derivation
KDF, Password- Based [SP 800-132]A4270N/AOptions: PBKDF with Option 1a Types: HMAC-based KDF using SHA-1, SHA-224, SHA-256, SHA-384, SHA-512Key Derivation
KDF, using Pseudorandom Functions5 [SP 800-108]A4270Counter Mode, Feedback Mode, Double-Pipeline Iteration ModeTypes: 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-512Key Derivation
Key Wrapping Using Block Ciphers6 [SP 800-38F]A4270AES KW, KWPKey sizes: 128, 192, 256 bits (Key establishment methodology provide 128, 192 or 256 bits of encryption strength)Key Wrapping
LMS [SP 800-208]A4270N/AParameters*: LMS- SHA256-M24-H10, LMS- SHA256-M24-H15, LMS- SHA256-M24-H20, LMS- SHA256-M24-H25, LMS- SHA256-M24-H5, LMS- SHA256-M32-H10, LMS- SHA256-M32-H15, LMS- SHA256-M32-H20, LMS- SHA256-M32-H25, LMS- SHA256-M32-H5, LMS- SHAKE-M24-H10, LMS- SHAKE-M24-H15, LMS- SHAKE-M24-H20, LMS- SHAKE-M24-H25, LMS- SHAKE-M24-H5, LMS- SHAKE-M32-H10, LMS- SHAKE-M32-H15, LMS- SHAKE-M32-H20, LMS- SHAKE-M32-H25, LMS- SHAKE-M32-H5 for W1, W2, W3, and W4. * keys only used for Signature VerificationSignature Verification
RSA [FIPS 186-5, ANSI X9.31-1998 and PKCS #1 v2.1 (PSS and PKCS1.5)]A4270N/AKey sizes: 2048, 3073, 4096Key Pair Generation
RSA [FIPS 186-5, FIPS 186-2, ANSI X9.31- 1998 and PKCS #1 v2.1 (PSS and PKCS1.5)]A4270N/AKey sizes: 2048, 3072, 4096Signature Generation
RSA [FIPS 186-5, ANSI X9.31-1998 and PKCS #1 v2.1 (PSS and PKCS1.5)]A4270N/AKey sizes: 2048, 3072, 4096Signature Verification
KTS-IFC7 [SP 800-56B-rev2, Section 7.2.2]A4270N/ARSA-OAEP with, and without, key confirmation. Key sizes: 2048, 3072, 4096 providing between 112 and 152 bits of encryption strength Key Generation Method: rsakpg2-crtKey Transport
KAS-IFC8 [SP 800-56B-rev2, Section 7.2.1]A4270N/ARSASVE with, and without, key confirmation. Key sizes: 2048, 3072, 4096 providing between 112 and 152 bits of encryption strengthKey Agreement
Safe Primes [SP 800-56A-rev3]A4270N/AParameter sets: ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192, MODP-2048, MODP- 3072, MODP-4096, MODP-6144, MODP- 8192Key Generation, Key Verification
SHS [FIPS 180-4]A4270N/ASHA sizes: SHA-1, SHA- 224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256Digital Signature Generation, Digital Signature Verification, non-Digital Signature Applications
SHA-3, SHAKE [FIPS 202]A4270N/ASHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256Digital Signature Generation, Digital Signature Verification, non-Digital Signature Applications
SHA-3 Derived Functions [SP 800-185]A4270N/ATypes: cSHAKE-128, KMAC-128, TupleHash- 128, ParallelHash-128, cSHAKE-256, KMAC- 256, TupleHash-256, ParallelHash-256Digital Signature Generation, Digital Signature Verification, non-Digital Signature Applications
CKG using output from DRBG9 [SP 800-133]Vendor Affirm ed IG D.HN/ASection 4 (Asymmetric from DRBG) Section 4 (Symmetric from DRBG)Key Generation
MD5 within TLS[IG 2.4.A]MD5 used within the TLS 1.0/1.1 handshake.

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. Public Material

Page 14

N/A N/A N/A N/A 2] Public Material

Page 15

N/A N/A N/A Keys are not established directly into the module using the key agreement algorithms. KAS-FFC and KAS-ECC are approved key agreement methods per FIPS 140-3 IG D.F. Public Material

Page 16

4 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. Public Material

Page 17

ApplicationSpecific4 N/A ApplicationSpecific4 N/A ApplicationSpecific4 N/A KDF, PasswordBased 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. Public Material

Page 18

N/A N/A N/A N/A Public Material

Page 19

N/A N/A N/A N/A N/A KTS-IFC is an approved key transport method per FIPS 140-3 IG D.G KAS-IFC is an approved key agreement method per FIPS 140-3 IG D.F. Public Material

Page 20
Approved algorithm
NameCAVP CertMode MethodKey SizeUse FunctionDescription
SHA-3 Derived Functions [SP 800-185]A4270N/ATypes: cSHAKE-128, KMAC-128, TupleHash- 128, ParallelHash-128, cSHAKE-256, KMAC- 256, TupleHash-256, ParallelHash-256Digital Signature Generation, Digital Signature Verification, non-Digital Signature Applications
CKG using output from DRBG9 [SP 800-133]Vendor Affirm ed IG D.HN/ASection 4 (Asymmetric from DRBG) Section 4 (Symmetric from DRBG)Key Generation
MD5 within TLS[IG 2.4.A]MD5 used within the TLS 1.0/1.1 handshake.

N/A D.H N/A Table 4: Approved Algorithms Table 5: Non-Approved Algorithms Allowed in the Approved Mode of Operation with No Security Claimed The resulting key or a generated seed is an unmodified output from a DRBG Public Material

Page 21
Approved algorithm
NameUse Function
AES (non-compliant10)Non-FIPS modes for AES
ARC4 (RC4)ARC4/RC4 stream cipher
BlowfishBlowfish block cipher
CamelliaCamellia block cipher
CAST5CAST5 block cipher
ChaCha20ChaCha20 stream cipher
ChaCha20-Poly1305AEAD ChaCha20 using Poly1305 as the MAC
DESDES block cipher
Diffie-Hellman KAS (non- compliant11)non-compliant key agreement methods
DSA (non-compliant12)non-FIPS digest signatures using DSA
DSTU4145DSTU4145 EC algorithm
ECDSA (non-compliant12)non-FIPS digest signatures using ECDSA
EdDSAEd25519 and Ed448 signature algorithms
ElGamalElGamal key transport algorithm
FF3-1Format Preserving Encryption – AES FF3-1
GOST28147GOST-28147 block cipher
GOST3410-1994GOST-3410-1994 algorithm
GOST3410-2001GOST-3410-2001 EC algorithm
GOST3410-2012GOST-3410-2012 EC algorithm
GOST3411GOST-3411-1994 message digest
GOST3411-2012-256GOST-3411-2012 256 bit message digest
GOST3411-2012-512GOST-3411-2012 512 bit message digest
HMAC-GOST3411GOST-3411 HMAC
HMAC-MD5MD5 HMAC
HMAC-RIPEMD128RIPEMD128 HMAC
HMAC-RIPEMD160RIPEMD160 HMAC
HMAC-RIPEMD256RIPEMD256HMAC
HMAC-RIPEMD320RIPEMD320 HMAC
HMAC-TIGERTIGER HMAC
HMAC-WHIRLPOOLWHIRLPOOL HMAC
HSSHSS signature scheme (RFC 8708)
IDEAIDEA block cipher
KAS13 using SHA-512/224 or SHA-512/256Key Agreement using SHA-512/224 and SHA-512/256 based KDFs
PBKDF using SHA-512/224 or SHA-512/256 (non-compliant)PBKDF2 using the PRFs SHA-512/224 and SHA- 512/256
MD5MD5 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
Poly1305Poly1305 message MAC
PRNG X9.31X9.31 PRNG
RC2RC2 block cipher
RIPEMD128RIPEMD128 message digest
RIPEMD160RIPEMD160 message digest
RIPEMD256RIPEMD256 message digest
RIPEMD320RIPEMD320 message digest
RSA (non-compliant14)Non-compliant RSA signature schemes
RSA KTS (non-compliant15)Non-compliant RSA key transport schemes
SCrypt (non-compliant)SCrypt using non-compliant PBKDF2
SEEDSEED block cipher
SerpentSerpent block cipher
SipHashSipHash MAC
SHACAL-2SHACAL2 block cipher
TIGERTIGER message digest
Triple-DESTriple-DES cipher
TwofishTwofish block cipher
WHIRLPOOLWHIRLPOOL message digest
XDHX25519 and X448 key agreement algorithms
10 Support for additional modes of operation.

11 Support for additional key sizes and the establishment of keys of less than 112 bits of security strength.

12 Deterministic signature calculation, support for additional digests, and key sizes.

Public Material

Page 22

Table 6: Non-Approved Algorithms Not Allowed in the Approved Mode of Operation

13 Keys are not directly established into the module using key agreement or transport techniques.

14 Support for additional digests and signature formats, PKCS#1 1.5 key wrapping, support for additional key sizes.

15 Support for additional key sizes and the establishment of keys of less than 112 bits of security strength.

Public Material

Page 23

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.

  1. The module shall provide two distinct operator roles: User and Cryptographic Officer.
  2. The module does not provide authentication.
  3. The operator shall be capable of commanding the module to perform the power up self-tests by cycling power or resetting the module.
  4. Power up self-tests do not require any operator action.
  5. Data output shall be inhibited during self-tests, zeroization, and error states. Output related to keys and their use is inhibited until the key concerned has been fully generated.
  6. Status information does not contain CSPs or sensitive data that if misused could lead to a compromise of the module.
  7. There are no restrictions on which keys or CSPs are zeroized by the zeroization service.
  8. The module does not support concurrent operators.
  9. The module does not have any external input/output devices used for entry/output of data.
  10. The module does not enter or output plaintext CSPs from the tested operational environments physical perimeter.
  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 Public Material – May be reproduced only in its original entirety (without revision).
Page 24

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: 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:

Page 25

(112 bits) and that the salt is at least 16 bytes (128 bits) long. The iteration count associated with the PBKDF should be as large as practical. As the module is a general-purpose software module, it is not possible to anticipate all the levels of use for the PBKDF, however a user of the module should also note that a password should at least contain enough entropy to be unguessable and also contain enough entropy to reflect the security strength required for the key being generated. Care should be taken where a password is simply based on ASCII. A 14 byte ASCII password is unlikely to contain sufficient entropy for most purposes as the standard set of printable characters only allows for as much as 6 bits of entropy per byte. In the case of a 14 byte password, this yields a key that has been generated using 14 * 6 bits, giving only 84 bits of security, well below what is required for a key with the same level of hardness as a 112 bit one. Users are referred to Appendix A, “Security Considerations” of SP 800132 for further information on password, salt, and iteration count selection. The iteration count value is provided by the user

Page 26
2 octets
2 * floor(logradix(296)) octets
8 octets (fixed)

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. Symmetric keys and seeds used for asymmetric keys are generated per Section 4 of the SP800133r2. Public Material

Page 27
InterfaceModule Equivalent
Data InputAPI input parameters – plaintext and/or ciphertext data.
Data OutputAPI output parameters and return values – plaintext and/or ciphertext data.
Control InputAPI method calls – method calls, or input parameters, that specify commands and/or control data used to control the operation of the module.
Status OutputAPI output parameters and return/error codes that provide status information used to indicate the state of the module.

Cryptographic Module Ports and Interfaces The BC-FJA (Bouncy Castle FIPS Java API) Module is 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 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 Public Material

Page 28
Service
NameRolesInputOutput
Initialize Module and Run Self-Tests on DemandCO/UserN/AException in case of failure
Show StatusCO/UserN/ABoolean
Info ServiceCO/UserN/AModule name and version
Zeroize / Power-offCO/UserN/AShutdown indication
Data EncryptionCO/UserKey, PlaintextCiphertext
Data DecryptionCO/UserKey, CiphertextPlaintext
MAC CalculationCO/UserKey, MessageMAC
Signature AuthenticationCO/UserKey, MessageSignature
Signature VerificationCO/UserKey, Message, SignatureBoolean
DRBG (SP800-90Arev1) OutputCO/UserN/AData
Message HashingCO/UserMessageHash
Keyed Message HashingCO/UserKey, MessageHash
TLS Key Derivation FunctionCO/UserTLS ParametersKey
SP 800-108-rev1 KDFCO/UserKDF ParametersKey
SSH Derivation FunctionCO/UserSSH ParametersKey
X9.63 Derivation FunctionCO/UserX9.63 ParametersKey
SP 800-56C-rev2 OneStep/TwoStep Key Derivation Function (KDM)CO/UserKDM ParametersKey
IKEv2 Derivation FunctionCO/UserIKEv2 ParametersKey
SRTP Derivation FunctionCO/UserSRTP ParametersKey
PBKDFCO/UserPassword, PBKDF ParametersKey
Key Agreement SchemesCO/UserKey Agreement keys, parametersShared Secret
Key WrappingCO/UserWrapping key, KeyWrapped key
Key UnwrappingCO/UserUnwrapping Key, Wrapped keyKey
Key VerificationCO/UserKey PairBoolean
Entropy CallbackCO/UserN/ARandom bits
SSP Export OperationCO/UserCommandSSP
UtilityCO/UserN/AN/A

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 N/A Public Material

Page 29

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. 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. Public Material

Page 30
Role IDAuthentication MethodAuthentication Strength
CON/A – Authentication not required for Level 1N/A
UserN/A – Authentication not required for Level 1N/A

N/A N/A Table 9: Roles and Authentication 4.3 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. Public Material

Page 31
Service
NameDescriptionRolesCsps AccessedApproved FunctionsAccessIndicator
Initialize Module and Run Self-Tests on DemandThe JRE will call the static constructor for self-tests on module initialization.CO/UserN/AHMAC-SHA-256N/AFlag
Show StatusA user can call FipsStatus.IsReady() at any time to determine if the module is ready. CryptoServicesRegistrar.IsI nApprovedOnlyMode() can be called to determine the FIPS mode of operation.CO/UserN/AN/AN/AFlag
Info ServiceA user can call DumpInfo.main() at any time to display the module version, checksum, and status information.CO/UserN/AN/AN/AFlag
Zeroize / Power-offThe module uses the JVM garbage collector on thread termination.CO/UserAll SSPsN/AZFlag
Data EncryptionUsed to encrypt data.CO/UserAES Encryption KeyAES-ECB, AES- CBC, AES-OFB, AES-CFB8, AES- CFB128, AES-CTR, AES-CBC-CS, CCM, GCM, FF1W/EFlag
Data DecryptionUsed to decrypt data.CO/UserAES Decryption KeyAES-ECB, AES- CBC, AES-OFB, AES-CFB8, AES- CFB128, AES-CTR, AES-CBC-CS, CCM, GCM, FF1W/EFlag
MAC CalculationUsed to calculate data integrity codes with CMAC.CO/UserAES Authentication KeyCMAC, GMACW/EFlag
Signature AuthenticationUsed to generate signatures (DSA, ECDSA, EdDSA, RSA).CO/UserDSA Signing Key, EC Signing Key, EdDSA Signing Key, RSA Signing KeyDSA, ECDSA, EdDSA, RSAW/EFlag
Signature VerificationUsed to verify digital signatures.CO/UserDSA Verification Key, EC Verification Key, EdDSA Verification Key, LMS Verification Key, RSA Verification KeyDSA, ECDSA, EdDSA, LMS, RSAW/EFlag
DRBG (SP800- 90A) outputUsed for random number, IV and key generation.CO/UserEntropy Input String, DRBG Seed, Internal State V and C value, and DRBG KeyCounter DRBG, Hash DRBG, HMAC DRBGW/G/EFlag
Message HashingUsed to generate message digest, SHAKE outputCO/UserN/ASHS, SHA-3, SHAKE, SHA-3 Derived Functions (cSHAKE, TupleHash, ParallelHash)N/AFlag
Keyed Message HashingUsed to calculate data integrity codes with HMAC and KMAC.CO/UserHMAC Authentication Key, KMAC Authentication KeyHMAC, SHA-3 Derived Functions (KMAC)W/EFlag
TLS Key Derivation FunctionUsed to calculate a value suitable to be used for a master secret in TLS.CO/UserTLS Premaster secret TLS KDF Secret ValueHKDF, KDF, Existing Application- Specific (TLS KDF)W/E/RFlag
SP 800-108-rev1 KDFUsed to calculate a value suitable to be used for a secret keyCO/UserSP800-108-rev1 KDF Secret ValueKBKDF, using Pseudorandom FunctionsW/E/RFlag
SSH Derivation FunctionUsed to calculate a value suitable to be used for a secret keyCO/UserSSH KDF Secret ValueExisting Application- Specific (SSH KDF)W/E/RFlag
X9.63 Derivation FunctionUsed to calculate a value suitable to be used for a secret keyCO/UserX9.63 KDF Secret ValueExisting Application- Specific (X9.63 KDF)W/E/RFlag
SP 800-56C OneStep/TwoStep Key Derivation Function (KDM)Used to calculate a value suitable to be used for a secret keyCO/UserSP800-56C-rev2 KDF Secret ValueHKDF, KDF One Step, KDF Two Step.W/E/RFlag
IKEv2 Derivation FunctionUsed to calculate a value suitable to be used for a secret keyCO/UserIKEv2 KDF Secret ValueExisting Application- Specific (IKEv2 KDF)W/E/RFlag
SRTP Derivation FunctionUsed to calculate a value suitable to be used for a secret keyCO/UserSRTP KDF Secret ValueExisting Application- Specific (SRTP KDF)W/E/RFlag
PBKDFUsed to generate a key using an encoding of a password and message hashCO/UserHMAC Authentication Key, KMAC Authentication KeyKDF, Password- BasedG/RFlag
PBKDF SecretCO/UserPBKDF SecretW/E
Key Agreement SchemesUsed to calculate key agreement values (SP 800- 56A-rev3, Diffie-Hellman).CO/UserDH Agreement Private Key, DH Agreement Public Key, EC Agreement Private Key, EC Agreement Public Key, RSA Key Transport Private Key, RSA Key Transport Public Key.KAS-FFC, KAS- ECC, KAS-IFC, SafePrimesW/E/RFlag
Key WrappingUsed to encrypt a key value. (RSA, AES)CO/UserAES Wrapping Key, HMAC Authentication Key, KMAC Authentication Key, RSA Key Transport Public KeyAES KW, AES KWP, KTS-IFCW/EFlag
Key UnwrappingUsed to decrypt a key value. (RSA, AES)CO/UserAES Wrapping Key, HMAC Authentication Key, KMAC Authentication Key, RSA Key Transport Private KeyAES KW, AES KWP, KTS-IFCW/EFlag
Key VerificationUsed to verify key pairCO/UserEC Signing Key, EC Verification Key, EC Agreement Public Key, EC Agreement Private Key, EdDSA Signing Key, EdDSA Verification KeyECDSA KeyVer, EdDSA KeyVerW/EFlag
Entropy CallbackGathers entropy in a passive manner from a user- provided functionCO/UserEntropy input stringDRBG, CKGWFlag
SSP Export OperationReturns a CSP as data that can be used for later outputCO/UserAES 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, EdDSA Signing Key, EdDSA Verification Key, HMAC Authentication Key, KMAC Authentication Key, LMS Verification Key, RSA Signing Key, RSA Verification Key, RSA Key Transport Private Key, RSA Key Transport Public KeyN/ARFlag
UtilityMiscellaneous utility functions, does not access CSPsCO/UserN/AN/AN/AFlag

16 Flag is accessed by calling the method CryptoServicesRegistrar.isInApprovedOnlyMode() - this method will return true if the thread is running in approved mode, false otherwise.

Page 36

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:

Page 37
Service
NameDescriptionRolesApproved FunctionsIndicator
Data EncryptionUsed to encrypt dataCO/UserTriple-DESFlag
Data DecryptionUsed to decrypt dataCO/UserTriple-DESFla
MAC CalculationUsed to calculate data integrity codes with CMACCO/UserTriple-DES CMACFlag
DRBG (SP800-90Arev1) outputUsed for random number, IV and key generationCO/UserctrDRBG-Triple-DESFlag
Key Agreement SchemesUsed to calculate key agreement valuesCO/UserTriple-DESFlag
Key WrappingUsed to encrypt a key value (Triple- DES)CO/UserTriple-DES KWFlag
Key UnwrappingUsed to decrypt a key value (Triple- DES)CO/UserTriple-DES KWFlag

17 Flag is accessed by calling the method CryptoServicesRegistrar.isInApprovedOnlyMode() - this method will return true if the thread is running in approved-only

Page 38

Software/Firmware Security The Module type is software. The module has a Multi-Chip Stand Alone embodiment; the cryptographic boundary is the Java Archive (JAR) file, bc-fips-2.1.1.jar. Each time the module is powered up, it runs the pre-operational tests to ensure that the integrity of the module has been maintained. Self–tests are available on demand by power cycling the module. The integrity is verified using HMAC-SHA2-256. Using the a 256-bit embedded key in the module jar, the HMAC of the module JAR file excluding directories and metadata is calculated and compared to the expected value embedded within the module’s properties. If the calculated value does not match the expected value, the module raises an error and fails to load. The integrity test can be performed on demand by power cycling the host platform. 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. Public Material

Page 39

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. The module supports the definition of user-defined DRBGs using the

definitions available in SP 800-90A. In approved mode the minimum amount of entropy that can be requested by a user defined 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 Public Material

Page 40
PermissionSettingsReqUsage

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. Public Material

Page 41
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. Public Material

Page 42

Physical Security This section is not applicable as the module is a software only module. Public Material

Page 43

Non-invasive Security This section is not applicable to this module. Public Material

Page 44
Sensitive security parameter
NameStrengthSecurity FunctionGenerationEstablishmentStorageImport ExportKey/SSP Name/ TypeZeroisation
AES encryption21128, 192, 256 bitsAES ECB, CBC, OFB, CFB8, CFB128, CTR, FF1, CBC-CS1, CBC-CS2, CBC- CS3, GCM A4270KDF, CKG18N/ASDRAM in plaintexImport19, Export20AES Encryption Keydestroy() service call or host platform power cycle
AES decryption128, 192, 256 bitsAES ECB, CBC, OFB, CFB8, CFB128, CTR, FF1, CBC-CS1, CBC-CS2, CBC- CS3, GCM A4270KDF,CKG18N/ASDRAM in plaintexImport19, Export20AES Decryption Keydestroy() service call or host platform power cycle
AES CMAC/GMAC128, 192, 256 bitsAES CMAC, GMAC A4270KDF,CKG18N/ASDRAM in plaintexImport19, Export20AES Authentication Keydestroy() service call or host platform power cycle
Key wrapping key128, 192, 256 bitsAES KW, KWP A4270KDF, CKG18N/ASDRAM in plaintexImport19, Export20AES Wrapping Keydestroy() service call or host platform power cycle
Diffie-Hellman key agreement112, 128, 152, 176, 200 bitsKAS-FFC A4270DSA KeyGen, SafePrimes KeyGen18N/ASDRAM in plaintexImport19, Export20DH Agreement Private Keydestroy() service call or host platform power cycle
Diffie-Hellman key agreement112, 128, 152, 176, 200 bitsKAS-FFC A4270DSA KeyGen, SafePrimes KeyGen18N/ASDRAM in plaintexImport19, Export20DH Agreement Public KeyNot zeroized, public key value known outside of modulePrivate
DSA signature generation112, 128 bitsDSA Signature Generation A4270DSA KeyGen18N/ASDRAM in plaintexImport19, Export20DSA Signing Keydestroy() service call or host platform power cycle
DSA signature verification80, 112, 128 bitsDSA Signature Verification A4270DSA KeyGen18N/ASDRAM in plaintexImport19, Export20DSA Verification KeyNot zeroized, public key value known outside of module
EC key agreement112. 128. 192. 256 bitsKAS-ECC A4270ECDSA KeyGen18N/ASDRAM in plaintexImport19, Export20EC Agreement Private Keydestroy() service call or host platform power cycle
EC key agreement112. 128. 192. 256 bitsKAS-ECC A4270ECDSA KeyGen18N/ASDRAM in plaintexImport19, Export20EC Agreement Public KeyNot zeroized, public key value known outside of module
ECDSA signature generation.112, 128, 192, 256 bitsECDSA Signature Generation A4270ECDSA KeyGen18N/ASDRAM in plaintexImport19, Export20EC Signing Keydestroy() service call or host platform power cycle
ECDSA signature verification.80, 112, 128, 192, 256 bitsECDSA Signature Verification A4270ECDSA KeyGen18N/ASDRAM in plaintexImport19, Export20EC Verfication KeyNot zeroized, public key value known outside of module
EdDSA signature generation.128, 224 bitsEdDSA Signature Generation A4270EdDSA KeyGen18N/ASDRAM in plaintexImport19, Export20EdDSA Signing Keydestroy() service call or host platform power cycle
EdDSA signature verification.128, 224 bitsEdDSA Signature Verification A4270EdDSA KeyGen18N/ASDRAM in plaintexImport19, Export20EdDSA Verfication KeyNot zeroized, public key value known outside of module
Keyed-Hash calculation.112-256 bitsSHA-1, SHA2, SHA3, KMAC A4270KDF,CKG18N/ASDRAM in plaintexImport19, Export20HMAC/KMAC Authentication Keydestroy() service call or host platform power cycle
LMS signature verification.128, 192, 256 bitsLMS Signature Verification A4270LMS KeyGen18N/ASDRAM in plaintexImport19, Export20LMS Verfication KeyNot zeroized, public key value known outside of module
RSA signature generation112, 128, 152 bitsRSA Signature Generation A4270RSA KeyGen18N/ASDRAM in plaintexImport19, Export20RSA Signing Keydestroy() service call or host platform power cycle
RSA signature verification80, 112, 128, 152 bitsRSA Signature Verfication A4270RSA KeyGen18N/ASDRAM in plaintexImport19, Export20RSA Verification KeyNot zeroized, public key value known outside of module
RSA key transport and decryption112, 128, 152 bitsKTS-IFC A4270RSA KeyGen18N/ASDRAM in plaintexImport19, Export20RSA Key Transport Private Key22destroy() service call or host platform power cycle
RSA key transport112, 128, 152 bitsKTS-IFC A4270RSA KeyGen18N/ASDRAM in plaintexImport19, Export20RSA Key Transport Public Key22Not zeroized, public key value known outside of module
Key Derivation128, 192 bitsKDF IKEv2 A4270Generated as output of an IKEv2 agreement schemeN/ASDRAM in plaintexImport19, Export20IKEv2 KDF Secret Valuedestroy() service call or host platform power cycle
Key Derivation192 bitsPBKDF A4270Generated as output of a PBE key and a PRFN/ASDRAM in plaintexExport20PBKDF Secret Valuedestroy() service call or host platform power cycle
Key Derivation112, 128, 192, 256 bitsKDA OneStep SP800-56Cr2, KDA TwoStep SP800-56Cr2 A4270Generated as output of an agreement schemeN/ASDRAM in plaintexImport19, Export20SP 800-56C-rev2 OneStep/TwoStep KDF Secret Valuedestroy() service call or host platform power cycle
Key Derivation112, 128, 192, 256 bitsKDF SP800-108 A4270Generated as output of an agreement schemeN/ASDRAM in plaintexImport19, Export20SP 800-108- rev1 KDF Secret Valuedestroy() service call or host platform power cycle
Key Derivation128, 192, 256 bitsKDF SRTP A4270Generated as output of an SRTP agreement schemeN/ASDRAM in plaintexImport19, Export20SRTP KDF Secret Valuedestroy() service call or host platform power cycle
Key Derivation80, 112, 128, 192, 256 bitsKDF SSH A4270Generated as output of an SSH agreement schemeN/ASDRAM in plaintexImport19, Export20SSH KDF Secret Valuedestroy() service call or host platform power cycle
Key Derivation384 bitsKDF TLS A4270Protocol version (2 bytes) and 46 bytes from a DRBG18N/ASDRAM in plaintexImport19TLS Premaster Secret Valuedestroy() service call or host platform power cycle
Key Derivation112, 128, 192, 256 bitsKDF TLS A4270Generated as output of a TLS agreement schemeN/ASDRAM in plaintexImport19, Export20TLS KDF Secret Valuedestroy() service call or host platform power cycle
Key Derivation112, 128, 192, 256 bitsKDF ANS 9.63 A4270Generated as output of an agreement schemeN/ASDRAM in plaintexImport19, Export20X9.63 KDF Secret Valuedestroy() service call or host platform power cycle
Random Number Generation>128 bitsN/AN/AN/ASDRAM in plaintexObtained from the entropy sourceEntropy Input Stringdestroy() service call or host platform power cycle
Random Number Generation128, 192, 256 bitsN/ACTR DRBGN/ASDRAM in plaintexN/ACTR DRBG SeedImmediately after use or host platform power cycle
Random Number Generation128 bitsN/ACTR DRBGN/ASDRAM in plaintexN/ACTR DRBG V Valuereseed() service call or host platform power cycle
Random Number Generation128, 192, 256 bitsN/ACTR DRBGN/ASDRAM in plaintexN/ACTR DRBG Keyreseed() service call or host platform power cycle
Random Number Generation112, 128, 192, 256 bitsN/AHash DRBGN/ASDRAM in plaintexN/AHash DRBG SeedImmediately after use or host platform power cycle
Random Number Generation112, 128, 192, 256 bitsN/AHash DRBGN/ASDRAM in plaintexN/AHash DRBG V Valuereseed() service call or host platform power cycle
Random Number Generation112, 128, 192, 256 bitsN/AHash DRBGN/ASDRAM in plaintexN/AHash DRBG C Valuereseed() service call or host platform power cycle
Random Number Generation112, 128, 192, 256 bitsN/AHMAC DRBGN/ASDRAM in plaintexN/AHMAC DRBG SeedImmediately after use or host platform power cycle
Random Number Generation112, 128, 192, 256 bitsN/AHMAC DRBGN/ASDRAM in plaintexN/AHMAC DRBG V Valuereseed() service call or host platform power cycle
Random Number Generation112, 128, 192, 256 bitsN/AHMAC DRBGN/ASDRAM in plaintexN/AHMAC DRBG Keyreseed() service call or host platform power cycle reseed() service call or host platform power cycle
Used as seed for asymmetric key generation or for symmetric key generation512 to 2048 bitsN/ADRBGN/ASDRAM in plaintexN/ADRBG Outputdestroy() service call or host platform power cycle

Sensitive Security Parameter Management All Sensitive Security Parameters (SSPs) used by the Module are described in this section in Table 12. All usage of these SSPs by the Module (including all SSP lifecycle states) is described in the services detailed in Section 4.3. Please note that the module does not perform automatic SSP establishment, it only provides the components to the calling application which can be used in SSP establishment. N/A N/A N/A Key generator used in conjunction with an approved DRBG. Import done via key constructor Export done via accessing returned key object using getEncoded() method and followed by separate step to export key details as either plaintext or encrypted 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.

Page 47

22 RSA key transport using PKCS#1 1.5 padding is deprecated through 2023 and disallowed after 2023.

Page 51
Entropy SourcesMinimum number of bits of entropyDescription / Usage
Passive Entropy128A 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.

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 The module passively receives entropy from a source within the physical perimeter of the tested operational environment, in conformance with FIPS 140-3 IG 9.3.A scenario 1b. The following entropy caveat applies: “The module generates SSPs (e.g., keys) whose strengths are modified by available entropy.” Public Material

Page 52
10 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. The HMAC and SHS Conditional Cryptographic Algorithm Self-Tests (CAST) 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:

Page 53
10.3 Error Handling

If any of the above-mentioned self-tests fail, the module enters an error state called “Hard Error” state. Upon entering the error state, the module outputs status by way of an exception. An example exception for AES Encryption failure is mentioned below: “Failed self-test on encryption: AES” The module can be recovered by power cycling the module which results in execution of preoperational self-tests and conditional cryptographic algorithm self-tests. If the tests pass, then the module will be available for use. Public Material

Page 54
11 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:

Page 55
12 Mitigation of Other Attacks

The Module implements basic protections to mitigate against timing based attacks against its internal implementations. There are two counter-measures used. The first is Constant Time Comparisons, which protect the digest and integrity algorithms by strictly avoiding “fast fail” comparison of MACs, signatures, and digests so the time taken to compare a MAC, signature, or digest is constant regardless of whether the comparison passes or fails. The second is made up of Numeric Blinding and decryption/signing verification which both protect the RSA algorithm. Numeric Blinding prevents timing attacks against RSA decryption and signing by providing a random input into the operation which is subsequently eliminated when the result is produced. The random input makes it impossible for a third party observing the private key operation to attempt a timing attack on the operation as they do not have knowledge of the random input and consequently the time taken for the operation tells them nothing about the private value of the RSA key. Decryption/signing verification is carried out by calculating a primitive encryption or signature verification operation after a corresponding decryption or signing operation before the result of the decryption or signing operation is returned. The purpose of this is to protect against Lenstra's CRT attack by verifying the correctness the private key calculations involved. Lenstra's CRT attack takes 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. Public Material

Page 56

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-5 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 Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography SP 800-56B Recommendation for Pair-Wise Key Establishment Schemes Using Integer Factorization Cryptography SP 800-56C Recommendation for Key Derivation through Extraction-then-Expansion SP 800-67 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 Recommendation for Key Derivation Using Pseudorandom Functions SP 800-132 Recommendation for Password-Based Key Derivation SP 800-133 Recommendation for Cryptographic Key Generation Public Material

Page 57

ANSI X9.31 X9.31-1998, Digital Signatures using Reversible Public Key Cryptography for the Financial Services Industry (rDSA), September 9, 1998 SP 800-135 Recommendation for Existing Application

Page 58

AES Advanced Encryption Standard GPC General Purpose Computer HMAC key-Hashed Message Authentication Code IG See References JAR Java ARchive JCA Java Cryptography Architecture JCE Java Cryptography Extension 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 NDRNG Non Deterministic Random Number Generator 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 Edwards Curve Diffie-Hellman using X25519, X448 XOF Extendable-Output Function Public Material

Referenced URLs