Files

223 lines
12 KiB
Markdown
Raw Permalink Normal View History

# TRUSTED-COMPUTING-BASE — Corona implementation TCB
> **What you must trust to rely on Corona's construction-level
> correctness claim.** Companion to `PROOF-CLAIMS.md` (proof scope)
> and `CONSTANT-TIME-REVIEW.md` (per-path CT audit).
>
> **HONESTY NOTE**: Corona's TCB is structurally simpler than Pulsar's
> because Corona ships NO mechanized refinement layer (no EasyCrypt,
> no Lean, no Jasmin). That removes those tools from the TCB but
> increases the trust placed in the Go reference implementation
> review, KAT cross-validation, and the academic Boschini et al.
> construction analysis. See `PROOF-CLAIMS.md` for the honest framing.
## §0 Layered trust bases
The Corona construction-level claim rests on three layered trust
bases:
1. **The academic construction** — Boschini, Kaviani, Lai, Malavolta,
Takahashi, Tibouchi. *Practical two-round threshold signatures
from learning with errors.* IACR ePrint 2024/1113, IEEE S&P 2025.
This is the spec.
2. **The Go reference implementation**`sign/`, `threshold/`,
`dkg2/`, `reshare/`, `primitives/`, `hash/`. Reviewed by code
inspection + KAT cross-validation + fuzz.
3. **The trusted-computing base (TCB) below the implementation**
this document.
If any element of the TCB is unsound, the implementation's correctness
is unsound regardless of how clean the code review was.
## §1 Implementation TCBs
### §1.1 Reference implementation (Go)
| Component | Trust | Mitigations |
|---|---|---|
| Corona Go reference (this repository) | Standard library correctness, `crypto/rand` randomness quality, lattigo NTT/Montgomery/Gaussian-sampler primitives | Reviewed by code inspection; KAT cross-validation Go ↔ C++ (luxcpp port); fuzz harnesses on round-based protocols |
| `github.com/luxfi/lattice/v7` (lattigo fork) | Upstream `tuneinsight/lattigo/v7` NTT, Montgomery reduction, discrete-Gaussian sampler. Documented constant-time per upstream README; relevant routines are byte-stable. | Version pinned in `go.mod`. The fork carries Lux-specific extensions for hash-suite injection but the cryptographic kernels are unchanged from upstream. |
| `github.com/luxfi/math/codec` | LP-107 Phase 4 wire codec. Validates `Vector[Poly]` frame before lattigo `ReadFrom`. | Version pinned in `go.mod`. |
| `golang.org/x/crypto/sha3` | cSHAKE256, KMAC256, TupleHash256 primitives (Go-stdlib-style). | Version pinned in `go.mod`. |
| `crypto/subtle` | Constant-time byte-blob compare. Standard library. | Standard library; bundled with the Go toolchain. |
| `github.com/zeebo/blake3` | Legacy BLAKE3 hash suite (cross-port byte-check only; NOT the normative production profile). | Version pinned in `go.mod`. Legacy use only. |
### §1.2 Production targets (out of scope for v0.2)
| Target | Status |
|---|---|
| Optimized Rust crate | TODO — not in this submission |
| C library + FFI | C++ port at `~/work/luxcpp/crypto/corona/` is the de-facto C-ABI; clean C wrapper TODO |
| WASM build | TODO |
| no_std embedded | TODO |
For each future target, an independent constant-time audit + KAT
cross-validation + binding-level fuzzing is required before
considering it "production." The construction-level correctness
claim does NOT automatically transfer to these targets — each
target's correctness must be re-verified.
## §2 Build TCBs
| Layer | What you trust | Reproducibility |
|---|---|---|
2026-06-07 10:49:56 -07:00
| **Go toolchain** | The Go compiler used to build the reference. Version pinned to `go 1.26.4` in `go.mod`. | Hard-pinned in `go.mod`; `go.sum` enforces module checksums. |
| **`scripts/build.sh`** | The build orchestrator's correctness — that it produces deterministic outputs from a fresh checkout. | CI runs the script on every commit. |
| **`scripts/test.sh`** | The test harness's correctness — that KAT vectors compare bit-by-bit, not just lex-equal. | Reviewed; uses `bytes.Equal` for byte-level KAT comparison. |
| **`scripts/gen_vectors.sh`** | Deterministic regeneration of KAT vectors. | Wraps `scripts/regen-kats.sh`; the manifest at `scripts/regen-kats.manifest.sha256` pins SHA-256 of every regenerated file. |
| **`scripts/regen-kats.sh --verify`** | Cross-runtime byte-equality enforcement (Go ↔ C++). | Manifest is regenerated and compared; diff = build bug. |
## §3 What the TCB does NOT include
Corona's TCB is **structurally simpler** than Pulsar's because Corona
ships no mechanized refinement layer. The following are NOT in the
Corona TCB:
- **EasyCrypt prover** (Pulsar trusts it; Corona has no EC theories)
- **Lean 4 + Mathlib** (Pulsar uses Lean-bridged algebraic axioms;
Corona has none)
- **Jasmin verified compiler** (Pulsar's threshold layer is in Jasmin;
Corona is pure Go)
- **OCaml runtime** (EC is OCaml; Corona has no EC)
- **jasmin-ct** (Corona's CT evidence is static per-path audit, not
jasmin-ct analysis)
What IS in the Corona TCB but NOT in Pulsar's:
- **Greater dependence on Go reference review.** Pulsar can fall
back to the EC refinement chain if a Go reviewer misses a bug;
Corona's only line of defense is reviewer + KAT + fuzz.
- **Greater dependence on the academic Boschini et al. paper.**
Pulsar's spec target (FIPS 204) is an extensively-cryptanalyzed
NIST standard; Corona's spec target is a 2024 academic paper with
less cryptanalytic surface area at this writing.
## §4 What the TCB does NOT cover
These are explicitly NOT part of the trust base for Corona's
construction-level correctness claim:
- **Specific operating system** (Linux, macOS, BSD, Windows) — the
Go reference is OS-independent.
- **Specific CPU architecture** — Go compiles to amd64/arm64; both
exercised in CI.
- **Network protocol stack** — Corona's transport is out of scope.
- **Storage layer** — how `sk` shares are stored at rest is out of
scope. Production deployments use HSM-backed share material; see
`DEPLOYMENT-RUNBOOK.md`.
- **Key management policies** — key lifecycle is application-level
(governed by the consuming consensus layer, e.g. Quasar).
- **Application code calling Corona** — Corona's API contract is the
trust boundary.
## §5 TCB risks and mitigations
### §5.1 Construction-soundness risk
| Risk | Mitigation |
|---|---|
| The Boschini et al. ePrint 2024/1113 EUF-CMA reduction has a latent bug | Construction has been published and reviewed by the cryptographic community via IEEE S&P 2025 + IACR ePrint discussion. Lux tracks cryptanalysis literature; any flaw would prompt a parameter-set re-tune and a new key-era. Patent-bump policy and `DESIGN.md` "Reanchor" capability allow operational response. |
| Corona's production lifecycle additions (Pedersen DKG, reshare, activation cert) have a latent bug | Per-path tests in `dkg2/`, `reshare/` (45+ tests including `full_integration_test.go`). Independent third-party audit is roadmap item v0.8.0. |
### §5.2 Implementation-correctness risk
| Risk | Mitigation |
|---|---|
| Go reference implementation diverges from the construction | KAT cross-validation Go ↔ C++ (`scripts/regen-kats.sh --verify`); the C++ port is independently implemented from the same spec by a different engineer. Divergence = test failure. |
| KAT vectors are subtly wrong | Deterministic generation from fixed seeds; `cross_runtime_oracle/` and `cross_runtime_verify/` enforce Go ↔ C++ byte-equality. Both implementations would have to be wrong in the same way to escape this check. |
| Hash-suite implementation bug (cSHAKE256 / KMAC256 / TupleHash256) | `golang.org/x/crypto/sha3` is a widely-used standard library implementation; bugs are rare and quickly patched. NIST SP 800-185 KAT verification in `hash/hash_test.go` (`TestKMAC256NISTVector`, `TestTupleHash256NISTVector`). |
### §5.3 Build / reproducibility risk
| Risk | Mitigation |
|---|---|
| `scripts/build.sh` produces non-deterministic output | The build is deterministic from fixed seeds; reproducible-build property is checked on CI. Drift triggers a CI failure. |
| Toolchain version drift between commits | `go.mod` pin + `go.sum` enforcement. |
| KAT manifest drift across runs | `scripts/regen-kats.manifest.sha256` is the gate; `--verify` mode compares manifest hashes. |
### §5.4 Side-channel risk
| Risk | Mitigation |
|---|---|
| Timing leakage on secret-dependent paths | Static per-path audit in `CONSTANT-TIME-REVIEW.md` — zero `(c)` (must-fix) findings; two `(b)` entries with documented mitigations (one closed in `dkg2/`; one in lens-specific paths off the Corona threshold path). |
| Statistical timing leakage (dudect-style) | Roadmap item v0.8.0. Not validated at this submission. |
| Memory-access / cache-timing leakage | Not addressed. Production deployments should use TEE attestation (SGX, SEV-SNP, TDX) per `DEPLOYMENT-RUNBOOK.md`. |
## §6 Independent verification protocol
To independently verify Corona's claims, a reviewer should:
1. Clone the repo at the submission tag.
2. `scripts/build.sh` — expect deterministic output.
3. `scripts/test.sh` — expect KAT + integration + unit tests all green.
4. `scripts/gen_vectors.sh && scripts/regen-kats.sh --verify` — expect
byte-equal KAT manifest agreement.
5. `scripts/bench.sh` — expect performance within `docs/evaluation.md`
published bounds.
6. Read the Go reference implementation:
- `sign/sign.go` — single-party + threshold signing kernel
- `threshold/threshold.go` — threshold orchestration
- `dkg2/dkg2.go` — Pedersen DKG over `R_q`
- `reshare/reshare.go` + `reshare/activation.go` — proactive
resharing + activation cert
- `primitives/hash.go` + `hash/sp800_185.go` — Corona-SHA3 hash
suite
7. Cross-reference with Boschini et al. ePrint 2024/1113 §3 for the
2-round signing construction.
8. Cross-reference with `papers/lp-073-pulsar/` for the production
lifecycle additions (Pedersen DKG, resharing).
If all 8 steps pass, the trust base reduces to the TCB enumerated
in this document.
## §7 What this means for downstream consumers
For a downstream consumer (e.g., a Quasar consensus chain
incorporating Corona):
- **The construction-level claim is conditional on the TCB.** If
you change the Go toolchain, port to a different runtime, or
modify the hash suite, the claim's transferable guarantees
attenuate.
- **For FIPS 140-3 module validation**, Corona is NOT a candidate
— Module-LWE threshold has no NIST standard, so no FIPS 140-3 module
can claim FIPS 204-style algorithm validation for it. For
FIPS-validation pathways, use Pulsar (M-LWE / FIPS 204) instead.
- **For NIST MPTC review**, Corona's role is the algorithm-level
reference + production lifecycle artifacts; module packaging +
external audit are downstream.
- **For threshold signing in a Quasar deployment**, Corona is the
Module-LWE kernel; the consuming consensus layer is responsible for
the chain-of-custody and validator-rotation orchestration (the
LSS adapter at `~/work/lux/threshold/protocols/lss/lss_pulsar.go`
is the canonical orchestrator).
## §8 Honest comparison to Pulsar's TCB
| TCB element | Pulsar | Corona |
|---|---|---|
| EasyCrypt prover | YES (foundation of refinement proof) | NO (no EC theories) |
| Lean 4 + Mathlib | YES (5 Lean-bridged axioms) | NO |
| Jasmin verified compiler | YES (threshold layer in Jasmin) | NO (pure Go) |
| OCaml runtime | YES (EC is OCaml) | NO |
| Go toolchain | YES (Go reference) | YES (Go reference; primary) |
| lattigo / `luxfi/lattice/v7` | NO (Jasmin path) | YES (Module-LWE primitives) |
| `crypto/subtle` | YES (Go reference path) | YES (primary CT helper) |
| `golang.org/x/crypto/sha3` | YES | YES |
| Academic construction paper | FIPS 204 (NIST standard) | Boschini et al. ePrint 2024/1113 (2024 academic) |
| Third-party FIPS-validated verifier | YES (BoringSSL FIPS / AWS-LC / OpenSSL 3.0) | NO (none exists for Module-LWE threshold) |
**Net effect**: Corona's TCB is smaller (fewer proof-tool
dependencies) but the trust per-component is higher (no fall-back
to a mechanized refinement chain if a Go reviewer misses a bug).
---
**Document metadata**
- Name: `TRUSTED-COMPUTING-BASE.md`
- Version: v0.1 (initial submission-package scaffolding)
- Date: 2026-05-18
2026-06-07 10:49:56 -07:00
- Go toolchain pin: `go 1.26.4` (per `go.mod`)
- `luxfi/lattice/v7` pin: `v7.1.0` (per `go.mod`)