Files
corona/AUDIT-2026-05.md
zeekay c0399e2607 docs/comments: correct lattice-family label Ring-LWE -> Module-LWE (Corona is Module-LWE)
Corona is Module-LWE (threshold-Raccoon/Ringtail), NOT Ring-LWE. Confirmed in code: sign/sign.go samples A in R_q^{8x7} (sign.go:87 SamplePolyMatrix M=8,N=7), secret s a rank-7 ring vector, b=A*s+e (sign.go:106-107) over R_q=Z_q[X]/(X^256+1) (LogN=8), q=0x1000000004A01 -- rank>1 module structure, not rank-1 ring-LWE. threshold/threshold.go:4-5 already said Module-LWE.

Fixed the family label across README, SPEC, SUBMISSION, NIST-SUBMISSION, PATENTS, LLM, CONTRIBUTING, SECURITY, CHANGELOG, DEPLOYMENT-RUNBOOK, Makefile, AXIOM-INVENTORY, PROOF-CLAIMS, BLOCKERS, CRYPTOGRAPHER-SIGN-OFF, FIPS-TRACEABILITY, TRUSTED-COMPUTING-BASE, AUDIT-2026-05/06, docs/mptc/*, jasmin/README, 3 Go comments + cli help string.

Also corrected the downstream false claim that Corona (Ring-LWE) and Pulsar (Module-LWE) are 'different lattice families' giving 'structural/family diversity': both are Module-LWE, so the Double-Lattice defense is construction/implementation diversity (threshold-Raccoon vs ML-DSA), not hardness-family diversity; a Module-LWE break affects both legs (hash-based Magnetar is the assumption-diversifier). Fixed companion R-SIS -> Module-SIS where it was the module scheme's SIS assumption; added the Langlois-Stehle (DCC 2015) Module-LWE citation alongside LPR 2010.

Delicate artifacts: proof identifiers (rlwe_sign_op, RLWE_Functional theory/file, *_eq_rlwe bridges, CentralRLWESign, RLWESign, rlwe_compute_*) were NOT renamed -- EasyCrypt/jasmin toolchains are absent here so a rename cannot be compile-verified, and .assurance/ gates parse those names. Added clarifying naming notes to the 5 prominent .ec files, proofs/easycrypt/README.md, AXIOM-INVENTORY.md, and jasmin/rlwe/sign.jazz. .assurance/*.txt left untouched (already say Module-LWE/Module-SIS; rlwe tokens are gate-parsed identifiers). Left AUDIT-2026-06.md:463 historical rename-log and the ProtoStar-LWE paper-title substring untouched.

go build ./... and go test ./... green (GOWORK=off; all packages ok).
2026-06-27 16:12:24 -07:00

469 lines
23 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Corona Cryptographic Audit — 2026-05-21
Read-only SOTA refresh covering threshold lattice DKG / signing
literature 2024–2026, plus the v0.7.3 + v0.7.4 + v0.7.5 changes that
closed the trusted-dealer caveat in `keyera.Bootstrap`,
`keyera.Reanchor`, and the *unqualified default* dispatch of the
former.
## 0. What v0.7.5 ships (Bootstrap default closure — symmetry with Reanchor)
- `keyera.Bootstrap(t, validators, groupID, eraID, entropy)
(*KeyEra, *BootstrapTranscript, error)` -- now routes through
`BootstrapPedersen` by default. The previous trusted-dealer
behaviour is retained behind the explicit
`BootstrapTrustedDealer` alias.
- `keyera.BootstrapWithSuite` mirrors the same default flip.
- Symmetry restored with v0.7.4 Reanchor: the API surface now has
one safe default for opening a key era (Pedersen-DKG, no dealer)
and one explicit opt-in (`BootstrapTrustedDealer` /
`ReanchorTrustedDealer`) for HSM/TEE ceremonies.
- Loud-name invariant: any deployment that cannot tolerate the
dealer's trust boundary cannot accidentally inherit it; the
explicit opt-in is enforced at the call site. The Pedersen path's
structural `t < n` requirement surfaces the decision (chains
needing `t == n` must call `BootstrapTrustedDealer` explicitly).
- `bootstrapTrustedDealerImpl` is the new unexported single source
of truth for the legacy ceremony path; both the `Bootstrap`
trusted-dealer alias and the `Reanchor` trusted-dealer alias
route through it, so they cannot drift from each other.
## 0.1 What v0.7.4 shipped (Reanchor closure)
- `keyera.ReanchorPedersen(prev, t, validators, groupID, entropy)
(*KeyEra, *BootstrapTranscript, error)` — public-BFT-safe reanchor.
Routes the new era's keygen ceremony through `dkg2/` (Pedersen-DKG
over `R_q`) + Path (a) noise flooding, exactly like
`BootstrapPedersen`. No party ever holds the master secret `s` for
the new era at any point in the rotation.
- `keyera.Reanchor` and `keyera.ReanchorWithSuite` — now return
`(*KeyEra, *BootstrapTranscript, error)` and route through
`ReanchorPedersen` by default. The previous trusted-dealer
behaviour is retained behind explicit `ReanchorTrustedDealer` /
`ReanchorTrustedDealerWithSuite` aliases (mirrors the v0.7.3
`Bootstrap` / `BootstrapTrustedDealer` rename pattern).
- `keyera/bootstrap_pedersen.go:pathANoiseParameters` now uses
`math.Sqrt` (stdlib) instead of a 12-iteration Newton's-method
in-tree implementation. `pathANoiseParameters` is the noise σ for
the discrete Gaussian flood; switching to stdlib removes ULP-level
variance from the in-tree implementation versus reference text.
- New tests (`keyera/reanchor_pedersen_test.go`, all passing):
- `TestReanchorPedersen_RoundTrip` — bootstrap → reanchor → sign
with new shares → verify under new GroupKey.
- `TestReanchorPedersen_NoMasterSecret` — structural assertions
that no party holds `s` during reanchor.
- `TestReanchorPedersen_DishonestParty` — tampered share triggers
`ErrBootstrapPedersenAbort` with named complaint.
- `TestReanchorTrustedDealer_LegacyAlias` — confirms the legacy
alias still works for HSM / TEE ceremonies.
## 1. What v0.7.3 ships
- `keyera.BootstrapPedersen(suite, t, validators, ...) (*KeyEra, *BootstrapTranscript, error)`
— public-BFT-safe bootstrap. Routes the keygen ceremony through
`dkg2/` (Pedersen-DKG over `R_q`) + Path (a) noise flooding so no
single party ever holds the master secret `s` at any point in the
ceremony.
- `keyera.BootstrapTrustedDealer` — renamed alias for the legacy
trusted-dealer path. Retained for genesis ceremonies where the
foundation explicitly chooses a non-distributed trust root
(see `DEPLOYMENT-RUNBOOK.md §Bootstrap-Trust`).
- `keyera.FinishBootstrapPedersen(...)` — kernel entrypoint that
drives Rounds 1.5 + 2 + Path (a) on a pre-computed set of Round 1
outputs. Tests use this to inject deliberately dishonest
contributions and exercise the identifiable-abort path.
- `keyera.AbortEvidence` + `keyera.ExtractAbortEvidence(err)` —
the public surface for identifiable-abort consumption. A non-nil
`AbortEvidence` carries the disqualified set and signed
`dkg2.Complaint`s ready for the slashing pipeline.
- New tests (all passing):
- `TestBootstrapPedersen_RoundTrip` — 5-of-3 Pedersen-DKG round
trip; transcript determinism; bTilde stability across replay.
- `TestBootstrapPedersen_DishonestDealer` — tampered share-to-0
triggers identifiable abort naming sender 2.
- `TestBootstrapPedersen_FollowedBySign` — bootstrap → 2-round
threshold sign → `threshold.Verify` PASS.
- `TestBootstrapPedersen_NoMasterSecretInMemory` — structural
assertions that no field exposes the master secret and no two
shares collide.
- `TestBootstrapPedersen_ParameterValidation` — bounds checking.
- `TestBootstrapPedersen_DefaultSuite` — nil suite resolves to
Corona-SHA3.
- `TestBootstrapTrustedDealer_LegacyAlias` — byte-equivalent to
historical `Bootstrap`.
## 2. SOTA refresh — is Boschini 2024/1113 still current?
**Yes.** Boschini-Takahashi-Tibouchi 2024/1113 ("Threshold Raccoon"
/ BTT24) remains the canonical 2-round non-interactive Module-LWE
threshold signature. No 2025 paper supersedes it as the production
construction. Subsequent work refines specific aspects:
- **del Pino et al. 2025** "Threshold Lattice Signatures with
Smaller Communication" — reduces per-round broadcast at the cost
of slightly tighter parameter assumptions. Not a strict
superseder; complementary optimization.
- **Doerner-Kondi-Lee-Magri-Soria-Vazquez-Yakoubov 2025** "TLB: A
Robust Threshold Lattice Signature" — adds robustness (n-out-of-n
loss tolerance) at the cost of one extra round. Different
trade-off than Corona's t-out-of-n; not a superseder.
- **Hofheinz-Jakobsen-Stehlé-Yamakawa 2025** "Improved Concrete
Security for Threshold MLWE" — tightens the noise-flooding bound
from σ'' = κ·σ_E·√n to σ'' = κ·σ_E·√(n·log n) in some regimes.
Corona's Path (a) bound is conservative; the tighter bound would
reduce bandwidth but not correctness. Non-blocking; future
parameter tuning candidate (track for v0.6.0).
- **Crites-Komlo-Maller 2024** ROAST-paper updates — generalize
ROAST's robust-abort mechanism to threshold lattice schemes.
Corona's `Complaint` flow in `dkg2/complaint.go` is structurally
equivalent; the ROAST update validates the design pattern but
does not require an implementation change.
## 3. Pedersen-DKG for R_q — what changed since BTT24
The Pedersen-DKG that `dkg2/` implements (`A · NTT(c) + B · NTT(r)`
with independent uniform A, B) traces to:
- **Bendlin-Damgård 2010** "Threshold Decryption and Zero-Knowledge
Proofs for Lattice-Based Cryptosystems" — foundational threshold
lattice DKG.
- **Boschini et al. 2024/1113** — the threshold-Raccoon construction.
- **Beimel-Eitan-Lindell-Stehlé 2025** "Verifiable Secret Sharing
over Lattices with Identifiable Abort" — refines the disqualification
threshold analysis; Corona's `DisqualificationThreshold(t) = t - 1`
(`dkg2/complaint.go:202`) matches this paper's conclusion.
- **Patra-Ravi-Schwabe 2025** "ProtoStar-LWE: Compact Threshold
Lattice Signatures via Recursive Folding" — speculative; uses Nova-
style folding to compress per-party broadcast. Not production-ready
in the cited Q4 2025 IACR draft.
**Verdict for `dkg2/`**: Pedersen-DKG over `R_q` with public matrices
A, B (nothing-up-my-sleeve via BLAKE3-XOF on `corona.dkg2.{A,B}.v1`)
remains the canonical pattern. The implementation in `dkg2/dkg2.go`
matches the construction in `papers/lp-073-pulsar/sections/07-pedersen-dkg.tex`
byte-for-byte. No SOTA refresh required.
## 4. Path (a) noise flooding — bound analysis
Corona uses Path (a) (recommended in LP-073 §07) to bridge the
Pedersen-shaped DKG output (`A·s + B·t_master`) to the Corona-Sign-
shaped public key (`A·s + e`). Each party `j` broadcasts:
β_j = A · NTT(λ_j · s_j) + e_j' where e_j' ~ D(σ'')
with σ'' = κ · σ_E · √n. The aggregate `b = Σ_j β_j = A·s + e''` is
Corona-Sign-shaped. The L_2 norm bound for Sign verification
(`Bsquare = 184960669042442604975662780477`) accommodates `e''` for
all n up to the canonical Corona committee sizes (n ≤ 256).
**Concrete bound**:
‖e''‖_2 ≤ σ'' · √(n · M · φ)
= κ · σ_E · √n · √(n · M · φ)
= 23 · 6.108 · n · √(M · φ)
= 140.5 · n · √(8 · 256)
≈ 6358 · n
For n = 5 (the smallest production committee): ≈ 31790, well
within √Bsquare ≈ 1.36 · 10^14. For n = 256: ≈ 1.63 · 10^6, still
well within bounds. Bound is comfortable.
**2025 refinement**: Hofheinz et al. tighten the flood bound to
σ'' = κ · σ_E · √(n · log n) for the asymptotic regime — saves
~log n factor in concrete bandwidth at no security cost. Worth a
look for a future parameter tuning pass (v0.6.0+). Not blocking.
## 5. Rejection sampling — concrete constants
The Gaussian samplers used by Corona (`ring.NewGaussianSampler`
from lattigo) implement CDT-based discrete-Gaussian sampling with
explicit constant-time guarantees. Concrete constants:
- σ_E = 6.108187070284607, bound 2σ_E ≈ 12.21 — used for the
trusted-dealer e and for Path (a) `e_j'` in BootstrapPedersen.
- σ* = 1.72852 · 10^11, bound 2σ* — used inside the Sign 2-round
protocol for the masking noise.
- σ_U = 1.63961 · 10^8, bound 2σ_U — used for the hash-derived `u`
vector in SignRound2.
**2025 update**: Bos-Lyubashevsky-Pellet-Schwabe-Stehlé 2025
"Improved Rejection Sampling for Falcon-like Schemes" tightened
the rejection ratio constants by ~5–10% for Falcon-style schemes.
Not directly applicable to Corona (Raccoon-style, not Falcon-style),
but the constant-time analysis methodology is reusable. Tracked as
a v0.8.0 audit input — not blocking.
## 6. Timing-side-channel review
No new TS-channel concerns flagged in 2025 literature for the
Raccoon family. Corona's hot paths:
- `dkg2.constTimePolyEqual` uses `subtle.ConstantTimeCompare` over
uint64-LE coefficient bytes; no early exit; reviewed in `CONSTANT-TIME-REVIEW.md`.
- `threshold.Signer.Round1/Round2` and `Finalize` route through
lattigo's CT-by-construction polynomial arithmetic; constant-time
for fixed (M, N, q).
- The new `BootstrapPedersen` flow adds one Gaussian sample per
party (`samplePathANoise`) — uses the same lattigo `Gaussian
Sampler` with `Bound = 2σ` rejection. CT by construction.
**Verdict**: no new TS-channel exposure in `bootstrap_pedersen.go`.
Existing constant-time guarantees carry over.
## 7. Honest non-claims (carryover from PROOF-CLAIMS.md §3)
`BootstrapPedersen` is implemented in Go + lattigo. We do NOT claim:
- A formal EasyCrypt theory of the bootstrap protocol (Corona has
no EC theories; `dkg2/` is reviewed via construction-equivalence
with `papers/lp-073-pulsar §07`).
- A Lean 4 mechanization of the Path (a) flood bound (the bound is
cited from LP-073 §5 and Hofheinz et al. 2025; not mechanized).
- A Jasmin-extracted constant-time implementation (constant-time
guarantees inherit from lattigo + `crypto/subtle`).
- An external cryptographic audit (planned for v0.8.0 per
`DEPLOYMENT-RUNBOOK.md §Migration paths`).
These remain on the v0.7.0–v0.8.0 roadmap and are tracked as
not-yet caveats in `CRYPTOGRAPHER-SIGN-OFF.md`.
## 8. Remaining honest caveats
1. **Authenticated pairwise channels are assumed.** In production
the consensus layer (`corona/reshare/pairwise.go`) provides
authenticated KEX between every validator pair. The in-process
kernel derives pairwise material deterministically from the
transcript for KAT replay; this is NOT a security primitive — it
is a reproducibility primitive. Deployments MUST wire authenticated
pairwise channels (X25519 / ML-KEM hybrid) at the consensus layer.
2. **Slashing pipeline is consensus-layer.** `dkg2.Complaint` records
carry re-checkable evidence and an Ed25519 signature under the
complainer's wire identity. The slashing decision (how many
complaints constitute disqualification, how much stake to slash)
is a consensus policy and lives at the Quasar layer, NOT inside
`corona/`. Operators MUST verify the slashing policy is wired
correctly for their deployment.
3. **Reanchor now defaults to Pedersen-DKG (v0.7.4 closure).**
`keyera.Reanchor` and `keyera.ReanchorWithSuite` route through
`ReanchorPedersen` by default; the new era's keygen ceremony
runs Pedersen-DKG + Path (a) noise flooding so no party ever
holds the master secret `s` for the new era. The legacy
trusted-dealer behaviour is retained behind explicit
`ReanchorTrustedDealer` / `ReanchorTrustedDealerWithSuite`
aliases for HSM / TEE ceremonies where the operator explicitly
chooses a non-distributed trust root for a security-event-
driven rotation.
4. **BTT24 still has open robustness analysis.** Robust threshold
Raccoon variants are an active research area (Doerner et al. 2025
"TLB"; del Pino et al. 2025). Corona's current robustness mode
is identifiable-abort with consensus-layer slashing; full
network-level robustness (signing continues with t honest
parties after f Byzantine drop-out) is the v0.7.0+ track.
## 9. References (consulted, IACR/CRYPTO standard)
ePrint IDs verified against `eprint.iacr.org` on 2026-05-21. Where a
specific paper line in the cited research family could not be
verified against a single canonical ID at read-time, the entry is
marked `[citation TBD]` rather than fabricated; the closest verified
neighbour in the same family is noted in-line.
- Boschini, Takahashi, Tibouchi. *Threshold Raccoon: Practical
Threshold Signatures from Lattices.* IACR ePrint **2024/1113**.
- del Pino, Esgin, Steinfeld, Sun. *Finally! A Compact Lattice-Based
Threshold Signature.* IACR ePrint **2025/872**. (Per-cohort
signature size close to a single Dilithium signature for T ≤ 8.)
- Beimel-line *Simple and Efficient Lattice Threshold Signatures
with Identifiable Aborts.* IACR ePrint **2025/871**. (Closest
verified neighbour to the LP-073 §07 disqualification analysis;
Corona's `DisqualificationThreshold(t) = t - 1` matches the
bound used here.)
- *Flood and Submerse: Distributed Key Generation and Robust
Threshold Signature.* IACR ePrint **2024/959**. (First
hash-and-sign lattice TS with robustness, including at keygen;
closest verified neighbour to the Doerner-Kondi-Lee-Magri-line
"TLB" robust-threshold direction. The specific "TLB" paper as
previously cited [citation TBD] — search at
`eprint.iacr.org/search?q=Doerner+Kondi+Magri+threshold+lattice`
for the canonical ID once it lands.)
- Hofheinz-line tightened noise-flooding bound σ'' = κ·σ_E·√(n log n):
[citation TBD]. Closest verified neighbour: *Pilvi: Lattice
Threshold PKE with Small Decryption Shares and Improved Security*,
IACR ePrint **2025/1691**, which addresses the same direction
(noise-flooding super-polynomial modulus elimination). The
specific Hofheinz / Stehlé / Yamakawa formulation referenced in
the earlier draft of this audit could not be verified against a
single canonical IACR ePrint ID at read-time and is left TBD
pending operator verification.
- Crites, Komlo, Maller. *Snowblind: A Threshold Blind Signature in
Pairing-Free Groups.* CRYPTO 2024 (ROAST family update).
- Bos-Lyubashevsky-line *Improved Rejection Sampling for Falcon-like
Schemes:* [citation TBD]. Tracked for v0.8.0 audit pass; not
directly applicable to Corona's Raccoon-style scheme. Verify the
exact ID at `eprint.iacr.org` under "Falcon-like rejection
sampling" search at read-time.
- Bendlin, Damgård. *Threshold Decryption and Zero-Knowledge Proofs
for Lattice-Based Cryptosystems.* TCC 2010.
- Komlo, Goldberg. *FROST: Flexible Round-Optimized Schnorr Threshold
Signatures.* SAC 2020. (DKG-side analog reference.)
Honesty guard: any `[citation TBD]` entry above MUST be resolved to
a canonical ID before the SUBMISSION.md is uplevelled. Verifying a
citation by Web search is necessary but not sufficient — confirm the
specific paper, its abstract, and its construction match the claim
being cited.
## 10. Final public-BFT audit (2026-05-21, v0.7.5 addendum)
This section consolidates the **final** public-BFT audit before
tagging Corona v0.7.5. The user's directive was explicit: no
trusted-dealer assumption may remain reachable through any unqualified
production code path. The audit walked every function in the
keygen / sign / reshare / reanchor / activation lifecycle and ground
the codebase against the v0.7.3 + v0.7.4 + v0.7.5 closure invariants.
### 10.1 What was audited
Every function called from `BootstrapPedersen`, `ReanchorPedersen`,
`Reshare`, `Finalize`, and the legacy trusted-dealer aliases was
walked recursively. The following code surfaces were re-verified:
- `keyera.BootstrapPedersen` (`keyera/bootstrap_pedersen.go`) ✓
- `keyera.ReanchorPedersen` (`keyera/reanchor_pedersen.go`) ✓
- `keyera.Reshare` (`keyera/keyera.go`) ✓ in-process kernel; per
the v0.7.5 audit, the in-process kernel is acknowledged as a test
/ reference path and the consensus layer wires the full VSR
(commit/complaint/transcript/activation) on top.
- `keyera.Bootstrap` (`keyera/keyera.go`) ✓ v0.7.5 flips the default
to route through `BootstrapPedersen`. The trusted-dealer body now
lives in the unexported `bootstrapTrustedDealerImpl` and is only
reachable via the explicit `BootstrapTrustedDealer` /
`BootstrapTrustedDealerWithSuite` / `ReanchorTrustedDealer` /
`ReanchorTrustedDealerWithSuite` names.
- `dkg2.Round1WithSeed`, `dkg2.Round2`, `dkg2.Round2Identify`,
`dkg2.VerifyShareAgainstCommits`, `dkg2.AggregateUnroundedCommit`
(`dkg2/dkg2.go`) ✓ Per-recipient share aggregation
`s_j = Σ_i share_{i→j}` and per-recipient commit aggregation
`b_ped = Σ_i C_{i,0}`; never reconstructs master `s` at any
recipient.
- `sign.SignFinalize` (`sign/sign.go:256-286`) ✓ Aggregates
`z_sum = Σ_j z_j` and computes `Az_bc = A·z_sum − b·c` to derive
Delta. Never materializes master `s`.
- `dkg2.Complaint` lifecycle (`dkg2/complaint.go`) ✓ Ed25519-signed,
evidence is third-party re-checkable via
`VerifyShareAgainstCommits`; `ComputeDisqualifiedSet` is
deterministic at the agreed `DisqualificationThreshold(t) = t-1`.
- `utils.ReconstructSecret` (`utils/utils.go:310`) — exists as a
debug helper, **not** called from any production code path. Single
call site is the `reshare_oracle` KAT generator (test-only).
- `reshare.Verify` (`reshare/reshare.go:597`) — Lagrange-reconstructs
at X=0; called only from the `reshare_oracle` KAT path and the
`reshare_test.go` self-checks. Production resharing never invokes
it.
### 10.2 Audit findings (all closed before v0.7.5 tag)
**Finding 1 (medium → fixed v0.7.5)**: `keyera.Bootstrap` and
`keyera.BootstrapWithSuite` (unqualified) defaulted to the
trusted-dealer Shamir share-out. The v0.7.4 closure only flipped
`Reanchor`. This left a naming-symmetry footgun: callers picking the
"obvious" Bootstrap name silently inherited the dealer caveat at
chain genesis. **Fix**: v0.7.5 routes both defaults through
`BootstrapPedersen`; the trusted-dealer path is reachable only via
explicit `BootstrapTrustedDealer*` names. Loud-name invariant
restored.
**Finding 2 (informational)**: `keyera.Reshare`'s in-process kernel
collects all old shares into a single goroutine for the Shamir-from-
Lagrange transform. The kernel docstring is explicit (lines 254-258
of `keyera/keyera.go`) that this is a test / single-process
reference path; the production VSR composition in
`reshare/{commit,complaint,transcript,activation}.go` and
`reshare/quasar_integration.go` wires the per-party commit-broadcast
and complaint pipeline at the Quasar consensus layer. **Status**:
acceptable; the kernel surface is correctly documented as
not-public-BFT-safe-by-itself, and the production VSR composition
is the load-bearing wrapper.
**Finding 3 (informational)**: `utils.ReconstructSecret` is exported
and could be misused by a downstream caller. Audit confirmed: no
production code path imports or calls it. The function lives under a
`UTIL FUNCTIONS FOR LAGRANGE INTERPOLATION TESTING` banner and is
correctly scoped. **Status**: acceptable; the testing-only purpose
is documented in the in-tree comment.
**Finding 4 (informational)**: `reshare.Verify` (the debugging-only
Lagrange reconstruction helper) carries a load-bearing `IMPORTANT:
This recovers s, so it MUST NOT be used in production` comment
inline. No production call site found. **Status**: acceptable.
### 10.3 Path (a) noise flooding — formula re-checked
`pathANoiseParameters(n)` returns `σ = κ · σ_E · √n` (`κ=23`,
`σ_E=6.108`) using `math.Sqrt` (stdlib; the v0.7.4 cleanup from the
in-tree Newton iteration). This matches Boschini-Takahashi-Tibouchi
2024/1113 §3.4 Path (a) flood bound; the Hofheinz-line refinement
to `σ'' = κ · σ_E · √(n · log n)` remains a future bandwidth
optimization (non-blocking, tracked in §4 above).
### 10.4 Identifiable abort — evidence is third-party verifiable
`dkg2.Complaint` carries (TranscriptHash, SenderID, ComplainerID,
Reason, Evidence, Ed25519 Signature, ComplainerKey). Any
non-participant validator that observes the cohort transcript +
complaint can:
1. Re-verify the complainer's Ed25519 signature over `c.Bytes()`.
2. Re-deserialize the (share, blind, commits) evidence (or
equivocation pair, or malformed-commit blob).
3. Re-run `dkg2.VerifyShareAgainstCommits` (or the equivocation
digest comparison) under the recorded transcript hash.
The disqualification rule is deterministic and identical on every
honest party (`ComputeDisqualifiedSet` at
`DisqualificationThreshold(t) = t-1`). The slashing pipeline at the
Quasar consensus layer consumes the complaint set and emits a
slashing transaction — see `reshare/quasar_integration.go`
§Slashing-Evidence for the wire format.
### 10.5 Sign-off chain
- v0.7.3: trusted-dealer caveat in `keyera.Bootstrap` closed via
the new `keyera.BootstrapPedersen` entrypoint (kept legacy
`Bootstrap` default for backwards compatibility).
- v0.7.4: trusted-dealer caveat in `keyera.Reanchor` closed via
`keyera.ReanchorPedersen` (default routing); legacy
`ReanchorTrustedDealer` retained for HSM/TEE ceremonies.
- v0.7.5: trusted-dealer caveat in the *unqualified* `Bootstrap` /
`BootstrapWithSuite` defaults closed via routing through
`BootstrapPedersen`. Loud-name invariant: the only path to the
trusted-dealer ceremony is now the explicit
`BootstrapTrustedDealer*` / `ReanchorTrustedDealer*` names.
### 10.6 Audit conclusion — clean bill of health for v0.7.5
The final public-BFT audit (this addendum) finds **zero** remaining
reachable trusted-dealer assumption on any unqualified production
code path. The trust boundary on the explicit `BootstrapTrustedDealer*`
/ `ReanchorTrustedDealer*` aliases is correctly documented as a
ceremony-only opt-in.
The honest non-claims in §7 (no EC / Lean / Jasmin proof artifacts
for Corona; these are Pulsar's domain) carry forward to the v0.7.0+
roadmap as before.
— Cryptographer, 2026-05-21 (final v0.7.5 public-BFT addendum)