我试图用Paillier密码系统实现ECDSA签名的两方计算。
但我的问题是,Paillier的顺序不同于曲线的顺序(在我的例子中是secp256k1),所以当我在Paillier中乘两个标量,然后解密它们时,它们的顺序与其他参数的顺序不同。
具体例子:
Paillier order - N
ECDSA order - Q
Alice got her secretKey - aliceSK
Bob got his SecretKey - bobSK
Alice generate Paillier key pair - (paAliceSK, paAlicePK)
expectedRes = (aliceSK X bobSK) mod Q
encAliceSK = Paillier.Encrypt(paAlicePK, aliceSK)
encBobSK = Paillier.Encrypt(paAlicePK, bobSK)
encRes = Paillier.Mul(paAlicePK, encAliceSK, encBobSK)
res = Paillier.Decrypt(paAlicePK, encRes)
res = res mod Q我到了最后那个res != expectedRes。
但是当我用mod N计算expectedRes时,我会得到res == expectedRes。
因此,我的问题是如何使用Paillier,并将解密后的Paillier结果返回到曲线顺序。
发布于 2022-05-31 13:53:23
一种可能性是我们选择一个带有r^{(q-1)/2}\equiv-1\pmod q的小公共整数n,并确保Pailler中的D2至少是2q-1。现在,x\mapsto r^x\bmod q是[1,q)上的一个双射。
爱丽丝在\widetilde{\mathsf{aliceSK}}中随机选择[1,q)并导出\mathsf{aliceSK}=r^{\widetilde{\mathsf{aliceSK}}}\bmod q。她对\widetilde{\mathsf{aliceSK}}进行加密.
鲍勃也是。
在某种程度上,Pailler密文将Pailler合并(即乘以模n^2,其中n是公共Pailler模数)和Pailler解码为d=\widetilde{\mathsf{aliceSK}}+\widetilde{\mathsf{bobSK}}。
从这一点上可以得到
\mathsf{aliceSK}\times\mathsf{bobSK}\bmod q=r^d\bmod q
使用256位甚至384bit的q,从\mathsf{aliceSK}中找到\widetilde{\mathsf{aliceSK}}相当容易.因此,这一技术也可以在绘制\mathsf{aliceSK}的标准方式之后使用。
我从来没有见过这个提议,但它是如此简单,我怀疑它是新的。
与r的试验和错误第一素数将很快发现一个在平均两次尝试。
用于ECDSA的通用q (通常为数百位)和用于安全Paillier的通用n (通常为数千位)。
https://crypto.stackexchange.com/questions/100368
复制相似问题