-
Notifications
You must be signed in to change notification settings - Fork 219
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
Updated: Bulletproof rewinding proposed for a single range proof #335
Comments
Hi @cathieyun @isislovecruft @hdevalence - do you have any feedback on this proposal please? We would be very grateful to hear your thoughts 🙏 |
This is closely modelled on Grin's solution, but using two private keys: - Interfaces: - create a rewindable ZK proof with up to 23 bytes additional embedded data - extract the value and 23 bytes extra data only - extract the value, blinding factor and 23 bytes extra data - Required: - two rewind nonces, based on two public rewind keys and the value commitment - two blinding nonces, based on the two private rewind keys and the value commitment - Use: - the two rewind nonces are used to extract the value and 23 bytes embedded data - the two rewind nonces and two blinding nonces are used to extract the value, blinding factor and 23 bytes embedded data See related Dalek issue dalek-cryptography#335
Do you have a proof of security for the updated scheme? Given that in the previous scheme I could find a vulnerability within a few minutes, I am a bit skeptical with this update but don't have the time to dig into it. |
Hi there, no proof of security, no yet anyway, just improved as per your previous comments. The question that remains is if Bulletproofs rewinding is fundamentally flawed or if such a scheme as this can be made into a proper solution. |
This is a proposal to add Bulletproofs rewinding functionality to the Bulletproofs crate as a user option. (updates #329)
We use
dalek-cryptography/bulletproofs
in our Mimblewimble implementation project and have a need to do wallet recovery from seed values. The proposal for the Bulletproof rewinding scheme is implemented here, in a fork on main, and demonstrated from a user perspective in this test.Note: This proposal is similar to what has been proposed and implemented for Grin, as discussed here.
Three additional parameters are introduced when creating a proof for a value commitment:
pvt_rewind_key: &Scalar
;pvt_blinding_key: &Scalar
andproof_message: &[u8; 23]
.The 23 bytes worth of proof message can be any message a user wants to embed within the proof. Internally the two private keys, in combination with the value commitment, are converted into two rewind nonces and two blinding nonces:
With the Party and Dealer's algorithm:
a_blinding
is replaced byrewind_nonce_1
s_blinding
is replaced byXOR(rewind_nonce_2, merge_into_word(value, proof_message))
t_1_blinding
is replaced byblinding_nonce_1
t_2_blinding
is replaced byblinding_nonce_2
Usage:
prove_single_with_rewind_key
, instead ofprove_single
, with the three additional parameters to create the proof.pub fn verify_single
still works exactly as it did before.Notes:
v_j
is from a specific collection of value commitmentsV_j
.a_blinding
ands_blinding
nor the same blinding nonce fort_1_blinding
andt_2_blinding
.The text was updated successfully, but these errors were encountered: