1. 程式人生 > >通過RSA實現數字簽名

通過RSA實現數字簽名

一 用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是一致的,因此簽名驗證成功。