distributed-lab / distributed-lab/private-multisig
Rotation keys not cleaned up on participant removal.
- Dominant language
- TypeScript
- Stars
- 23
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
### Project version
0.0.0
### What happened?
When participants are removed via [_removeParticipants()](https://github.com/distributed-lab/private-multisig/blob/0a15062edc8c24447b470ca096c779df84937c08/contracts/ZKMultisig.sol#L341-L365), their rotation keys remain in the Cartesian Merkle Tree and the cumulativeRotationKey is not updated to subtract the corresponding rotation key. This allows removed participants to potentially use stale rotation keys in edge cases or causes incorrect encryption key computation for future proposals.
### Minimal reproduction steps
if you Initialize multisig with participants A, B, C\n2. Execute proposal to remove participant A\n3. Observe that A's rotation key remains in CMT and cumulativeRotationKey\n4. On next proposal, encryption key computation uses stale rotation key data.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in contracts/ZKMultisig.sol at _removeParticipants(), especially the linked lines, and trace how the Cartesian Merkle Tree and cumulativeRotationKey are updated during participant removal. Reproduce the A, B, C removal scenario, then verify that A’s rotation key is removed and the cumulativeRotationKey is adjusted so later proposal encryption does not use stale data.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- solidity
- Domain
- blockchain
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 45/100