椭圆曲线签名算法
k=rand(N)R=k∗Gr=R.xs=khmac(message)+r.sksign=(r,s)
以上为ECDSA的签名公式,具体解释可以在网上找下相关文章就可以了。
拉格朗日差值算法
已知xn, 求yn
y=a+b∗x2+c∗x3...xi={x0,x1,x2...}yi={y0,y1,y2...}yn=i=0∑yi∗largrange_basis(xn,i,xi)
这部分主要是用在了签名的时候,对于秘钥的求解过程。可能这么说不是很准确,因为秘钥自始至终都没有出现过,应该说是秘钥相关的计算过程中
Schnorr
其中用到了DLogProof其实就是用到了Schnorr的证明算法,并且用的是非交互式的,即不用交换随机数,直接通过hash来做随机数。
Schnorr协议
Schnorr签名算法
其实Schnorr更多被人提到的场景是聚合签名。它可以将多个签名聚合到一起,一次性进行验证,在很多场景下都有不错的表现。
Paillier算法
通过查询资料我们可以得知,Paillier加密算法的主要主要特性和应用是可以进行加法的同态加密计算。因为只能进行加法同态加密,不支持乘法,所以属于半同态加密算法。
Paillier同态加密算法简单解释如下:
对于任意明文消息m,均可通过加密公式 c=E(m) 得到密文c , 同样也有 m=D(c) 对称的解密操作;
对于任意明文 m1 m2, 对应密文 c1 c2 则有
\begin{cases}
c_1 * c_2 = E(m_1 + m_2) \\\
m_1 + m_2 = D(c_1 * c_2) \\\
E(m_1)^{m_2} = E(m_1 * m_2) \\\
m_1 * m_2 = D(E(m_1){m_2})
\end{cases}
可以看到,对于明文的加法,可以直接先对密文进行乘法计算后,再进行解密直接得到结果。
关于Paillier算法的具体细节和公式等,大家可以自行Google查询,帖子很多,因为涉及数学和学术信息较多,我只简单介绍下他的特性,就不在这里复述别人的文章了。
相关资料
同态加密之Paillier算法
长安链关于Paillier算法的介绍(更清晰简明)
在MPC中的作用
在本系列文章中,Paillier算法主要用在了sign的过程中,在generate中,主要是相互交换秘钥参数等信息,方便后续通信。
Diffie-Hellman 算法
Pk1=Sk1∗GPk2=Sk2∗GK=Pk1∗Sk2=Pk2∗Sk1=Sk1∗Sk2∗G
简单描述就是,A B双方分别生成自己的公私钥对,然后相互交换彼此的公钥,并使用自己的私钥与对方的公钥相乘,这样就得到了同样的一个Key,然后双方就可以使用这个Key来进行对称加密(比如AES),进行信息交换,实现通信加密。
缺点
最主要的缺点就是,公钥交换的时候,可能会遭受中间人攻击。假设有中间人C,在A、B交换公钥的时候,进行拦截和替换,那么后续A/B所有的通信都会被C进行拦截和解密。