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

BoringCrypto

Certificate#4953StandardFIPS 140-3Level1TypeSoftwareEmbodimentMulti-Chip Stand AloneStatusHistoricalVendorGoogle, LLC.
Medium review priority  ·  no TCB surface named  ·  last validated 18 months ago. How this is derived →

Certificate

StandardFIPS 140-3
Overall level1
Module typeSoftware
EmbodimentMulti-Chip Stand Alone
StatusHistorical
CaveatInterim validation. When operated in approved mode. No assurance of the minimum strength of generated SSPs (e.g., keys)
VendorGoogle, LLC.

Approved Algorithms (33)

AlgorithmACVP Cert
AES-CBCA4687
AES-CCMA4687
AES-CTRA4687
AES-ECBA4687
AES-GCMA4687
AES-GMACA4687
AES-KWA4687
AES-KWPA4687
Counter DRBGA4687
ECDSA KeyGen (FIPS186-4)A4687
ECDSA KeyVer (FIPS186-4)A4687
ECDSA SigGen (FIPS186-4)A4687
ECDSA SigVer (FIPS186-4)A4687
HMAC-SHA-1A4687
HMAC-SHA2-224A4687
HMAC-SHA2-256A4687
HMAC-SHA2-384A4687
HMAC-SHA2-512A4687
HMAC-SHA2-512/256A4687
KAS-ECC-SSC Sp800-56Ar3A4687
KAS-FFC-SSC Sp800-56Ar3A4687
KDA HKDF Sp800-56Cr1A4687
RSA KeyGen (FIPS186-4)A4687
RSA SigGen (FIPS186-4)A4687
RSA SigVer (FIPS186-4)A4687
SHA-1A4687
SHA2-224A4687
SHA2-256A4687
SHA2-384A4687
SHA2-512A4687
SHA2-512/256A4687
TLS v1.2 KDF RFC7627A4687
TLS v1.3 KDFA4687

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

