為什麼需要選舉結果複查?如何達到不記名?什麼是MD5?

更新日期:2004/5/24

瀏覽人次:

相關參考資料:
網路選舉教學
網路選舉結果複查教學
  

  MD5 ( Message-Digest algorithm 5)雜湊演算法,是電腦常用的一種加密演算法,簡而言之,使用者可將任意長度的資料,以MD5雜湊演算法運算,得到一組固定長度為128位元的結果,採用該方法以作為確認碼運算法則之原因如下──

  • 雖然不同的資料經由MD5雜湊演算法計算所得到的結果有可能相同,但是根據統計顯示,重覆的機率低於百萬分之一
  • MD5為一個單向雜湊演算法,亦即不易以逆向運算得到原始資料,例如:要計算字串vote123的MD5結果很簡單,但是要將MD5計算後的結果逆向運算得到vote123卻相當困難。

    【EX.】 計算 X = MD5("vote1234") = 8339e38c61175dbd07846ad70dc226b2 非常簡單
          知道 X 逆向運算得到 vote1234卻非常困難

利用上述特性,在選舉人投票時候,輸入一組自行設定選舉結果確認碼,配合系統所發給的選舉複查密碼,做以下的計算:

   確認碼 = MD5(MD5(選舉複查密碼+選舉結果確認碼)+系統密碼+選舉編號))

其中──
系統密碼為系統所設定的密碼,基於安全理由並不公開;選舉編號則為在資料庫裡用來識別該次選舉的唯一編號;資料經過兩次無法逆向運算的單向雜湊函數加密後得出一組確認碼,再將這個確認碼與選舉人所票選的被選舉人教職員編號等相關資料一起存入資料庫記票表單裡,資料庫表單格式如下:

欄位名稱 no vote_no user_id vote_state check_code time
說明 唯一
編號
選舉編號 被選舉人
教職員編號
有效票
無效票
確認碼 投票時間
資料範例 1 1 1999001 ok(有效) 50334d4b5268364bf7c78638f0cdaef2 2004-05-24 01:53:12
  2 1 1999002 not(無效) 7264da194b46e1b63ac4851392f69a32 2004-05-24 02:27:12

  由資料表之各項欄位中可以看出,系統完全沒有紀錄選舉人任何可供辨識之資訊。也由於MD5雜湊演算法的特性,單單擁有確認碼想要得知某一張選票是由哪位選舉人所投下,是相當困難之事,藉以達成不記名投票之原則。

  另外,為確保網路投票符合民主選舉原則,利用MD5雜湊演算法計算確認碼方式,取代原本紙本選舉驗票之人工作業流程,讓使用者有機會驗證自己所投之選票是否被正確的計算在最後的選舉結果中。當選舉人對於選舉結果有所疑慮時,可經由系統所提供的選舉結果複查網頁,驗證自己所投之選票資訊。


  複查程序開始時,系統會要求選舉人輸入選舉複查密碼及選舉結果確認碼,並執行以下兩個步驟:

  Step 1. 計算確認碼:

    確認碼 = MD5(MD5(選舉複查密碼+選舉結果確認碼)+系統密碼+選舉編號))

    其中選舉複查密碼選舉結果確認碼為選舉人輸入的資料,其他參數與上述說明相同。

  Step 2. 以計算出來的確認碼在資料庫中進行比對,並將找到的結果顯示給選舉人驗證。

 

 

這裡提供一個計算MD5雜湊函數的機制,您可以嘗試計算看看,使您更瞭解MD5的特性。


輸入:

結果: