Feature - Stable (and repairable) aggregate public keys using PSS/VSS (share refresh)
1. Description
1.1 Context & Purpose
Today, the sBTC signer set generates secp256k1 keys via an on-demand DKG process, for example in the following cases:
- The signer set has changed (added/removed/swapped a signer),
- The signature threshold has changed,
- A decision to refresh the keys has been made and the signers have aligned their configurations accordingly (e.g. if the key has been deemed to have been compromised).
This approach has a couple of limitations, however:
-
Unstable Aggregate Keys. When DKG is re-run (likely due to one of the above reasons), the resulting aggregate public key changes, forcing the bridge contract and off-chain participants to update to a new aggregate key each time, which can lead to drift (i.e. differing views of the current group public key).
-
Fragile Secret Shares. If a signer loses its secret share (e.g. disk failure, operator error), there's currently no way to recover it. The only option is to rerun the entire DKG, which changes the group public key. This threatens liveness and increases operational overhead. Some work has been done to attempt to mitigate this by using a participant-specific deterministic generation of poly commitments, however the full solution for recovering shares in practice is not yet implemented.
To address the above, we can use Verifiable Secret Sharing (VSS) and Proactive Secret Sharing (PSS) protocols to enable periodic share refresh and share recovery using a protocol akin to Repairable Threshold Scheme (RTS), while maintaining a stable aggregate public key across "key epochs".
In addition to refresh and repair, a re-sharing protocol could be used to add, remove, or swap signers in the set without requiring a new DKG. Re-sharing redistributes the same underlying group secret among a new participant set (with the same threshold policy).
This allows:
- Long-lived signer groups with fixed aggregate public keys,
- Resilience against individual signer failures (share loss or compromise),
- Periodic share rotation to mitigate key exposure without changing the aggregate key (old shares are invalidated by a refresh, assuming
n - t + 1 honest signers delete their old shares) -- a periodic refresh reduces the potential attack window for compromised shares),
- Repair of lost shares by a threshold of honest peers, without requiring a full DKG rerun.
- Incremental signer set changes without changing the aggregate public key.
2. Technical Details
2.1 Sub-Issues
(To be refined and then created as sub-issues)
- (WSTS) Implement VSS/PSS share refresh protocol
- Implement and provide an API for proactive refresh of each signer's share without changing the group public key (this is probably most intuitive as an instance method on a loaded state machine).
- Based on standard Feldman/Pedersen VSS with additive share refresh (new polynomial with zero constant term). Trusted dealer/centralized approaches should not be used. @xoloki please confirm
- Investigate if this can be done non-interactively for potentially offline signers, or if we have a 100% liveness requirement for refresh.
- (WSTS) Implement share repair / RTS (Recoverable Threshold Shares) protocol
- Allow a signer who has lost its share to request a recovery from the signer set, using a
threshold of its peers, by broadcasting a recovery request.
- Peers provide encrypted fragments that can be combined to reconstruct the original share (via a secure direct channel between peers).
- https://eprint.iacr.org/2017/1155.pdf (as referenced by ZCash's frost crate).
- (WSTS) Implement a re-sharing protocol for membership changes
- Allow the signer set to add, remove, or swap signers without running a new DKG using distributed resharing of the existing group secret with the same constant term, generating shares for the new participant set.
- Removed signers are simply excluded from the new polynomial distribution, and their shares become invalid.
- The aggregate public key remains unchanged.
- Likely very similar to the refresh machinery, but with support for changed participant lists.
- (sBTC) Implement & expose LibP2P's request/response protocol
- The above protocols require secure direct communication between signer peers (i.e. non-broadcast). LibP2P provides the mechanisms for this (request/response protocol), but it is not currently integrated into the signer.
- (sBTC) Implement share refresh in the sBTC signer
- Implement support for share refresh and accompanying integration tests.
- Introduce a hidden configuration flag which will prefer refresh over DKG when DKG shares are present, or full DKG when no shares are present.
- (sBTC) Implement signer set re-sharing in the sBTC signer
- Add support for safely resharing to reflect signer set changes without full DKG, including integration tests covering add/remove/swap scenarios.
- (sBTC) Define policy for share refresh vs. re-sharing vs. re-DKG
- Clearly define when each mechanism is used, e.g.:
- Refresh for routine key hardening and sub-threshold compromises.
- Re-sharing for incremental membership changes.
- Re-DKG for
>= t compromise, major churn (large set change), or threshold/policy changes.
2.2 Acceptance Criteria
3. Related Issues and Pull Requests (optional)
Feature - Stable (and repairable) aggregate public keys using PSS/VSS (share refresh)
1. Description
1.1 Context & Purpose
Today, the sBTC signer set generates secp256k1 keys via an on-demand DKG process, for example in the following cases:
This approach has a couple of limitations, however:
Unstable Aggregate Keys. When DKG is re-run (likely due to one of the above reasons), the resulting aggregate public key changes, forcing the bridge contract and off-chain participants to update to a new aggregate key each time, which can lead to drift (i.e. differing views of the current group public key).
Fragile Secret Shares. If a signer loses its secret share (e.g. disk failure, operator error), there's currently no way to recover it. The only option is to rerun the entire DKG, which changes the group public key. This threatens liveness and increases operational overhead. Some work has been done to attempt to mitigate this by using a participant-specific deterministic generation of poly commitments, however the full solution for recovering shares in practice is not yet implemented.
To address the above, we can use Verifiable Secret Sharing (VSS) and Proactive Secret Sharing (PSS) protocols to enable periodic share refresh and share recovery using a protocol akin to Repairable Threshold Scheme (RTS), while maintaining a stable aggregate public key across "key epochs".
In addition to refresh and repair, a re-sharing protocol could be used to add, remove, or swap signers in the set without requiring a new DKG. Re-sharing redistributes the same underlying group secret among a new participant set (with the same threshold policy).
This allows:
n - t + 1honest signers delete their old shares) -- a periodic refresh reduces the potential attack window for compromised shares),2. Technical Details
2.1 Sub-Issues
(To be refined and then created as sub-issues)
thresholdof its peers, by broadcasting a recovery request.>= tcompromise, major churn (large set change), or threshold/policy changes.2.2 Acceptance Criteria
>= tpeers without triggering a new DKG.3. Related Issues and Pull Requests (optional)