flowchart LR
  %% Deterministic review-risk graph for BoringCrypto
  %% Review prompts and evidence gaps, NOT vulnerability findings.
  subgraph CMVP["CMVP-disclosed clues"]
    C3["[low] Self-test / status surface<br/>(referenced in text)<br/><i>Status Output<br/>Self-Test<br/>Show Status</i>"]
    C5["[low] Protocol / secure-channel<br/>references (may be KDF<br/>names, not a live channel)<br/><i>TLS<br/>HTTPS<br/>library named: boringssl</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["Possible only, some<br/>services may process input<br/>before, or without,<br/>operator authentication."]
    I5["Possible only, a protocol<br/>is referenced, but whether<br/>it is a live channel or<br/>only a KDF/algorithm name<br/>is unconfirmed."]
    I6["Possible only, a<br/>runtime/OS is referenced,<br/>but its membership in the<br/>cryptographic boundary is<br/>not established."]
  end
  subgraph Risk["Reviewer question"]
    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["confirm the disclosure<br/>itself (keyword hit,<br/>context unverified) ·<br/>pre-auth reachability<br/>matrix · rate limits and<br/>output redaction ·<br/>abuse-case tests"]
    E5["confirm the disclosure<br/>itself (keyword hit,<br/>context unverified) ·<br/>library identity and<br/>version ·<br/>certificate-validation<br/>behaviour · protocol-CVE<br/>disposition"]
    E6["confirm the disclosure<br/>itself (keyword hit,<br/>context unverified) ·<br/>runtime identity and<br/>config · kernel/runtime<br/>hardening profile ·<br/>patch/backport manifest"]
  end
  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 BoringCrypto
  %% confidence: high = structured record field; medium = structured but soft; low (dashed) = bare keyword hit, context unverified
  subgraph CMVP["CMVP-disclosed clues (deterministic)"]
    C3["[low] Self-test / status surface (referenced in text)<br/><i>Status Output<br/>Self-Test<br/>Show Status</i><br/>src: text:keyword"]
    C5["[low] Protocol / secure-channel references (may be KDF names, not a live channel)<br/><i>TLS<br/>HTTPS<br/>library named: boringssl</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,C5,C6 clueLow;

Security Policy, page by page

Page 1

Google, LLC. BoringCrypto Software Version: 2023042800 Date: January 10, 2025 Public Material – May be reproduced only in its original entirety (without revision).

Page 2

Introduction Federal Information Processing Standards Publication 140-3 — Security Requirements for Cryptographic Modules specifies requirements for cryptographic modules to be deployed in a Sensitive but Unclassified environment. The National Institute of Standards and Technology (NIST) and Canadian Centre for Cyber Security (CCCS) Cryptographic Module Validation Program (CMVP) run the FIPS 140 program. The NVLAP accredits independent testing labs to perform FIPS 140 testing; the CMVP validates modules meeting FIPS

140 validation. Validated is the term given to a module that is documented and tested against the FIPS

140 criteria.

Additional information is available on the CMVP website at: https://csrc.nist.gov/projects/cryptographic-module-validation-program About this Document This non-proprietary Cryptographic Module Security Policy for BoringCrypto from Google, LLC provides an overview of the product and a high-level description of how it meets the overall Level 1 security requirements of FIPS 140-3. The BoringCrypto module is also referenced in this document as the “module”. Disclaimer The contents of this document are subject to revision without notice due to continued progress in methodology, design, and manufacturing. Google, LLC. shall have no liability for any error or damages of any kind resulting from the use of this document. Notices This document may be freely reproduced and distributed in its entirety without modification. Public Material – May be reproduced only in its original entirety (without revision).

Page 3
Table of Contents
#SectionPage
Page 4

List of Figures Public Material – May be reproduced only in its original entirety (without revision).

Page 5
SectionFIPS 140-3 Section TitleSecurity Level
1General1
2Cryptographic module specification1
3Cryptographic module interfaces1
4Roles, services, and authentication1
5Software/Firmware security1
6Operational environment1
7Physical securityN/A
8Non-invasive securityN/A
9Sensitive security parameter management1
10Self-tests1
11Life-cycle assurance1
12Mitigation of other attacksN/A

This document describes the cryptographic module Security Policy (SP) for the Google, LLC. BoringCrypto (Software version: 2023042800) cryptographic module (also referred to as the “module” hereafter). It contains specification of the security rules under which the cryptographic module operates, including the security rules derived from the requirements of the FIPS 140-3 standard. The module meets the overall Level 1 security requirements of FIPS 140-3. The following table lists the level of validation for each area in FIPS 140-3: Public Material – May be reproduced only in its original entirety (without revision).

Page 6
#Operating SystemHardware PlatformProcessorPAA/Acceleration
1Android 14Google Pixel 8Google Tensor G3 64- bitWith and without PAA
2Android 14Google Pixel 7Google Tensor G2 64- bit and 32-bitWith and without PAA
3Android 14Google Pixel 6Google Tensor 64-bit and 32-bitWith and without PAA
4Android 14Google Pixel 5aQualcomm Snapdragon 765 64-bit and 32-bitWith and without PAA
5Google Prodimage with Linux 5.15.110IN762IN762With and without PAA
6Google Prodimage with Linux 5.10.0Tau t2aAmpere AltraWith and without PAA
7Ubuntu 23.04Gigabyte GA-Z170X- UD5Intel Core i7-6700KWith and without PAA
8Debian Linux 6.4.4n2dAMD EPYC 7B12With and without PAA
#Operating SystemHardware Platform
1Linux 4.Xx86_64 architecture ARMv7 architecture ARMv8 architecture
2Linux 5.Xx86_64 architecture ARMv7 architecture ARMv8 architecture
3Linux 6.Xx86_64 architecture ARMv7 architecture ARMv8 architecture

2. Cryptographic Module Specification Google, LLC BoringCrypto module is an open-source, general-purpose cryptographic library which provides FIPS 140-3 approved cryptographic algorithms to serve BoringSSL and other user-space applications. The boundary of the module is defined as a single object file, bcm.o, and its instantiation in memory. The module version is: 2023042800. The module was tested on the following operational environments: Table 2 - Tested Operational Environments The cryptographic module is also supported on the following operational environments for which operational testing and algorithm testing was not performed: Table 3 - Vendor Affirmed Operational Environments Public Material – May be reproduced only in its original entirety (without revision).

Page 7
CAVP CertAlgorithm and StandardMode/MethodDescription / Key Size(s) / Key Strength(s)Use / Function
A4687AES FIPS 197 SP 800-38ACBC, ECB, CTR128, 192, 256-bit keys with 128. 192, 256-bit key strengthSymmetric Encryption, Symmetric Decryption
A4687AES FIPS 197 SP 800-38DGCM128, 192, 256-bit keys with 128. 192, 256-bit key strengthSymmetric Authenticated Encryption, Symmetric Authenticated Decryption
A4687AES FIPS 197 SP 800-38DGMAC128, 192, 256-bit keys with 128. 192, 256-bit key strengthSymmetric message authentication
A4687AES FIPS 197 SP 800-38CCCM128-bit keys with 128-bit key strengthSymmetric Authenticated Encryption, Symmetric Authenticated Decryption
A4687AES FIPS 197 SP 800-38FKW, KWP128, 192, 256-bit keys with 128. 192, 256-bit key strengthSymmetric Key Wrapping, Symmetric Key Unwrapping
A4687DRBG SP 800- 90Arev1CTR_DRBGAES-256Random Bit Generation
A4687ECDSA FIPS 186-4Key Pair Generation, Signature Generation, Signature Verification, Public Key VerificationP-224, P-256, P- 384, P-521 with 112, 128, 192, 256-bit key strengthAsymmetric Digital Signature Services
A4687HMAC FIPS 198-1Generate, Verify HMAC-SHA-1, HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, HMAC-SHA-512 HMAC-SHA-512/256Key Length: 8- 524288 Increment 81Symmetric Generation, Symmetric Authentication
A4687RSA FIPS 186-4Key Generation, Signature Generation, Signature Verification(1024, 2048, 3072, 4096)Asymmetric Digital Signature Services

HMAC key lengths < 112 bits are disallowed by SP 800-131Ar2. Public Material – May be reproduced only in its original entirety (without revision).

Page 8
CAVP CertAlgorithm and StandardMode/MethodDescription / Key Size(s) / Key Strength(s)Use / Function
PKCS 1.5 and PSSNote: Key size 1024 is only used for Signature Verification
A4687SHS FIPS 180-4HashingSHA-1, SHA-224, SHA-256, SHA- 384, SHA-512, SHA-512/256Digital Signature Generation, Digital Signature Verification, non-Digital Signature Applications
A4687KAS-ECC-SSC SP 800- 56Arev3KAS-ECC-SSC ephemeralUnified, staticUnifiedP-224, P-256, P- 384 and P-521 with 112, 128, 192, 256-bit key strengthAsymmetric Key Agreement Scheme Shared Secret Computation per SP 800-56Arev3
A4687KAS-FFC-SSC SP 800- 56Arev3KAS-FFC-SSC dhEphem2048/244, 2048/256-bit keys with 112-bit key strengthAsymmetric Key Agreement Scheme Shared Secret Computation per SP 800-56Arev3
A4687KDA HKDF Sp800-56Cr1KDA HKDFHMAC SHA2-224, HMAC SHA2-256, HMAC SHA2-384, HMAC SHA2-512, HMAC SHA2- 512/256 112-512-bit security strengthHash Based Key Derivation
A4687TLS v1.2 KDFCVL TLS v1.2 KDF RFC7627SHA2-256, SHA2-TLS Key Derivation
RFC7627384, SHA2-512
A4687TLS v1.3 KDFCVL TLS v1.3 KDF DHE, PSK, PKS-DHESHA2-256, SHA2- 384TLS Key Derivation

Algorithm CKG [IG D.H]

Caveat

Use / Function Cryptographic key generation per SP 800- 133rev2 and IG D.I * Generation of asymmetric keys for signature generation per [133] section 5.1. * Generation of asymmetric keys for key establishment per [133] section 5.2. * Symmetric key derivation for industry

Table 4

Page 9

standard protocols from a key agreement shared secret per [133] section 6.2.1.

Algorithm/FunctionUse/Function
MD5, MD4Non-Approved Hashing
POLYVALNon-Approved authenticated encryption
DES, Triple-DES (non-compliant)Non-Approved encryption/decryption
AES (non-compliant)Non-Approved encryption/decryption
DH (non-compliant)Non-Approved key agreement
RSA PKCS #1 v1.5 key wrapping (non-compliant)Non-Approved key wrapping
TLS 1.0/1.1 KDF (non-compliant)Non-Approved TLS key derivation
NameTypeDescriptionSP PropertiesAlgorithms/CAVP Cert
KAS-ECC-SSCKASSP 800-56Arev3. KAS_ECC_SSC per IG D.F Scenario 2, path (1)P-224, P-256, P-384, P- 521 curves providing 128, 192, or 256 bits of encryption strengthKAS-ECC-SSC Sp800- 56Ar3/A4687
KAS-ECCKASSP 800-56Arev3. KAS_ECC_SSC per IG D.F Scenario 2, path (2). No key confirmation, key derivation per IG 2.4.B. SP 800-135. KDFs (TLS v1.2 RFC6727, TLS v1.3)P-224, P-256, P-384, P- 521 curves providing 128, 192, or 256 bits of encryption strengthKAS-ECC-SSC Sp800- 56Ar3/A4687 TLS v1.2 KDF RFC7627/A4687 TLS v1.3 KDF/A4687
KAS-FFC-SSCKASSP 800-56Arev3. KAS_ECC_SSC per IG D.F Scenario 2, path (1)2048/244, 2048/256- bit keys with 112-bit of encryption strengthKAS-FFC-SSC Sp800- 56Ar3/A4687
KAS-FFCKASSP 800-56Arev3. KAS_FFC_SSC per IG D.F Scenario 2, path (2). No key confirmation, key derivation per IG 2.4.B. SP 800-135. KDFs (TLS v1.2 RFC6727, TLS v1.3)2048/244, 2048/256- bit keys with 112-bit of encryption strengthKAS-FFC-SSC Sp800- 56Ar3/A4687 TLS v1.2 KDF RFC7627/A4687 TLS v1.3 KDF/A4687

Table 5

Page 10

KTS

KTS

SP 800-38F. AES-KW, AES- KWP

128, 192, 256-bit keys with 128, 192, or 256- bit encryption strength

AES-KW/A4687 AES-KWP/A4687

Table 7

Page 11
Logical interfaceData that passes over port/interface
Data InputAPI input parameters
Data OutputAPI output parameters and return values
Control InputAPI input parameters
Status OutputAPI return values

3. Cryptographic Module Interfaces functions. The module does not implement a power input interface or a control output interface. Table 8

Page 12
RoleAuthentication MethodAuthentication Strength
Crypto Officer (CO)n/an/a
RoleServiceInputOutput
COModule InitializationN/AReturn code
COSymmetric EncryptionPlaintext, AAD, IV encryption keyReturn code, ciphertext, tag
COSymmetric DecryptionCiphertext, AAD, IV, tag, decryption keyReturn code, plaintext
COKeyed HashingMessage, keyReturn code, Message Authentication Code
COHashingMessageReturn code, hash
CORandom Bit GenerationAPI call parametersReturn code, random bits
COSignature GenerationMessage, signing keyReturn code, signature
COSignature VerificationSignature, verification keyReturn code
COKey WrapAPI call parameters, unwrapped key, wrapping keyReturn code, wrapped key
COKey UnwrapAPI call parameters, wrapped keyReturn code, unwrapped key
COKey AgreementAPI call parametersReturn code, shared secret
COKey Derivation KDAAPI call parameters, shared secretReturn code, derived key
COTLS Key DerivationAPI call parameters, TLS pre- master secretReturn code, TLS Key
COKey GenerationAPI call parametersReturn code, key pair
COKey VerificationAPI call parameters, key pairReturn code
COOn-Demand Self-TestN/AReturn code
COZeroizationN/AN/A
COShow StatusAPI call parametersReturn code, status

4. Roles, services, and authentication

4.1 Roles

The cryptographic module only implements a Crypto Officer (CO) role. The CO role is implicitly assumed by the entity accessing services implemented by the module. An operator is considered the owner of the thread that instantiates the module and, therefore, only one concurrent operator is allowed. The module does not support operator authentication. Table 9 – Roles and Authentication

4.3 Services

The Approved services supported by the module and access rights within services accessible over the module’s public interface are listed in the table below: Table 10

Page 13

Approved services are listed in Table 11

Page 14
ServiceDescriptionApproved Security FunctionsKeys/SSP’sRoleAccess rights to Keys/SSP’sIndicator
Module InitializationInitializes the moduleN/AN/ACON/AN/A
Symmetric EncryptionPerform symmetric encryption operationsAES CBC, ECB, CTR, GCM, CCMAES Key, AES-GCM KeyCOW, E1
Symmetric DecryptionPerform symmetric decryption operationsAES CBC, ECB, CTR, GCM, CCMAES Key, AES-GCM KeyCOW, E1
Keyed HashingPerform keyed hashing operationsHMAC, GMACHMAC Key, AES-GCM KeyCOW, E1
HashingPerform hashing operationsSHSN/ACON/A1
Random Bit GenerationGenerate random numbersCTR_DRBGDRBG Seed, CTR_DRBG V, CTR_DRBG KeyCOG, E1
CTR_DRBG Entropy InputW, E
Signature GenerationPerform signing operationsCTR_DRBG, RSA, ECDSARSA Signature Generation Key, ECDSA Signing KeyCOW, E1
CTR_DRBG V, CTR_DRBG KeyE
Signature VerificationPerform verification operationsRSA, ECDSARSA Signature Verification Key, ECDSA Verification KeyCOW, E1
Key WrapPerform key encryption operationsAES KW, KWPAES Wrapping KeyCOW, E1
Unwrapped KeyW
Wrapped KeyG, R
Key UnwrapPerform key decryption operationsAES KW, KWPAES Wrapping KeyCOW, E1
Wrapped KeyW
Unwrapped KeyG, R
Key AgreementPerform key agreement operationsKAS-ECC-SSC, KAS-FFC-SSCEC DH Private Key & EC DH Public Key, DH Private Key & DH Public KeyCOG, E1

G, E W, E E Public Material – May be reproduced only in its original entirety (without revision).

Page 15
ServiceDescriptionApproved Security FunctionsKeys/SSP’sRoleAccess rights to Keys/SSP’sIndicator
Other Party EC DH Public Key, Other Party DH Public KeyW, E
Shared SecretG, R
Key Derivation KDAPerform key derivation operationsKDA HKDF Sp800-56Cr2Shared SecretCOW, E1
Derived KeyG, R
TLS Key DerivationPerform key derivation operationsTLS KDFTLS Pre-Master SecretCOW, E1
TLS Master SecretG, E
TLS KeyG, R
Key GenerationPerform generation operationsCTR_DRBG, RSA, ECDSACTR_DRBG V, CTR_DRBG KeyCOE1
RSA Signature Generation Key & RSA Signature Verification Key, ECDSA Signing Key & ECDSA Verification KeyG, E, R
Key VerificationPerform key pair verification operationsECDSAECDSA Signing Key, ECDSA Verification KeyCOW, E1
On-Demand Self-TestExecute self-tests on demandN/AN/ACON/A1
ZeroizationZeroize all SSPsN/AAll keysCOZN/A
Show StatusObtain the module status and versioning informationN/AN/ACON/AN/A
ServiceDescriptionAlgorithms AccessedRoleIndicator
TLS 1.0/1.1 KDFPerform hashing operations when used with the TLS protocol version 1.0 and 1.1MD5 & SHA-1CO0
HashingPerform hashing operationsMD4, MD5CO0

E Table 11

Page 16
HashingUsed as part of AES-GCM-SIVPOLYVALCO0
Symmetric encryption/decryptionPerform symmetric encryption and/or decryption operationsDES Triple-DES AESCO0
Key TransportPerform RSA PKCS #1 v1.5 key transportRSACO0

Table 12 - Non-Approved Services Public Material – May be reproduced only in its original entirety (without revision).

Page 17

5. Software/Firmware Security The pre-operational integrity test is performed using HMAC-SHA-256. The integrity test can be executed on demand by power-cycling the host platform and reloading the module. The module does not support software loading.

5.1 Module Format

The form of the module is a single object file, bcm.o.

  1. Operational Environment The module runs on a GPC, which is a modifiable operational environment, running one of the operating systems specified in Table
  2. Each tested 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. No special configuration of the operating system is required. The module is designed to ensure that the power-up tests are initiated automatically when the module is loaded.
  3. Physical Security As a software module, the physical security requirements are not applicable.
  4. Non-invasive Security The module does not claim any non-invasive security measures. Public Material – May be reproduced only in its original entirety (without revision).
Page 18
Key/SSP Name/TypeStrengthSecurity Function Cert NumberGenerationImport/ ExportEstablishmentStorageZeroisationUse & related keys
AES Key128 192 256A4687ExternalInput via API in plaintext (Electronic Entry)N/APlaintext in RAM until function completionPower- cycle hostAES encrypt / decrypt
AES-GCM Key128 192 256A4687ExternalInput via APIN/APlaintext in RAM until function completionPower- cycle hostAES encrypt
in plaintext/ decrypt /
(Electronicgenerate /
Entry)verify
AES Wrapping Key128 192 256A4687ExternalInput via API in plaintext (Electronic Entry)N/APlaintext in RAM until function completionPower- cycle hostAES key wrapping; wraps Unwrapped Key; unwraps Wrapped Key

9. Sensitive Security Parameter Management Public Material – May be reproduced only in its original entirety (without revision).

Page 19
Key/SSP Name/TypeStrengthSecurity Function Cert NumberGenerationImport/ ExportEstablishmentStorageZeroisationUse & related keys
Wrapped KeyAnyN/AExternalInput via API wrapped (Electronic Entry) / Output via API wrapped (Electronic Output)N/A2Wrapped in RAM until function completionPower- cycle hostKey Transport; Unwrapped by AES Wrapping Key; becoming Unwrapped Key
Unwrapped KeyAnyN/AExternalInput via APIN/APlaintext in RAM until function completionPower- cycle hostKey
in plaintextTransport;
(ElectronicWrapped by
Entry) /AES
Output viaWrapping
API inKey;
plaintextbecoming
(ElectronicWrapped
Output)Key

Module only wraps or unwraps the key, transporting the key would be performed by the calling application. Public Material – May be reproduced only in its original entirety (without revision).

Page 20
Key/SSP Name/TypeStrengthSecurity Function Cert NumberGenerationImport/ ExportEstablishmentStorageZeroisationUse & related keys
ECDSA Signing Key112 128 192 256A4687Internally per FIPS 186-4Input via API in plaintext (Electronic Entry) / Output via API in plaintext (Electronic Output)N/APlaintext in RAM until function completionPower- cycle hostECDSA signature generation; Paired with ECDSA Verification Key
ECDSA Verification Key112 128 192 256A4687Internally per FIPS 186-4Input via API in plaintext (Electronic Entry) / Output via API in plaintext (Electronic Output)N/APlaintext in RAM until function completionPower- cycle hostECDSA signature verification; Paired with ECDSA Signing Key

Public Material – May be reproduced only in its original entirety (without revision).

Page 21
Key/SSP Name/TypeStrengthSecurity Function Cert NumberGenerationImport/ ExportEstablishmentStorageZeroisationUse & related keys
EC DH Private Key112 128 192 256A4687Internally per SP 800-56Arev3Input via API in plaintext (Electronic Entry) / Output via API in plaintext (Electronic Output)N/APlaintext in RAM until function completionPower- cycle hostEC DH; Paired with EC DH Public Key; Used with Other Party EC DH Public Key; Establishes Shared Secret, TLS Pre-Master Secret
EC DH Public Key112 128 192 256A4687Internally per SP 800-56Arev3Input via APIN/APlaintext in RAM until function completionPower- cycle hostEC DH;
in plaintextPaired with
(ElectronicEC DH
Entry) /Private Key;
Output viaEstablishes
API inShared
plaintextSecret, TLS
(ElectronicPre-Master
Output)Secret

Public Material – May be reproduced only in its original entirety (without revision).

Page 22
Key/SSP Name/TypeStrengthSecurity Function Cert NumberGenerationImport/ ExportEstablishmentStorageZeroisationUse & related keys
Other Party EC DH Public Key112 128 192 256A4687ExternalInput via API in plaintext (Electronic Entry)N/APlaintext in RAM until function completionPower- cycle hostEC DH; Used with EC DH Private Key; Establishes Shared Secret, TLS Pre-Master Secret
DH Private Key112A4687Internally per SP 800-56Arev3Input via API in plaintext (Electronic Entry) / Output via API in plaintext (Electronic Output)N/APlaintext in RAM until function completionPower- cycle hostDH; Paired with DH Public Key; Used with Other Party DH Public Key; Establishes Shared Secret, TLS Pre-Master Secret
DH Public Key112A4687Internally per SP 800-56Arev3Input via API in plaintext (Electronic Entry) / Output via API in plaintext (Electronic Output)N/APlaintext in RAM until function completionPower- cycle hostDH; Paired with DH Private Key; Establishes Shared Secret, TLS Pre-Master Secret

Public Material – May be reproduced only in its original entirety (without revision).

Page 23
Key/SSP Name/TypeStrengthSecurity Function Cert NumberGenerationImport/ ExportEstablishmentStorageZeroisationUse & related keys
Other Party DH Public Key112A4687ExternalInput via API in plaintext (Electronic Entry)N/APlaintext in RAM until function completionPower- cycle hostDH; Used with DH Private Key; Establishes Shared Secret, TLS Pre-Master Secret
Shared SecretAt least 112-bitN/AExternalInput via API in plaintext (Electronic Entry) / Output via API in plaintext (Electronic Output)KAS-ECC-SSC, KAS-FFC-SSCPlaintext in RAM until function completionPower- cycle hostEC DH or DH; Established by EC DH Private Key, EC DH Public Key, Other Party EC DH Public Key, DH Private Key, DH Public Key, Other Party DH Public Key, Derives Derived Key
HMAC KeyAt least 112-bitA4687ExternalInput via API in plaintext (Electronic Entry)N/APlaintext in RAM until function completionPower- cycle hostKeyed hashing

Public Material – May be reproduced only in its original entirety (without revision).

Page 24
Key/SSP Name/TypeStrengthSecurity Function Cert NumberGenerationImport/ ExportEstablishmentStorageZeroisationUse & related keys
RSA Signature Generation Key112 128 150A4687Internally per FIPS 186-4Input via API in plaintext (Electronic Entry) / Output via API in plaintext (Electronic Output)N/APlaintext in RAM until function completionPower- cycle hostRSA signature generation; Paired with RSA Signature Verification Key
RSA Signature Verification Key80 112 128 150A4687Internally per FIPS 186-4Input via API in plaintext (Electronic Entry) / Output via API in plaintext (Electronic Output)N/APlaintext in RAM until function completionPower- cycle hostRSA signature verification; Paired with RSA Signature Generation Key
Derived Key112 – 512A4687Internally per SP 800-56Cr2Output via API in plaintext (Electronic Output)N/APlaintext in RAM until function completionPower- cycle hostKey Derivation; Derived from Shared Secret
TLS Pre- Master Secret (other SSP)At least 112-bitA4687ExternalInput via API in plaintext (Electronic Entry)KAS-ECC, KAS- FFCPlaintext in RAM until function completionPower- cycle hostTLS key derivation; Derives TLS Master Secret

Public Material – May be reproduced only in its original entirety (without revision).

Page 25
Key/SSP Name/TypeStrengthSecurity Function Cert NumberGenerationImport/ ExportEstablishmentStorageZeroisationUse & related keys
TLS Master Secret (other SSP)At least 112-bitA4687Internally Derived via SP 800-135 KDF (TLS)N/AN/APlaintext in RAM until function completionPower- cycle hostTLS key derivation; Derived from TLS Pre-Master Secret, Derives TLS Key
TLS KeyAt least 112-bitA4687Internally Derived via SP 800-135 KDF (TLS)Output viaN/APlaintext in RAM until function completionPower- cycle hostTLS;
API inDerived
plaintextfrom TLS
(ElectronicMaster
Output)Secret
DRBG Seed384 bitsA4687Internally per SP 800-90Ar1N/AN/APlaintext in RAM until DRBG uninstantiated or module shutdownPower- cycle hostDRBG Seeding material
CTR_DRBG V128 bitsA4687Internally per SP 800-90Ar1N/AN/APlaintext in RAM until DRBG uninstantiated or module shutdownPower- cycle hostDRBG internal state

Public Material – May be reproduced only in its original entirety (without revision).

Page 26
Key/SSP Name/TypeStrengthSecurity Function Cert NumberGenerationImport/ ExportEstablishmentStorageZeroisationUse & related keys
CTR_DRBG Key256 bitsA4687Internally per SP 800-90Ar1N/AN/APlaintext in RAM until DRBG uninstantiated or module shutdownPower- cycle hostDRBG internal state
CTR_DRBG Entropy Input384 bitsA4687ExternalInput via API in plaintext (Electronic Entry)N/APlaintext in RAM until function completionPower- cycle hostDRBG entropy
Entropy sourcesMinimum number of bits of entropyDetails
Passive EntropyShall provide module at least 384 bits of entropyUse of a SP 800-90B compliant entropy source with at least 256 bits of security strength. Entropy is supplied to the Module via callback functions. The callback functions shall return an error if the minimum entropy strength cannot be met. The caveat “No assurance of the minimum strength of generated SSPs (e.g., keys)” is applicable.

Table 13

Page 27
TypeTest
Software Integrity TestHMAC-SHA-256
TypeTest
KATECDSA Signature Generation (P-256) ECSDA Signature Verification (P-256) RSA Signature Generation (2048 bits) RSA Signature Verification (2048 bits) SP800-56Arev3 KAS-ECC-SSC (P-256) SP800-56Arev3 KAS-FFC-SSC (2048 bits) AES CBC Encryption (128 bits) AES CBC Decryption (128 bits) AES-GCM Encryption (128 bits) AES-GCM Decryption (128 bits) TLS v1.2 KDF TLS v1.3 KDF HKDF SHA-1 SHA2-256 SHA2-512

10. Self-tests FIPS 140-3 requires the module to perform self-tests to ensure the integrity of the module and the correctness of the cryptographic functionality. Some functions also require conditional tests during normal operation of the module. Self-tests can be requested on demand by power cycling the host platform. The module has a single error state, just called the error state. The failure of a self-test will cause the module to enter the error state. The module indicates this error state by providing the output status “Aborted”. The module can be recovered by terminating execution of the host program and reclamation by the host operating system. The supported tests are listed and described in this section.

10.1 Pre-Operational Self-Tests

Pre-operational self-tests are run upon the initialization of the module. The CAST (Cryptographic Algorithm Self-Test) for HMAC-SHA2-256 is performed before the integrity test. Self-tests do not require operator intervention to run. If any of the tests fail, the module will not initialize and enter an error state where no services can be accessed. The module implements the following pre-operational self-tests: Table 15 – Pre-operational Self-tests

10.2 Conditional Self-Tests

Conditional cryptographic algorithm self-tests (CAST) are run prior to the first use of the cryptographic algorithm. CASTs do not require operator intervention to run. If any of the tests fail, the module will enter an error state and no services can be accessed. The module implements the following CASTs: Public Material – May be reproduced only in its original entirety (without revision).

Page 28
TypeTest HMAC-SHA2-256
CASTperformed on DRBG, per SP800-90Arev1 Section 11.3
TypeTest
Pair-wise Consistency TestECDSA Key Pair generation SP800-56Arev3 EC DH Key Pair generation SP800-56Arev3 DH Key Pair generation RSA Key Pair generation

Table 16

Page 29
Target PlatformTools
Android● repo git repository tool 2.4.0 (https://gerrit.googlesource.com/git-repo)
Linux● clang compiler version 16.0.0 (http://releases.llvm.org/download.html) ● go programming language version 1.21.1 (https://golang.org/dl/)

11. Life-Cycle Assurance The cryptographic module is initialized by loading the module before any cryptographic functionality is available. In User Space the operating system is responsible for the initialization process and loading of the library. General guidance about the module can be found at https://boringssl.googlesource.com/boringssl. This includes information about the APIs, building and specific information related to FIPS can be found at https://boringssl.googlesource.com/boringssl.git/+/refs/heads/fips20230428/crypto/fipsmodule/FIPS.md (note this still mentions 140-2, but the information there is the same).

11.1 Configuration Management

The source code for the module is maintained in a git repository. While in development, work on the code is maintained internally, before eventually being released externally. BoringCrypto is released publicly to https://boringssl.googlesource.com/boringssl (this is the generic version, available under the Building for Linux instructions). The version number is determined by the developer releasing the version, though git attaches hashes to every single file and branch in the repository. The Android version of the module is also maintained in a git repository. Once the generic version is available, it is imported into the Android repository. As with the generic version, while development on the port is performed, it is handled in an internal git repository. Once it is ready for release it is published publicly to https://ci.android.com. The version number is determined by the Android repository build number (the numeric part of the manifest filename). Only the Android version of the module is released as a pre-compiled version (as opposed to a selfcompiled version. The Android manifest specifies all the configuration information needed to duplicate the build. Documentation that isn’t included in text files stored in git is maintained in Google Docs. All documents (whether spreadsheets, documents, presentations or anything else) are automatically version tracked along with the owner. Like git, Docs uses access control lists to control access to the design documentation for the module. All internal systems (both git and Google Docs) utilize the Google ID for login and access control over the repositories.

11.2 Installation Instructions

The module is open source. A Linux workstation with the following tools is required to build and compile the module: Public Material – May be reproduced only in its original entirety (without revision).

Page 30
11.2.1 Building for Android

The necessary Android build tools that are configured as part of the manifest. Running the envsetup.sh script will ensure that the proper environment is set to build the library for Android. Download the manifest from https://ci.android.com/builds/submitted/10050109/aosp_cf_arm64_phone-userdebug/latest by clicking the Download button. Verify the manifest using the following command: sha256sum ~/manifest_10050109.xml Manually validate that the output from the final command indicates the following expected hash values for this file: 5f8701016e3c39503e26c81e0facb6ab386319b94f5d2508288907e652060d92 manifest_10050109.xml The module can be obtained by issuing the following commands: mkdir aosp cd aosp ~/repo init -u https://android.googlesource.com/platform/manifest --depth 1 ~/repo init -m ~/manifest_10050109.xml ~/repo sync -q -c -j 50 To build the correct test tools (the test_fips components below, not the module), the following additional steps need to be followed: cd external/boringssl git fetch https://android.googlesource.com/platform/external/boringssl refs/changes/99/2775199/2 && git cherry-pick FETCH_HEAD git fetch https://android.googlesource.com/platform/external/boringssl refs/changes/28/2778328/2 && git cherry-pick FETCH_HEAD cd src/util/fipstools nano break-kat.go Change the first line of the file to be: //go:build ignore Save and exit Once downloaded, the module and testing components can be built using the following commands: croot . build/envsetup.sh lunch aosp_arm64-eng m clean m test_fips Public Material – May be reproduced only in its original entirety (without revision).

Page 31
11.2.2 Building for Linux

Once the above tools have been obtained, issue the following command to create a CMake toolchain file to specify the use of Clang: printf "set(CMAKE_C_COMPILER \"clang\")\nset(CMAKE_CXX_COMPILER \"clang++\")\n" > ${HOME}/toolchain The FIPS 140-3 validated release of the module can be obtained by downloading the tarball containing the source code at the following location: https://commondatastorage.googleapis.com/chromium-boringssl-fips/boringssla430310d6563c0734ddafca7731570dfb683dc19.tar.xz or by issuing the following command: wget https://commondatastorage.googleapis.com/chromium-boringssl-fips/boringssla430310d6563c0734ddafca7731570dfb683dc19.tar.xz The set of files specified in the archive constitutes the complete set of source files of the validated module. There shall be no additions, deletions, or alterations of this set as used during module build. The downloaded tarball file can be verified using the below SHA-256 digest value: 2d5339b756dbf1ceb4fdc4b1c8f19e32ded055292dc57827a6592f15ca9d359f By issuing the following command: sha256sum boringssl-a430310d6563c0734ddafca7731570dfb683dc19.tar.xz The tarball can be extracted using the following command: tar xJ < boringssl-a430310d6563c0734ddafca7731570dfb683dc19.tar.xz After the tarball has been extracted, the following commands will compile the module: cd boringssl mkdir build && cd build && cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=${HOME}/toolchain -DFIPS=1 DCMAKE_BUILD_TYPE=Release .. ninja && ninja run_tests Retrieving Module name and version The following methods will provide the module name and versions:

Page 32
11.3 Crypto Officer Guidance
11.3.1 Usage of AES-GCM

In the case of AES-GCM, the IV generation method is user-selectable, and the value can be computed in more than one manner. In the context of the TLS protocol version 1.3, AES-GCM encryption and decryption is used compliant to Scenario 5 in FIPS 140-3 IG C.H. The module is compliant with NIST SP800-52rev2 and the mechanism for IV generation is compliant with RFC 8446. The module ensures that it is strictly increasing and thus cannot repeat. When the IV exhausts the maximum number of possible values for a given session key, the first party (client or server) to encounter this condition may either send a TLS 1.3 KeyUpdate message to establish a new encryption key, or fail. In either case, the module prevents any IV duplication and thus enforces the security property. In the context of the TLS protocol version 1.2, AES-GCM encryption and decryption is used compliant to Scenario 1 in FIPS 140-3 IG C.H. The module is compatible with TLS protocol version 1.2 using AES-GCM ciphersuites as specified in NIST SP800-52rev2, Section 3.3.1, and the mechanism for IV generation is compliant with RFC 5288. The module ensures that it is strictly increasing and thus cannot repeat. When the IV exhausts the maximum number of possible values for a given session key, the first party (client or server) to encounter this condition may either trigger a handshake to establish a new encryption key in accordance with RFC 5246 or fail. In either case, the module prevents any IV duplication and thus enforces the security property. The module’s IV is generated internally by the module’s Approved DRBG, which is internal to the module’s boundary. The IV is 96 bits in length per NIST SP 800-38D, Section 8.2.2 and FIPS 140-3 IG C.H scenario 2. The selection of the IV construction method is the responsibility of the user of this cryptographic module. In approved mode, only internally generated IVs are considered compliant for 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.

11.3.2 RSA and ECDSA Keys

The module allows the use of 1024-bit RSA keys for legacy purposes including signature generation, which is disallowed in Approved mode as per NIST SP 800-131A. Therefore, the cryptographic operations with the Non-Approved key sizes will result in the module operating in Non-Approved mode. The elliptic curves utilized shall be the validated NIST-recommended curves and shall provide a minimum of 112 bits of encryption strength.

11.3.3 CSP Sharing

Non-Approved cryptographic algorithms shall not share the same key or CSP as an approved algorithm. As such, Approved algorithms shall not use the keys generated by the module’s Non-Approved key generation methods or the converse. Public Material – May be reproduced only in its original entirety (without revision).

Page 33
11.3.4 Modes of Operation

The module supports two modes of operation: Approved and Non-approved. The module will be in approved mode when all power up self-tests have completed successfully, and only Approved algorithms are invoked. See Table 4 above for a list of the supported Approved algorithms. The nonApproved mode is entered when a non-Approved algorithm is invoked. See Table 6 for a list of nonApproved algorithms. 12. Mitigation of Other Attacks The module is not designed to mitigate against attacks that are outside of the scope of FIPS 140-3. Public Material – May be reproduced only in its original entirety (without revision).

Page 34
AbbreviationFull Specification Name
FIPS 140-3Security Requirements for Cryptographic modules
FIPS 180-4Secure Hash Standard (SHS)
FIPS 186-4Digital Signature Standard (DSS)
FIPS 197Advanced Encryption Standard
FIPS 198-1The Keyed-Hash Message Authentication Code (HMAC)
IGImplementation Guidance for FIPS PUB 140-3 and the Cryptographic Module Validation Program
SP 800-38ARecommendation for Block Cipher Modes of Operation: Three Variants of Ciphertext Stealing for CBC Mode
SP 800-38DRecommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC
SP 800-38FRecommendation for Block Cipher Modes of Operation: Methods for Key Wrapping
SP 800-56Arev3Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography
SP 800-90Ar1Recommendation for Random Number Generation Using Deterministic Random Bit Generators
SP 800-90BRecommendation for the Entropy Sources Used for Random Bit Generation
SP 800-131Ar2Transitioning the Use of Cryptographic Algorithms and Key Lengths
SP 800-133r2, [133]Recommendation for Cryptographic Key Generation
SP 800-135rev1Recommendation for Existing Application-Specific Key Derivation Functions
AcronymDefinition
ADBAndroid Debug Bridge
AESAdvanced Encryption Standard
APIApplication Programming Interface
CAVPCryptographic Algorithm Validation Program
CBCCipher-Block Chaining
CCCSCanadian Centre for Cyber Security
CFBCipher Feedback
CKGCooperative Key Generation
CMVPCrypto Module Validation Program
COCryptographic Officer
CPUCentral Processing Unit
CRNGTContinuous Random Number Generator Test
CSPCritical Security Parameter
CTRCounter-mode
CVLComponent Validation List
  1. References and Standards The following Standards are referenced in this Security Policy: Table 19 – References and Standards
  2. Acronyms Public Material – May be reproduced only in its original entirety (without revision).
Page 35
AcronymDefinition
DEPDefault Entry Point
DESData Encryption Standard
DHDiffie-Hellman
DRBGDeterministic Random Bit Generator
DSSDigital Signature Standard
ECElliptic Curve
ECBElectronic Code Book
ECCElliptic Curve Cryptography
EC DHElliptic Curve Diffie-Hellman
ECDSAElliptic Curve Digital Signature Authority
EMCElectromagnetic Compatibility
EMIElectromagnetic Interference
FCCFederal Communications Commission
FIPSFederal Information Processing Standards
GCMGalois/Counter Mode
GMACGalois Message Authentication Code
GPCGeneral Purpose Computer
GPOSGeneral Purpose Operating System
HMACKey-Hashed Message Authentication Code
IETFInternet Engineering Task Force
IGImplementation Guidance
IVInitialization Vector
KASKey Agreement Scheme
KATKnown Answer Test
KDFKey Derivation Function
KTSKey Transport Scheme
KWKey Wrap
KWPKey Wrap with Padding
LLCLimited Liability Company
MACMessage Authentication Code
MD4Message Digest algorithm MD4
MD5Message Digest algorithm MD5
N/ANot-Applicable
NISTNational Institute of Standards and Technology
NDRNGNon-Deterministic Random Number Generator
NVLAPNational Voluntary Lab Accreditation Program
OFBOutput Feedback
PAAProcessor Algorithm Accelerator
RAMRandom Access Memory
RFCRequest For Comment
RSARivest Shamir Adleman

Public Material – May be reproduced only in its original entirety (without revision).

Page 36
AcronymDefinition
SHASecure Hash Algorithm
SHSSecure Hash Standard
SPSpecial Publication
SSLSecure Socket Layer
TCBCTriple-DES Cipher-Block Chaining
TDEATriple Data Encryption Algorithm
TECBTriple-DES Electronic Code Book
TLSTransport Layer Security
Triple-DESTriple Data Encryption Standard

Table 20