通過RSA實現數字簽名
阿新 • • 發佈:2018-12-11
一 用RSA生成簽名
在RSA中,被簽名的訊息、金鑰以及最終生成的簽名都是以數字形式表示的。在對文字進行簽名時,需要事先對文字編碼成數字。用RSA生成簽名的過程可用下列公式來表述:
這裡所使用的D和N就是簽名者的私鑰。簽名就是對訊息的D次方求mod N的結果,也就是說將訊息和自己相乘D次,然後再除以N求餘數,最後求得的餘數就是簽名。
生成簽名後,傳送者就可以將訊息和簽名傳送給接收者了。
二 用RSA驗證簽名
RSA的簽名驗證過程可用下列公式來表述:
這裡所使用的E和N就是簽名者的公鑰。接收者計算簽名的E次方並求mod N,得到“由簽名求得的訊息”,並將其與傳送過來的“訊息”內容進行對比,如果兩者一致,則簽名驗證成功,否則簽名驗證失敗。
RSA的簽名生成和驗證過程見下表:
三 實戰
我們通過具體的數字,用RSA來實際生成和驗證簽名。
公鑰:E=5;N=323
私鑰:D=29;N=323
由於N為323,因此訊息需要為0~322這個範圍內的整數。在這裡假設我們需要對123這個訊息進行簽名。
1 生成簽名
下面用私鑰(D,N)=(29,323)來生成訊息123的簽名。
訊息的D次方 mod N= 123的29次方 mod 323 =157
簽名是157.向接收者傳送的內容為:
(訊息,簽名)=(123,157)這兩個數字。
2 驗證簽名
接收者收到的內容為:
(訊息,簽名)=(123,157)
用公鑰(E,N)=(5,323)來計算由簽名求得的訊息。
簽名的E次方 mod N = 157的5次方 mod 323=123
我們得到的訊息123與傳送者直接發過來的訊息123是一致的,因此簽名驗證成功。