天天看點

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

數字簽名一般利用公鑰密碼技術來實作,其中私鑰用來簽名,公鑰用來驗證簽名。比較典型的數字簽名方案有:

· RSA簽名算法(R. L. Rivest, A. Shamir, and L. M. Adleman, 1978)

· ElGamal 簽名算法(T. ElGamal, 1985)

· Schnorr簽名算法(C. P. Schnorr, 1989)

· DSS簽名算法(NIST, 1991)

基于RSA公鑰體制的簽名方案通常稱為RSA數字簽名方案。RSA簽名體制的基本算法如下:

密鑰的生成(與加密系統一樣):

公鑰Pk={e,n};私鑰Sk={d}

簽名過程(d,n):

使用者A對消息M∈Zn進行簽名,計算:

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

并将S附在消息M後

驗證過程(e,n):

給定(M,S),Ver(M,S)為真,則H(M)=Se(mod n)成立

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

假設RSA直接對消息進行簽名

一般攻擊:攻擊者任選一個資料Y,用A的公鑰計算 X=Yemodn,于是便可以用Y僞造A對消息X的簽名,因為:

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

· 實際意義不大:僞造的消息X具有實際意義的機率很小

· Hash函數可以抵禦這種攻擊

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

· 使用者不要輕易對其他使用者提供的随機資料進行簽名

· 更有效的方法:對資料的Hash值簽名

利用簽名獲得明文:攻擊者截獲密文C=Memod n,選擇随機數r,并計算:

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

然後攻擊者設法讓發送者對y簽名,獲得:

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

攻擊者計算:

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

· 使用者不要輕易對其他使用者提供的随機資料進行簽名

· 更有效的方法:對資料的Hash值簽名

H(M)的另一個作用一加快簽名速度

· 對整個消息簽名,由于公鑰體制速度比較慢,當消息比較長時,簽名與驗證過程都會相當慢

· 對消息的Hash值簽名,則無論消息多長,簽名都隻與Hash值的長度有關

RSA算法比較慢,用私鑰進行簽名和公鑰進行驗證。因上述RSA簽名算法沒有加入随機數,當出現重複性的原始資料,攻擊者會通過相同簽名資訊而猜測出原文。應該怎麼辦呢?

· PSS (Probabilistic Signature Scheme)私鑰簽名流程的一種填充模式。

· 目前主流的RSA簽名包括RSA-PSS和RSA-PKCS#1 V1.5。

· 後者相對應PKCS (Public Key Cryptography Standards)是一種能夠自我恢複簽名,而PSS無法從簽名中恢複原來的簽名。

· OpenSSL-1.1.x以後預設使用更安全的PSS的RSA簽名模式。

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

RSA-PSS數字簽名算法

密鑰生成

生成一個模數n,一個公鑰e和一個私鑰d。

假設安全參數為k(n是k比特的數),我們定義兩個整數k0和k1并且滿足:k0+k1≤k-1

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

簽名算法

為了對一個消息m進行簽名,簽名者執行以下步驟:

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

驗證算法

為了對一個消息m進行的簽名s進行驗證,驗證者執行以下步驟:

sa數字簽名算法c語言,經典數字簽名算法:SA數字簽名算法介紹

今天的課程就到這裡啦,下一堂課我們将介紹經典的數字簽名算法—ElGamal數字簽名算法,帶大家繼續了解數字簽名,敬請期待!