密碼學 – 數字簽名的用處

今天做了一個思考題,加深了對數字簽名的理解,問題如下:

電子投票的應用十分廣泛,假設投票者以電子文檔形式把選票發給選舉機構(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 是否相等,若相等,則證明消息未被篡改,否則被篡改了。

原理圖:

總結:

以上的方案不僅能夠確認投票者的真實身份(因為只有自己才有自己的私鑰),還實現了消息的加密。