MPC之TSS-LIB源码分析2 -- 源码中的算法
椭圆曲线签名算法
以上为ECDSA的签名公式,具体解释可以在网上找下相关文章就可以了。
拉格朗日差值算法
已知, 求
这部分主要是用在了签名的时候,对于秘钥的求解过程。可能这么说不是很准确,因为秘钥自始至终都没有出现过,应该说是秘钥相关的计算过程中
Schnorr
其中用到了DLogProof其实就是用到了Schnorr的证明算法,并且用的是非交互式的,即不用交换随机数,直接通过hash来做随机数。
其实Schnorr更多被人提到的场景是聚合签名。它可以将多个签名聚合到一起,一次性进行验证,在很多场景下都有不错的表现。
Paillier算法
通过查询资料我们可以得知,Paillier
加密算法的主要主要特性和应用是可以进行加法的同态加密计算。因为只能进行加法同态加密,不支持乘法,所以属于半同态加密算法。
Paillier
同态加密算法简单解释如下:
对于任意明文消息m
,均可通过加密公式 得到密文c
, 同样也有 对称的解密操作;
对于任意明文 m1
m2
, 对应密文 c1
c2
则有
可以看到,对于明文的加法,可以直接先对密文进行乘法计算后,再进行解密直接得到结果。
关于Paillier
算法的具体细节和公式等,大家可以自行Google查询,帖子很多,因为涉及数学和学术信息较多,我只简单介绍下他的特性,就不在这里复述别人的文章了。
相关资料
在MPC中的作用
在本系列文章中,Paillier
算法主要用在了sign
的过程中,在generate
中,主要是相互交换秘钥参数等信息,方便后续通信。
Diffie-Hellman 算法
简单描述就是,A B双方分别生成自己的公私钥对,然后相互交换彼此的公钥,并使用自己的私钥与对方的公钥相乘,这样就得到了同样的一个Key
,然后双方就可以使用这个Key来进行对称加密(比如AES),进行信息交换,实现通信加密。
缺点
最主要的缺点就是,公钥交换的时候,可能会遭受中间人攻击。假设有中间人C,在A、B交换公钥的时候,进行拦截和替换,那么后续A/B所有的通信都会被C进行拦截和解密。