RSA數位簽章的簡單流程

摘要:RSA數位簽章的簡單流程

如果我有一些資料想和你分享,但又怕有別人仿冒我、送假的資料給你,那數位簽章就是一個解決方法。

 

首先,我會有一對RSA 金鑰,一公一私。他們之間的關係很有趣。

私鑰加密後的內容只能由公鑰解密。反之,公鑰加密的內容只能由私鑰解密。 (提醒:妥善保管你的私鑰!)

 

之後,我會將公鑰給你(或是其他認識我的任何人)。  (當然,如果在這邊,公鑰就被第三方偽造了;等於你拿到第三方的公鑰,以後就會把那個人認成我,那我也沒轍XD)

 

現在,我有一份[資料]要給你了。

我會先將[資料]雜湊成一段[雜湊值](當然不可能反推),然後用私鑰將這段[雜湊值]加密,就得到了[簽章]。

然後將[簽章]和[資料]一起傳給你。

 

你收到[簽章]和[資料]後,要先驗證[資料]是不是我送出的。

很簡單:你用跟我一樣的雜湊方法將收到的[資料]雜湊成一段[雜湊值2]。

然後用我在之前給你的公鑰,把[簽章]解密成[雜湊值]。

然後比對[雜湊值2] == [雜湊值],就可以確認資料是不是真的是我發出的。

 

寫在這裡,當然至少來一些偽碼來描述邏輯。

公鑰 = keyPublic,  私鑰 = keyPrivate, 

加密 =  key.encrypt( ) ,  解密 = key.decrypt( )

雜湊 = hash( ), 

資料 = data, 簽章訊息 = signature

 

1. 分享公鑰與雜湊方式 (應該要在能信任的階段)


giveYou( keyPublic, hash )

2. 發送資料


signature = keyPrivate.encrypt( hash(data) )
giveYou( data, signature )

3. 驗證簽章


IknowYou = (  hash(data)  ==  keyPublic.decrypt( signature )  )