Mac

可以從人工輸入中生成零知識證明(或 MAC)嗎?

  • April 23, 2014

編輯:我的目標是創建一個不需要在客戶端部署大量加密基礎設施的投票方案。智能卡和令牌對於這些目的是不切實際的。我設想使用者在網路瀏覽器中輸入“程式碼”(這是不完美的)並送出輸入。程式碼要麼是靜態的,要麼是可以用環氧樹脂覆蓋並嵌入卡中的最小電路。

理想情況下,此程式碼可以以與原始選民不可連結的方式表現出來。我希望這些匿名選票可以公開訪問以進行驗證。

如果我能以某種方式將人類可鍵入的程式碼“轉換”為 Microsoft 的 UProve,那麼我的所有要求都會得到解決。

是否有可能創建一個人類可以相對輕鬆地鍵入的 ZKP(或類似的MAC 方案)?那個加密系統會是什麼樣子?

如果我要圍繞人類可以輕鬆輸入的內容設計一個加密系統,比如 26 個大寫 ASCII 字母16 個混合大小寫字母,我相信這會給我帶來 2^92 位的安全性。

  • 我應該如何將這個設計細節轉化為可以用於 ZKP 的東西?

例如,取一個 n 位的 ECC 密鑰,並簡單地用我的密鑰對數據進行簽名。或者在 UProve 或 PGP 等類似標準中使用該加密材料。

對長隨機位串進行編碼以便人類可以輕鬆記憶和/或輸入的常用方法是將它們分成(通常)10 到 12 位的塊,並將每個塊映射到固定的常用字典中的條目字。這種方法通常用於安全密碼生成,例如DicewareS/KEYPGP

假設一個 11 位(即 2048 字)字典,它似乎接近英語的“最佳位置”(就每位記憶的難度而言),您可以使用共享密鑰計算目前時間的 MAC ,將其截斷為 88 位,並將其映射為八個字的序列供使用者輸入。

**附言。**列表中包含的單詞的最佳選擇在一定程度上取決於案例,尤其是您設想的輸入方法。對於打字輸入,簡短很重要,而對於口語輸入,您需要更長的單詞和易於辨識的聲音。對於輸入密碼片語的生成,我個人發現一個很好的起點是任何基本英語詞典中恰好有 4 個字母的單詞集(根據字典的大小,它應該給你大約 2000 到 3000 個單詞),可選過濾以刪除任何不恰當、晦澀或容易混淆的相似詞。

**編輯:在發布此答案之前,我沒有看到您的說明。老實說,我不確定我描述的方法是否會幫助您完成“創建不需要大量加密基礎設施的投票方案”的任務,但是,我也不確定會怎樣。在上面的答案中,我隱含地假設儲存密鑰和計算 MAC 將由電腦完成,只有 MAC 輸入階段是手動完成的。如果您也希望由人工完成 MAC 計算,這將成為一個非常不同(並且難度更大)的挑戰

我的目標是創建一個不需要大量加密基礎設施的投票方案……我希望這些匿名選票可以公開訪問以進行驗證。

在我看來,您想要一個 端到端的選民可驗証投票系統。其中一些確實需要大量的加密基礎設施,但聽起來其他幾個已經滿足您的所有目標。特別是,ThreeBallot 系統似乎可以滿足您的所有目標。

Ron Rivest將ThreeBallot 投票協議設計為匿名且可驗證的。

  • 選票正常生成,除了選票底部的唯一隨機數外,所有選票都相同(版本 4 UUID 足以滿足該數字)。
  • 投票站給每個選民正好 3 張空白選票(而不是傳統的 1 張空白選票)。每個候選人都列在單獨的行上。

在此處輸入圖像描述

  • 維克通過填充氣泡進行投票。維克通過在該行上恰好填滿 2 個氣泡來投票給候選人。維克通過在該行上準確填寫 1 個氣泡來投票反對候選人。
  • “檢查器機器”查看所有氣泡並強制執行各種特定於選舉的約束(一些選舉允許選民投票給幾個候選人;其他選舉要求選民最多投票給一個候選人而反對其他所有人)。Victor 只向檢查機顯示氣泡(不是隨機數);檢查機不應該做任何記錄。如果 3 張選票有效,則檢查機將所有 3 張選票標記為綠色條紋。然後 Vic 在檢查機上按“1”、“2”或“3”,它會製作 3 張選票中的一張(黑白)副本作為帶回家的收據。維克多檢查副本的填寫是否與所選選票相同。
  • 投票站工作人員確保所有帶有綠色條紋的選票都投入投票箱。
  • 選舉結束時,將掃描整套選票並在公告板上公佈。
  • 維克查看了帶回家收據上的隨機數,並驗證它與已發布的選票填充的氣泡相同,並且具有相同的隨機數。如果沒有,維克會將收據作為選舉舞弊的證據交給他最喜歡的記者。

如您所見,ThreeBallot 協議從不使用“零知識證明”或“可以由人類輸入的具有 92 位熵的片語”,所以要麼我誤解了你的問題,要麼我們有另一種情況Stackexchange 上常見的 XY 問題

引用自:https://crypto.stackexchange.com/questions/12226