Skip to content

Conversation

@0xsecaas
Copy link
Contributor

@0xsecaas 0xsecaas commented Nov 13, 2025

related to #18
related to #57


Part 1/4: Document threshold semantics and security assumptions across schemes

Part 2/4: Persist and enforce threshold invariants across key refresh APIs
Part 3/4: Implement scheme-specific hardcoded threshold validation
Part 4/4: Mirror threshold validation and checks in MPC repo

@0xsecaas 0xsecaas changed the title Document threshold policies and security assumptions [1/4] Document threshold policies and security assumptions Nov 13, 2025
Comment on lines +7 to +9
**The tuple `(N, f, t)` chosen at key generation is fixed for all subprotocols**
(keygen → presign/offline → signing → refresh → resharing).
Any deviation **must be rejected** unless explicitly whitelisted by `SchemeRules`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This cannot be accurate. During resharing we might need to change the threshold $t$, and with it $f$.
CC: @SimonRastikian @netrome

On a related note, in which cases $f = t - 1$ is not true?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gilcu3 true (for current implementation).

I should've mentioned in a Planned policy:
once ThresholdPolicy/SchemeRules land ([step 3/4]), the default will be:

(N,f,t) stays fixed unless the SchemeRules entry for that scheme allows otherwise.


The What (Goal):

Make the constraints explicit and impossible to miss.

The How (Approach):

  • Modify APIs so that mismatched thresholds (e.g., refresh with different threshold) are rejected (step 2/4) unless explicitly intended and supported (step 3/4):
    • Introduce scheme-specific hardcoded rules over allowable threshold.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alright, probably in the future PRs then it will make sense. Although also maybe worth asking, do we have a variable for $f$ because at some point that invariant $f = t-1$ might not hold anymore?


| Misconfiguration | Failure Mode |
| ------------------------------------------- | --------------------------------------------------------------------- |
| `f >= N/3` in DKG | Broadcast assumptions break; safety and liveness lost. |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for that type of comparison we should be more precise, as $N/3$ might not be an integer

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @gilcu3 for your input.

Would this be more precise?

+`f >= floor(N / 3)` in DKG 

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, wherever we use fractions and compare them with integers we should be explicit: using floor or ceil

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants