密碼學 – 數字簽名的用處
今天做了一個思考題,加深了對數字簽名的理解,問題如下:
電子投票的應用十分廣泛,假設投票者以電子文檔形式把選票發給選舉機構(Election Authority, EA)
(1)每位投票者填寫選票,並用 EA 的公鑰加密選票;
(2)EA 把所有選票解密並統計,然後宣布選舉結果。
試分析上述協議的問題?並設計出安全的投票協議。
解答:
存在的問題:
由於 EA 的公鑰是公開的,也就是說不能確定投票者的身份,所以可能存在有人惡意刷票的風險,EA 也檢測不出來。
解決方案:
① 投票者先對電子文檔消息 m 做 Hash 得到消息摘要 s,然後用自己的私鑰 a 加密 s;
② 投票者採用對稱密碼演算法加密電子文檔的消息得到,並用 EA 的公鑰 b 加密該對稱密鑰 key;
③ 投票者將加密後的消息、加密後的消息摘要以及加密後的對稱密碼發給 EA;
④ EA 收到投票者發來的資訊後,先使用自己的私鑰解密出對稱密鑰 key,
⑤ 然後用 key 解密出消息 m’ ,然後對 m’ 做 Hash 得到 s’ ,
⑥ 接著用該投票者的公鑰解密收到的被加密的消息摘要,得到 s;
⑦ 比較 s’ 和 s 是否相等,若相等,則證明消息未被篡改,否則被篡改了。
原理圖:
總結:
以上的方案不僅能夠確認投票者的真實身份(因為只有自己才有自己的私鑰),還實現了消息的加密。