# FIPS 140: Mirror's position

**Mirror ships no FIPS 140-validated cryptographic module and claims no validation.** This page says which algorithms Mirror uses, which module performs them in each place, and what a bank does to put every key operation inside a module it has already validated.

## The algorithms: approved ones only

| Algorithm | Used for | Standard |
|---|---|---|
| ECDSA P-256 with SHA-256 | Signing legs, verdicts, governance events, logins, attestations, deliveries | FIPS 186-5 |
| SHA-256 | Commitments, digests, key ids | FIPS 180-4 |
| HMAC-SHA-256 | Per-shipment salts derived from the corridor secret | FIPS 198-1 |
| ECDH P-256 | Optional pairwise corridor secrets | NIST SP 800-56A Rev. 3 |

There are no proprietary ciphers, no custom constructions and no zero-knowledge proofs; the ZK proof is [commissioned, not built](/commission-zk.md). The cryptographic bill of materials is signed at `/cbom`.

## The module, place by place

| Where | What performs the operation | FIPS position |
|---|---|---|
| **The bander, corridor secret and member key in the bank's HSM** (`--custody`) | The bank's own HSM or KMS, through the bank's own tool | The bank's module and the bank's validation. **This is the recommended production posture.** |
| The bander, key files | Node.js and the OpenSSL it is built with | Validated only if that Node build runs with an OpenSSL 3 FIPS provider that is on a validation certificate, started with `--force-fips`. `mirror-bander fips` reports the mode of the running process and exits 0 only in FIPS mode. |
| The hosted operator (Cloudflare Worker) | The Workers runtime's cryptography | No FIPS claim is made for it. The operator holds no corridor secret and no member key; it signs verdicts with its own key and compares commitments. |
| The browser console | The browser's WebCrypto | No FIPS claim. The console is for demonstration and verification, not production key custody. |

## What a bank does

1. Keep the corridor secret and the member signing key in its HSM. The ceremony is in [custody](/custody.md).
2. Where the bander must use key files, for example in a pilot, run it on a Node build with the FIPS provider, and check with `mirror-bander fips`.
3. Verify the operator's signatures with the bank's own validated module if its policy requires it. Verification is ES256 over canonical JSON (SPEC §8.2) and needs nothing from Mirror.

## What this page does not claim

- That any Mirror artefact is FIPS-validated.
- That the hosted operator runs in FIPS mode.
- That a key file on disk meets any FIPS requirement.

If a procurement questionnaire asks "is the product FIPS 140-3 validated?", the accurate answer is **no**. The accurate follow-up is: every key operation can run inside the bank's own validated HSM, and the algorithms are approved.
