It's an interesting idea for a protocol. If I get it right, your basic idea 
here is to kind of "shoehorn" in a 2FA authentication, and that the 
blind-signing server has no other function than to check the 2FA?

This makes it different from most uses of blind signing, where *counting* the 
number of signatures matters (hence 'one more forgery etc). Here, you are just 
saying "I'll sign whatever the heck you like, as long as you're authorized with 
this 2FA procedure".

Going to ignore the details of practically what that means - though I'm sure 
that's where most of the discussion would end up - but just looking at your 
protocol in the gist:

It seems you're not checking K values against attacks, so for example this 
would allow someone to extract the server's key from one signing:

1 Alice, after receiving K2, sets K1 = K1' - K2, where the secret key of K1' is 
k1'.
2 Chooses b as normal, sends e' as normal.
3 Receiving s2, calculate s = s1 + s2 as normal.

So since s = k + ex = (k' + bx) + ex = k' + e'x, and you know s, k' and e', you 
can derive x. Then x2 = x - x1.

(Gist I'm referring to: 
https://gist.github.com/moonsettler/05f5948291ba8dba63a3985b786233bb)




Sent with Proton Mail secure email.

------- Original Message -------
On Wednesday, July 26th, 2023 at 03:44, moonsettler via bitcoin-dev 
<bitcoin-dev@lists.linuxfoundation.org> wrote:


> Hi All,
> 
> I believe it's fairly simple to solve the blinding (sorry for the bastard 
> notation!):
> 
> Signing:
> 
> X = X1 + X2
> K1 = k1G
> K2 = k2G
> 
> R = K1 + K2 + bX
> e = hash(R||X||m)
> 
> e' = e + b
> s = (k1 + e'*x1) + (k2 + e'*x2)
> s = (k1 + k2 + b(x1 + x2)) + e(x1 + x2)
> 
> sG = (K1 + K2 + bX) + eX
> sG = R + eX
> 
> Verification:
> 
> Rv = sG - eX
> ev = hash(R||X||m)
> e ?= ev
> 
> https://gist.github.com/moonsettler/05f5948291ba8dba63a3985b786233bb
> 
> Been trying to get a review on this for a while, please let me know if I got 
> it wrong!
> 
> BR,
> moonsettler
> 
> 
> ------- Original Message -------
> On Monday, July 24th, 2023 at 5:39 PM, Jonas Nick via bitcoin-dev 
> bitcoin-dev@lists.linuxfoundation.org wrote:
> 
> 
> 
> > > Party 1 never learns the final value of (R,s1+s2) or m.
> > 
> > Actually, it seems like a blinding step is missing. Assume the server 
> > (party 1)
> > received some c during the signature protocol. Can't the server scan the
> > blockchain for signatures, compute corresponding hashes c' = H(R||X||m) as 
> > in
> > signature verification and then check c == c'? If true, then the server has 
> > the
> > preimage for the c received from the client, including m.
> > _______________________________________________
> > bitcoin-dev mailing list
> > bitcoin-dev@lists.linuxfoundation.org
> > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
> 
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists.linuxfoundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev

Reply via email to