Randomness

我可以證明我的應用程序以正確的方式使用隨機性嗎?

  • May 10, 2018

我們正在開發一個採用 Shamir Secret Sharing 算法的 iOS 應用程序。我們做了所有可能的步驟,使用者可以信任我們。我們無法記住它們的秘密,也無法保存編碼片段。但他們仍然可能不相信我們的隨機性。是否有任何密碼方法可以讓使用者驗證我們是否誠實地使用隨機數生成器並且沒有惡意?

您在應用程序中向使用者展示的任何內容都無法證明這些數字是真正隨機生成的,並且這些數字不是惡意或意外洩露的。

一般來說,您可以使您的應用程序(或執行加密的模組,假設它被建構到一個單獨的二進製文件中,如主應用程序使用的庫或執行檔)開源並使用可重現/確定性的建構過程,以便使用者可以自己編譯原始碼並驗證它是否與他們安裝的內容相匹配。不過,我不確定這在 iOS 生態系統中是否可行或方便。(使用者可能需要有根手機才能查看從應用商店安裝的應用二進製文件等)

一個相關的現實範例是Diceware,使用者通過擲骰子並在編號的單詞列表中查找結果來生成強大、統一的隨機密碼。Diceware 的優點恰恰在於它可以被那些對機率論元素了解甚少的人理解和審計。但是當然它並沒有完全消除使用者審計或信任密碼的要求,因為密碼仍然必須輸入到某些軟體中。

因此,您可以做的一件事是為使用者提供輸入受他們控制的隨機輸入的選項,例如擲骰子、密碼或要求他們“隨機”在鍵盤上混搭鍵並測量時間的舊 PGP 技巧. 然後,該程序將對這些輸入應用密鑰派生函式(用系統 RNG 中的值加鹽)以獲得主密鑰或種子,並從中驅動隨機選擇。我認為您需要解決一些挑戰,例如:

  • 使用者體驗。至少可以說,這些對於可用性來說都不是很棒。
  • 取決於問題的細節,是使用基於密碼的密鑰派生函式還是像 HKDF 這樣的快速函式。

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