原创 胡震恺 等 矩阵元
前言
隐私计算笔谈系列是矩阵元联合知名密码学学者共同推出的密码学科普系列文章,旨在普及密码学与隐私计算,让密码学触手可及。
ECDSA两方签名(二)
上次科普我们介绍了ECDSA的两方签名和验证流程,并没有对流程进行正确性分析。本次科普我们将对签名和验证流程的安全性进行详细分析。首先回顾一下ECDSA两方签名的签名和验证主要流程:
双方签名及验证
正确性验证:
能注意到,当Bob在两次乘法中都诚实地输入时,根据我们推导出的式-5和式-9有。而Alice用β1加密了𝛼,将发送给了Bob。Bob又持有和𝑅的,因此Bob可以自己计算,再计算,即可获得,当Bob计算出𝛼后也就能计算出β2,进而对进行解密,获得Alice的签名sigA。
Bob是诚实参与者
我们接着忽略𝛼进行验证,如果不考虑𝛼,那么:
也就是说:
如果Bob是个诚实参与者,那么他在两次FMul双方乘法中应该输入,但是Bob不一定诚实。因此不失一般性的假设Bob分别输入了,则在进行验证时有:
那么要通过验证,Bob就需要计算,而Bob是不知道kA的,因此验证会不通过。可以看到如果Bob进行不诚实地输入,那么第二次两方乘法FMul的验证会不通过,而对第一次两方乘法FMul的验证则会有安全问题,假设Bob输入的是,那么会有:
可以看到kB⋅𝑥⋅𝐺中的每一项Bob都是知道的,因此第一次乘法Alice的输入需要额外附加一个𝛼,这样Bob如果进行不诚实地输入,那么会验证时会获得:
因为𝛼对Bob来说是未知的,𝑥对Alice来说是未知的,因此两者间任意一人都无法获取关于kA和kB的信息。而若Bob诚实地进行输入,那么有:
Alice可以根据kA,𝐺,𝛼计算出的值,即当Bob诚实输入时,β1=。因此当Alice用β1对𝛼进行加密时,Bob就只有诚实输入时才能解密出𝛼,解密出𝛼后才能进行第二次乘法的验证。若Bob还是不诚实地输入,那么:
𝐵𝑥⋅𝛼⋅𝑅这一项对Bob来说是未知的,Bob就无法计算出β1,因此无法β1解密𝛼,不知道𝛼也就无法通过第二次乘法验证。这就要求Bob必须诚实地进行输入。因为验证者是Bob,如果Alice不诚实地进行输入,容易检验Bob也无法验证通过。
Bob是非诚实参与者
Rosetta GitHub:
https://github.com/LatticeX-Foundation/Rosetta
本文转载自https://mp.weixin.qq.com/s/rAK_a2od3NnApk4qg9bDxQ