-
Notifications
You must be signed in to change notification settings - Fork 0
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
First draft about the audit proofs #42
Comments
This is not that hard, you just need enough storage and a little program to build a table of onetime addresses mapped to a list of the key images from txs where those onetime addresses were referenced as ring members. Then when validating an UnspentProof you just consult that table. (a little more work would be necessary if you want to do UnspentProofs for a certain range of blocks on-chain) |
Yeah, the execution of UnspentProofs is not that expensive. The problem I see is building this table. How the verifier can build it quickly? The only solution I see is scanning the whole blockchain from the moment that the output was created. Certainly he can't believe that the prover will provide all the information about all the rings that it appeared. |
Maybe the verifier can't build it quickly, and that's just the price of using UnspentProofs. |
Ok. I believe it is worth to implement it. But in the verification side would be good to let a message saying that it may take some time to verify :p |
This is not sufficient. Grootle proofs only prove membership (and anyone can make a membership proof), they say nothing about whether you own the enotes that were spent. You need to re-create seraphis composition proofs on all the inputs, then check that they verify using the same key images as those from the tx.
You can just publish the enote ephemeral privkey
The Diffie-Hellman stuff is all X25519, so I don't know if you can actually make signatures easily. There is definitely not an extensive X25519 library ready to go for that. One thing you could do is make a modified seraphis composition proof for the enote. First add an offset If you can make a composition proof then the verifier can assume you also know the amount commitment opening, so there is no need to prove anything about that. EDIT: but you probably want to include the amount and commitment blinding factor so the verifier can learn the enote amount and check the amount commitment. P.S. It might be better to rename this to SpEnoteOwnershipProofV1.
In this case there is no need to make enote images. Just make composition proofs directly on the enotes whose key images you want to expose. The amount commitment blinding factors and amounts can be pasted in the proof explicitly - the verifier recomputes the amount commitments and checks they match with the actual enotes. |
Hello Koe, SpendProof: OutProof: InProof: ReserveProofs: UnspentProofs: I will think a bit more about the Inproofs and how to integrate it with the Reserve and Unspent proofs. Thank you for reviewing this first draft! |
The values
I strongly discourage this, implementing crypto primitives is a dangerous activity especially if you have limited experience.
Ok, I agree with your approach. Given nominal key image
In general I recommend avoiding custom signature schemes where possible. Right now it looks like all you really need for the audit framework is a new Schnorr scheme that will take a user-defined generator/base key. Missing that, you could even abuse |
Cool. Thanks for the answers. I believe we have a minimum consensus about the theoretical framework. I will move to implementing it now. I agree that implementing new crypto should be avoided. I will use your recommendation for the Inproofs but could you tell me exactly the problem with X25519? Btw, I just saw that bulletproofs_plus2.cpp is still using addKeys2, which we know that is wrong for some cases that should never be there but anyway I think it is better to use addKeys. Could you change it later? About the UnspentProofs, yeah, that's the idea. But I believe I can make a big Schnorr like I wrote. I will look your answer again when I'm implementing it. |
"There is definitely not an extensive X25519 library ready to go for that."
There is nothing wrong with
Sure you can do it, but don't do it unless you need to (you don't in this case). |
Here's a summary of updated proofs. I note the minimum pieces required for a proof, although additional context/tracking information might be required (i.e. to help verifiers identify what enote or tx the proof is about). These assume some jamtis updates are implemented.
|
These proofs have been implemented in the |
Hello,
I would like to make some comments about the audit framework currently and ask for a first review for the one in Seraphis.
Legacy:
I took a deeper look at the issue about the InProofs and I totally agree with your answer. InProofs are working fine as they need to validate the amount in order to create a valid InProof. Also, like the OutProof issue, I don't see any reason for the sender and receiver to collaborate and create a proof that does not correspond to the alleged address. It may be possible but it only proves that the owner received some amount (as he knows the private key of the stealth-address). So I don't see any reason for change it now. Also I didn't find any real case complaints.
I like your ideas about UnspentProof and SubAddressProof to create an audit framework that you designed for the legacy. Maybe in the future we will have a functionality on the wallet where we specify a period of time and the wallet outputs all the proofs for the incoming and outcoming transactions for an external auditor. My concern here is about the amount of time to validate an UnspentProof like you propose. From the prover side he has to provide all the rings that a stealth-address participated (which could be trivial if your wallet keeps track of that) but from the verifier side he cannot take the word of the prover and verify only in the rings that the prover sent. He would have to scan the whole blockchain and get all the transactions that the specific output (stealth-address) appeared. It looks a bit unfeasibly to me. Am I missing something? Also with Seraphis and more stealth-addresses appearing in ring signatures it seems a bit risky to rely on a proof like that.
Regarding Seraphis:
I believe it is pretty straight forward to create the SpendProof, InProof and OutProof with the same notion that we have today. Please have a look on the first draft and let me know if I am missing something.
I am still working on the ReserveProof (also please have a look at the proof in the draft). Maybe there is a way to not leak to the linking_tag and still provide some type of UnspentProof. I don't know yet how.
I may have stated wrong phrases (it might be interesting to discuss the last comments in the ReserveProofs) so I will continue working in the audit proofs but any comment is very welcome to improve this first draft already. If everything seems to be fine, I will move to implementing it.
Thank you!
draft_sp.pdf
The text was updated successfully, but these errors were encountered: