-
Notifications
You must be signed in to change notification settings - Fork 51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Monero addresses break forward-secrecy #649
Comments
Here's a refund address sketch, modified from what we talked about earlier: Let the initial transaction that sends funds be Then, to send a refund in The refunder then recalculates a refund sender-receiver contextualized secret and uses that to derive To scan the refund transaction, the sender adds and checks if To provide a refund proof to a third party, one can simply provide the initial sender-receiver secret The original sender does not need to provide any special information in the transaction. They just need to deterministically derive output pubkey rerandomizations. The output pubkey rerandomizations should not be malleable to the SA/L proof. In other words, in order to malleate the output pubkey rerandomizations, knowledge of the opening of the spent onetime address must be required and the SA/L proof resigned, otherwise a mallicious actor could burn refund address funds. This scheme technically allows for sending a refund to the same refundee multiple times on-chain, but it would be trivially distinguishable if this happened, so refunds should ideally only be sent once. This scheme, like subaddresses currently, can be implemented as O(1) in terms of the number of refund addresses created. I think it's okay, but I'll have to think more to determine whether there's a Janus attack vector here. By default, the refunds are not recoverable if the wallet cache is lost since the refundee will forget the |
This would have to work without an initial transaction. Someone swapping from BTC to XMR should be able to specify an XMR output without publishing their view-key. That's why I mentioned tevador's scheme. Any scheme, not explicitly a return scheme, where the recipient can send a one-time 'address' to the sender (no further interaction). |
Anyone who obtains a Monero address can, with a quantum computer, recover the private view key for a Monero address. As Serai is a public network, it serves as a repository of addresses which can broken later.
The solution to this is not to collect addresses but fully-derived outputs, single-use, which we can send to.
The design goals are for this scheme not to exceed the length of an existing address, or be comparable to. Under the current Monero (not CARROT), it would be possible to specify
R, view_tag, Hs(8Ra || i), spend_key, payment_id_xor
and derive the commitment mask, amount encryption to form a complete output. This would be 105 bytes, not 64 however (97 if we ignorepayment_id_xor
). This prevents recovering the view key, and the spend key may be that for a subaddress, offering uniformity there without an inefficient scan process.This doesn't work in practice as the output would be bound to an output index and Serai does not guarantee output position.
cc @jeffro256 for how this could work with CARROT
The text was updated successfully, but these errors were encountered: