For a wallet with one output to spend and an adversary who:
- Knows the wallet's view key
- Is allowed to decide the outputs of a transaction
The adversary may choose outputs whose commitments' masks sum to the spent output's commitment's mask. Due to Monero's balance proof not being zero-knowledge, this will force the pseudo-out to have a re-randomization of 0, which will cause CLSAG's D to equal the identity, which will be rejected by the protocol.
The simplest solution is simply to sample ephemeral randomness as necessary, deriving a distinct set of outputs, for which a collision is negligible. The chance of this occurring with normal operation is absurd and can be dismissed as irrelevant. This is reachable when handed already-derived outputs however.
The best fix would be to use a properly zero-knowledge balance proof, but this doesn't actually improve amount privacy as knowing the outputs (and fee) and all but one input still allows learning the remaining input's amount.
For a wallet with one output to spend and an adversary who:
The adversary may choose outputs whose commitments' masks sum to the spent output's commitment's mask. Due to Monero's balance proof not being zero-knowledge, this will force the pseudo-out to have a re-randomization of 0, which will cause CLSAG's D to equal the identity, which will be rejected by the protocol.
The simplest solution is simply to sample ephemeral randomness as necessary, deriving a distinct set of outputs, for which a collision is negligible. The chance of this occurring with normal operation is absurd and can be dismissed as irrelevant. This is reachable when handed already-derived outputs however.
The best fix would be to use a properly zero-knowledge balance proof, but this doesn't actually improve amount privacy as knowing the outputs (and fee) and all but one input still allows learning the remaining input's amount.