公钥密码与数字签名

数字签名的基本流程:将文件通过Hash函数,生成摘要,对摘要签名,得到被签名的摘要+文件。

RSA签名方案:

初始化过程:配制一对RSA钥匙,公钥(n,e),私钥(n,d)

签名过程:S=Sigk(m)=(h(M))d (mod n)

(M是文件,h是单向散列函数,S是文件M的签名)

传输过程:M||S(文件M和签名一同传送)

验证过程:当SeΞh(M) (mod n)则验证成功,否则验证失败。

EIG签名方案:

初始化过程:选择大素数p和g<p(g是p的素根),选一整数x<p,(g,p,x)是私钥,

      计算y=gx(mod p),(g,p,y)作为公钥

签名过程:选择随机数k,满足0<k<p-1,(k,p-1)=1

     计算h(M),r=gk(mod p)

           s=(h(M)-xr)k-1mod(p-1)

传输过程:将(r||s)作为签名,将M||r||s 传送

验证过程:先计算h(M),yrrsΞgh(M)(mod p)则验证成功


如果一个文件需要两个人签名才能生效,怎么设计算法?

把RSA改成两方参与的算法:

1.独立选择大素数p和q,计算n=pXq,计算φ(n)=(p-1)(q-1)

2.选整数Ka,Kb,(1<=Ka,Kb<φ(n),φ(n)分别与Ka,Kb互素,在模φ(n)下,KaKb有唯一逆元e,eKaKb=1 mod (φ(n))

3.取公钥(n,e),私钥A(n,Ka),私钥B(n,Kb),销毁p,q

签名C=MKaKb (mod n)   验证M=Ce (mod n)

原文地址:https://www.cnblogs.com/13jhzeng/p/5558490.html