摘要: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 ) )