Equivocation is evadable by choosing among a principal's valid identifier encodings
- Dominant language
- Rust
- Stars
- 3
- Forks
- 0
- Avg merge
- 1d 42m
- Merged PRs (30d)
- 11
Description
A principal with active keys under more than one algorithm can have several simultaneously valid byte-encodings of the same genesis root. Equivocation detection requires the principal identifier to match byte-for-byte before it will compare anything else, so two reports about the same principal expressed under different — both legitimate — variants are diagnosed as being about *different principals* and never reach the comparison.
A party controlling which variant each observer receives can therefore hide a genuine equivocation. The reports are honest in isolation; they simply never get compared.
## Why this is distinct from representation asymmetry
A closely related defect is being fixed separately: a signer presenting one logical value in two *representations* — an integer against its decimal string, a digest against that digest wrapped in an array. That is closed by parsing into a canonical typed value before comparing, which makes the two spellings converge.
This one does not converge, because the variants are not different spellings of one value. They are different values, each correctly derived, each a valid identifier for the same principal. Canonicalizing the encoding does not help, because there is no single canonical encoding to reach — the multiplicity is in the principal's own key material, not in how a field was written.
It is also unaffected by whether the identifier is tagged or bare. Tagging labels which variant was chosen; it does not prevent choosing a different one per observer.
## Scope
Principals at Level 3 and above with mixed-algorithm active keys, or an explicit multi-key genesis. Level 1 and 2 principals are single-key by definition, so their genesis root has exactly one variant and they are not affected.
## What resolving this involves
The comparison needs to establish that two reports concern the same principal without requiring their identifiers to be byte-identical — recognising the set of encodings a principal legitimately has, rather than one privileged form. Alternatively, the reports could carry something already invariant across variants, though that is a wire-format question rather than a comparison-logic one.
Worth deciding deliberately rather than by implementation: whichever route is taken becomes part of what the equivocation guarantee means.
Found while verifying an unrelated ruling about identifier typing. Related: #141.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by locating the equivocation comparison logic and how principal identifiers are matched, then trace how mixed-algorithm and multi-key principals are represented. Done means reports for the same principal are compared across its legitimate identifier variants without weakening the distinct representation-asymmetry behavior; the issue does not name specific files or tests.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- authentication, cryptography, security
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100