數字簽名的基本流程:將文件經過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)