数字签名的基本流程:将文件通过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)
时间: 2024-11-08 13:34:22