Refresh shares without re-keying
Problem: You have a 2-of-3 threshold key in production. Shares have been around long enough that you want to rotate them — but re-doing the DKG would change the public key, breaking every existing signature.
Solution
Herzberg proactive security (a.k.a. share refresh) lets parties collaboratively compute new shares of the same secret. The public key doesn’t change. Old shares become useless once the refresh completes.
# Existing shares
ls shares/
# party1.json party2.json party3.json
# Run refresh ceremony (all N parties must participate)
confium threshold refresh \
--shares shares/party1.json shares/party2.json shares/party3.json \
--threshold 2 \
--parties 3 \
--scheme cmp20 \
--out-dir shares-refreshed/
ls shares-refreshed/
# party1.json party2.json party3.json
The output is a new set of share files. Verify the public key didn’t change:
jq -r '.public_key' shares/party1.json
jq -r '.public_key' shares-refreshed/party1.json
# Both should be identical.
Why this matters
Without refresh:
- A slow-compromising adversary who collects T shares over time eventually forges signatures.
- Compromise of one share per year → key compromised after T years.
With refresh on a quarterly cadence:
- The adversary must compromise T shares within a single quarter (3 months).
- Compromise across quarters yields nothing — old shares don’t combine with new ones.
Ceremony
In production, refresh is a multi-party ceremony:
- Each party generates a random polynomial
f_i(x)of degreeT-1wheref_i(0) = 0. - Each party privately sends
f_i(j)to partyj. - Each party computes their new share:
x_j' = x_j + Σ_i f_i(j). - The sum of new shares equals the sum of old shares (since
Σ f_i(0) = 0), so the public key doesn’t change.
The CLI implements this in-process for testing. Production deployments use confium-coordinator to orchestrate.
Cadence recommendations
| Use case | Refresh cadence |
|---|---|
| Internal CA root | Quarterly |
| Production signing key | Monthly |
| High-value custody | Weekly |
| Development / test | Never (overhead > benefit) |