Craton Shield

FIPS 140-3 Security Policy

FIPS 140-3 Security Policy

Module: Craton Shield Cryptographic Module | Version: 0.6.0 | Date: 2026-03-28 Target Level: FIPS 140-3 Level 1 (Software Module)


1. Module Identification

FieldValue
Module nameCraton Shield Cryptographic Module
Cratevs-crypto
Version0.6.0
TypeSoftware
EmbodimentMulti-chip standalone (general-purpose processor)
FIPS 140-3 levelLevel 1 (target)
Operational environmentLimited (no_std, single-threaded, bare-metal or RTOS)
InterfacesCryptoProvider trait (Rust API); C FFI bindings via vs-ffi

2. Cryptographic Boundary

The FIPS 140-3 module boundary encompasses the vs-crypto crate and its direct cryptographic dependencies. All cryptographic operations enter and exit through the CryptoProvider trait interface.

2.1 Components Within Boundary

ComponentRole
CryptoProvider traitPublic interface for all cryptographic services
SoftwareCryptoProviderSoftware implementation of CryptoProvider
KeyStoreStack-allocated key storage (32 slots, 32 bytes each)
aes-gcm 0.10AES-256-GCM implementation
sha2 0.10SHA-256 implementation
hmac 0.12HMAC-SHA-256 implementation
p256 0.13ECDSA P-256 and ECDH P-256 implementation
zeroize 1.xSecure memory clearing
subtle 2.xConstant-time comparison operations

2.2 Components Outside Boundary

All other Craton Shield crates (e.g., vs-can-monitor, vs-ota-validator, vs-key-manager) are outside the cryptographic boundary. They invoke cryptographic services solely through the CryptoProvider trait.

Full boundary diagram: docs/certification/fips-140-3-boundary.md.


3. Approved Algorithms

AlgorithmStandardKey/Digest SizeUsage
AES-256-GCMFIPS 197 + SP 800-38D256-bit key, 96-bit IV, 128-bit tagOTA image encryption, secure channel
SHA-256FIPS 180-4256-bit digestFirmware integrity, TUF metadata hashing
HMAC-SHA-256FIPS 198-1256-bit key, 256-bit tagMessage authentication, key derivation, log chaining
ECDSA P-256FIPS 186-5256-bit key pairOTA signature verification, V2X authentication
ECDH P-256SP 800-56Ar3256-bit key pairKey agreement for secure sessions

4. Non-Approved Algorithms

The following algorithms are feature-gated behind the pq-software feature flag and are excluded from the FIPS 140-3 module boundary:

AlgorithmStandardStatus
ML-KEM-768FIPS 203 (draft)Experimental; post-quantum key encapsulation
ML-DSA-65FIPS 204 (draft)Experimental; post-quantum digital signature

These algorithms are accessed through the separate PostQuantumProvider trait. When the pq-software feature is disabled (default), no post-quantum code is compiled.

Operator requirement: For FIPS-validated operation, the pq-software feature must remain disabled.


5. Key Management

5.1 Key Storage

PropertyValue
Storage modelStack-allocated fixed-size slots
Maximum slots32
Key size32 bytes per slot
Heap allocationNone

5.2 Key Lifecycle

PhaseMechanism
GenerationExternal RNG function pointer provided at initialization
StorageWritten to KeyStore slot via CryptoProvider interface
UsageReferenced by slot index; key material never exposed through public API
ZeroizationZeroize trait implemented on KeyStore; all key material zeroed on drop

5.3 Key Zeroization

  • All types containing key material derive Zeroize and ZeroizeOnDrop.
  • Key material is zeroed when the SoftwareCryptoProvider is dropped.
  • Explicit zeroization is available through the zeroize() method.
  • Stack-based storage eliminates heap residue risk.
  • Zeroization is verified through dedicated tests (tests/zeroization.rs).

6. Self-Tests

6.1 Power-On Self-Tests (POST)

The module executes Known Answer Tests (KATs) during vs-crypto::init() before any cryptographic service is available. All POST must pass for the module to enter the Operational state.

TestAlgorithmMethod
AES-256-GCM KATAES-256-GCMEncrypt/decrypt with NIST CAVP test vector; compare against known answer
SHA-256 KATSHA-256Hash known input; compare against known digest
HMAC-SHA-256 KATHMAC-SHA-256Compute MAC on known input with known key; compare against known tag
ECDSA P-256 KATECDSA P-256Sign known message; verify signature; compare against known-good result
ECDH P-256 KATECDH P-256Derive shared secret from known key pairs; compare against expected value

Full KAT specification: docs/certification/fips-140-3-kat-plan.md.

6.2 Periodic Self-Tests

The periodic_self_test() function re-executes all POST KATs on demand. Integrators should invoke this function at a frequency appropriate for their deployment context (recommended: at least once per ignition cycle for automotive applications).

6.3 Self-Test Failure

If any self-test fails:

  1. The module transitions to the Error state.
  2. All cryptographic service functions return VsError::SelfTestFailed.
  3. No cryptographic output is produced.
  4. The module remains in the Error state until re-initialized.

7. Error Reporting

All errors are reported through the VsError return type. The module does not use exceptions, panics, or global error state.

Error CodeMeaning
VsError::SelfTestFailedA KAT or integrity check failed; module is in Error state
VsError::CryptoErrorA cryptographic operation failed (invalid input, authentication failure)
VsError::InvalidSlotReferenced key slot is out of range or uninitialized
VsError::BufferTooSmallOutput buffer is insufficient for the requested operation

8. Operator Guidance

8.1 FIPS-Validated Operation

To operate the module in FIPS-validated mode, operators must:

  1. Disable the pq-software feature flag (default configuration).
  2. Provide a cryptographically secure RNG function pointer at initialization.
  3. Call vs-crypto::init() and verify successful return before using any cryptographic service.
  4. Invoke periodic_self_test() at appropriate intervals.
  5. Ensure the SoftwareCryptoProvider is properly dropped (or zeroize() called) when the module is no longer needed.

8.2 Physical Security

FIPS 140-3 Level 1 does not impose physical security requirements beyond production-grade components. For deployments requiring higher assurance, operators should consider:

  • Hardware security modules (HSM) for key storage
  • Secure boot enforcement at the platform level
  • Physical tamper detection on the gateway ECU

8.3 Firmware Update

When updating the module:

  1. Verify the update image signature using the OTA validator before applying.
  2. After update, the module will re-execute POST on next initialization.
  3. Confirm POST passes before resuming operations.

9. References

DocumentLocation
FIPS 140-3 module boundary definitiondocs/certification/fips-140-3-boundary.md
FIPS 140-3 KAT implementation plandocs/certification/fips-140-3-kat-plan.md
FIPS 140-3 finite state machinedocs/certification/fips-140-3-state-machine.md
NIST FIPS 140-3ISO/IEC 19790:2012
NIST SP 800-140 seriesImplementation guidance for FIPS 140-3