[開源] 電子投票系統檢驗報告
嗨,我是開源社長 RSChiang,這次受選委會邀集,一同協助檢視電子投票
程式運作方式及相關安全性。
自上週選委會將程式碼開源後,開源社、TDOH(學生駭客社群)、SITCON
(學生計算機年會)與開發商協作完成了 21 項程式碼安全性修正與資料效
度更新。
我們也同時閱讀並檢驗了系統運作的原始碼,針對投票之技術細節,
茲說明如下:
基本上選票會經過數個階段的轉換,
(現實世界)
選務人員 A 檢驗身份 --> 選務人員 B 發給授權碼
(電子系統)
輸入授權碼 --> 單向雜湊轉換為索引號 --> 索引號管控投票流程 -->
確認投票時轉換成候選人編號 + 時間戳,即為選票記錄
(1) 記名問題
a. 人 <--> 授權碼:由於檢驗身份的選務人員與發放授權碼的人員並不一
致,所以無從將單獨個人對應至授權碼本身。
b. 授權碼 <--> 索引號:資料庫中用以控管投票流程的索引號 (Key
Index) 是由 SHA1 + Trimmed MD5 + Salt 單向雜湊產生,由於雜湊函式的
定義域有無限種可能,經過轉換(映射)後,在有限的時間內,並無法反推
其授權碼為何。
c. 索引號 <--> 選票記錄:兩者並無關聯。索引號暫時記下的時間戳在投
票完成後會被清除,無法反推。
→ 並無違反無記名原則。
(2) 真實性問題
a. 授權碼:每一筆產生的授權碼,皆為獨佔性(無法多重登入)、不可逆
性(無法回頭修改)且唯一(不重複)。
b. 選票記錄:伺服器端會以版本控制系統 Git,將每一筆選票記錄自動雜
湊歸檔 (commit)。由於修改 commit history 會導致雜湊值不一致,得以
確保選票記錄不會被篡改。
→ 真實性是可以檢驗的。
(3) 常見疑難雜症
a. 開源之後會不會比較容易被駭?
並不盡然。全世界最廣為使用的作業系統 Linux,便是徹頭徹尾的開放原始
碼專案;將程式碼攤開在陽光底下檢視,也才能有更多人協助找到問題並修
正。
(說實在,Windows 不是開放原始碼軟體,也沒比較安全啊XD)
b. 會不會有釣魚假網站?我的選票會不會外流?
此次投票系統係建構於 Amazon 私有雲上,無法外連到任何外部網站。開發
廠商已付費簽署 SSL 安全憑證,若有疑慮,可在投票時認明網址列上的綠
鎖頭。
圖例:http://imgur.com/G9zmqpZ
c. 伺服器的偵錯記錄 (debug log) 會不會有時間戳記?
平板會不會被動手腳?
(這是信任問題,廠商先我解釋了。見 NTU 版 #1JX3HB11 )
d. 要怎麼確定開源版本與線上版本一致?
昨晚的電子投票說明會中,開源社已向廠商建議加設版本號標記。
以 g0v 零時政府網站為例:
http://imgur.com/HSVprcA
e. 我是__院的參選人,這又不是我的本科,難道我不能質疑嗎?
你好,我是開源社長、法律學院法律學系的 RSChiang。
非本科從來不是問題,質疑需要技術力作為後盾,
歡迎加入推廣資訊透明化的開源社!
如果尚對電子投票有疑慮,除了聯繫選委會外,開源社也將在 6/26(四)
舉辦電子投票系統讀碼講座,歡迎與我們一同研究電子投票系統的運作流程
與設計巧思。
---
臺灣大學開源社
http://fb.com/NTUOSC
--
推
05/25 23:06,
05/25 23:06
推
05/25 23:09,
05/25 23:09
推
05/25 23:23,
05/25 23:23
→
05/25 23:33,
05/25 23:33
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.4.194
※ 文章網址: http://www.ptt.cc/bbs/NTU/M.1401179135.A.183.html
推
05/27 16:32, , 1F
05/27 16:32, 1F
推
05/27 16:44, , 2F
05/27 16:44, 2F
推
05/27 16:45, , 3F
05/27 16:45, 3F
推
05/27 16:45, , 4F
05/27 16:45, 4F
→
05/27 16:46, , 5F
05/27 16:46, 5F
那不是重點啦。XD
或許措辭不夠精準,應該反面來說「技術力方能作為質疑的有利後盾」
才能為自己的論點辯護。
※ 編輯: RSChiang (140.112.4.194), 05/27/2014 16:49:44
推
05/27 16:51, , 6F
05/27 16:51, 6F
推
05/27 16:52, , 7F
05/27 16:52, 7F
推
05/27 16:53, , 8F
05/27 16:53, 8F
→
05/27 16:53, , 9F
05/27 16:53, 9F
推
05/27 16:55, , 10F
05/27 16:55, 10F
推
05/27 17:08, , 11F
05/27 17:08, 11F
→
05/27 17:13, , 12F
05/27 17:13, 12F
→
05/27 17:14, , 13F
05/27 17:14, 13F
推
05/27 17:27, , 14F
05/27 17:27, 14F
推
05/27 17:46, , 15F
05/27 17:46, 15F
推
05/27 18:07, , 16F
05/27 18:07, 16F
推
05/27 18:09, , 17F
05/27 18:09, 17F
推
05/27 18:10, , 18F
05/27 18:10, 18F
推
05/27 18:18, , 19F
05/27 18:18, 19F
推
05/27 18:19, , 20F
05/27 18:19, 20F
推
05/27 18:23, , 21F
05/27 18:23, 21F
推
05/27 18:27, , 22F
05/27 18:27, 22F
→
05/27 18:28, , 23F
05/27 18:28, 23F
推
05/27 18:52, , 24F
05/27 18:52, 24F
→
05/27 20:05, , 25F
05/27 20:05, 25F
→
05/27 20:05, , 26F
05/27 20:05, 26F
→
05/27 20:07, , 27F
05/27 20:07, 27F
→
05/27 20:08, , 28F
05/27 20:08, 28F
推
05/27 20:32, , 29F
05/27 20:32, 29F
推
05/27 21:36, , 30F
05/27 21:36, 30F
→
05/27 21:36, , 31F
05/27 21:36, 31F
推
05/27 21:48, , 32F
05/27 21:48, 32F
推
05/27 22:23, , 33F
05/27 22:23, 33F
推
05/28 00:02, , 34F
05/28 00:02, 34F
推
05/28 00:15, , 35F
05/28 00:15, 35F
推
05/28 00:47, , 36F
05/28 00:47, 36F
推
05/28 03:25, , 37F
05/28 03:25, 37F
推
05/29 22:41, , 38F
05/29 22:41, 38F