經典數字簽名演算法—RSA數字簽名演算法

買賣虛擬貨幣
數字簽名一般利用公鑰密碼技術來實現,其中私鑰用來簽名,公鑰用來驗證簽名。比較典型的數字簽名方案有:· 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進行簽名,計算:

並將S附在訊息M後

驗證過程(e,n):

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

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

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

· 實際意義不大:偽造的訊息X具有實際意義的概率很小
· Hash函式可以抵禦這種攻擊

· 使用者不要輕易對其他使用者提供的隨機資料進行簽名
· 更有效的方法:對資料的Hash值簽名

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

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

攻擊者計算:

· 使用者不要輕易對其他使用者提供的隨機資料進行簽名
· 更有效的方法:對資料的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簽名模式。

RSA-PSS數字簽名演算法

金鑰生成

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

假設安全引數為k(n是k位元的數),我們定義兩個整數k0和k1並且滿足:k0+k1≤k-1

簽名演算法

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

驗證演算法

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

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

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;