feat(tbtc): add guarded FROST share-repair recovery - #4241
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Addressed both transport-lifecycle findings in the latest update:
Added regression coverage for one logical announcement registration, exact Local validation:
|
|
Addressed the latest transport/security review in
Verification: all signing-package variants, focused/race repair and preflight The runbook also makes the preflight provenance launch gate explicit: the |
|
Addressed the latest bounded-buffer review finding, plus the Go half of restart-stable retries, in The buffering finding was valid: the previous 1,024-message bound allowed an authorized participant to retain hundreds of MiB of 256 KiB public-package frames per local seat before rendezvous. The fix now:
Regression coverage includes per-sender and total-byte floods, pre-clone rejection, duplicate/full-stream accounting, pending-byte accounting, byte-different delta/sigma retry candidates, strict public-package equivocation, concurrent race coverage, and the real 100-seat package-size launch proof. Validation: normal and frost-native signing suites, focused race tests, Go vet, diff/gofmt checks, and the real linked CGO suite (including multiprocess libp2p tests) all pass. Pin follow-up: |
|
Addressed the latest Go/native session-ID contract finding in The finding was valid. Go previously accepted nonempty session IDs up to 256 bytes and rejected only leading/trailing whitespace, while the pinned Rust signer accepts at most 128 UTF-8 bytes and rejects every ASCII control byte (including DEL), ASCII space, The fix adds one share-repair-local byte validator matching Rust's contract exactly, with explicit UTF-8 validation for programmatic Go inputs. Regression coverage now proves:
Validation passed: focused pre-fix reproducer, full |
b0709f1 to
53c6f4c
Compare
Summary
frost/share_repair/v1disaster-recovery maintenance for theexact helper and target seats named by an offline-signed authorization
transport-key entries, then require a separately authority-signed exact
helper-then-target roster in the final recovery bundle
scalar sets and transport private keys never enter Go requests or responses
before rendezvous buffering, while retaining legitimate early participant
frames
public-key/store roster; scope the channel to both authorization and roster
digests
retransmitters needed for the current completion phase
old-store tombstone and its registry root is pinned by the production
activation manifest
The target install remains inside the external state-anchor barrier.
Maintenance exits cleanly after completion; the bundle path must be removed
before restart, and production stays fail-closed until fleet cutover.
Roster issuance is a mandatory trusted incident ceremony. The authority must
authenticate each native preflight source/workload and must not sign public
keys supplied only by a potentially modified host. The runbook keeps the
production launch gate closed unless direct native/KMS or independent workload
attestation is available. An in-process FFI removes routine Go-heap/ABI secret
exposure but is not hardware isolation from arbitrary same-address-space code.
This is disaster recovery only. It does not change the capacity proposal in
#4222 or increase FROST threshold/group/state/anchor budgets. It follows the
share-repair investigation in #4222 and #4229.
Verification
go test ./pkg/frost/signing -count=1go test -tags=frost_native ./pkg/frost/signing -count=1go test -tags='frost_native frost_tbtc_signer' ./pkg/frost/signing -count=1go vet -tags='frost_native frost_tbtc_signer' ./pkg/frost/signingroster substitution, ciphertext shape, Begin/Finish cleanup, and
receipt/ACK/completion liveness
frost_nativetBTC package suitesStack
fix/anchor-integrity-4222)ci/frost-signer-pin.envpins the exact Rust commit from feat(tbtc/signer): add offline-authorized FROST share repair #4240Review/merge #4240 before this PR so the pinned native ABI is available.