繁體中文

文字與日常工具·密碼產生器

模偏差解釋:從列表中隨機選擇一個單字而不傾斜

· 工作原理

密碼 隨機性 密碼學

拒絕尾部後產生的偶數集旁的不偶數編號的桶
原始 ToolAcre 向量圖

顯示當範圍不均勻劃分時,為什麼「隨機數模列表長度」比其他單字更青睞某些單字、偏差有多大,以及拒絕取樣如何消除它。

公平的骰子和不公平的捷徑 - 為什麼以 7,776 為模的隨機數與擲骰子不同

公平的來源仍然可以滿足不公平的選擇程序。如果程式讀取一個整數並立即除以列表長度後取餘數,則只要來源範圍無法精確整除該長度,某些索引就會收到更多來源值。缺陷在於縮減步驟,不一定在於位元組。 ToolAcre 在選擇任何 EFF 單字之前會避免使用該捷徑。

僅當完整的結果組均勻映射時,物理骰子才能提供直觀的比較。瀏覽器實作具有不同的原始範圍,因此它計算所請求邊界的接受視窗。本文討論了該機制,而不是聲稱瀏覽器位元組實際上再現了五個骰子。兩者都可以選擇指數,但其程序和審計證據是不同的。

偏差的來源 — 32 位值不會均勻地分割到 7,776 儲存桶中,因此前幾個單字會獲得一次額外的機會

對於一個位元組和 100 界限,原始範圍具有 256 可能值。兩組完整的 100 適合,留下 56 值。減少每個位元組模 100 給出索引 0 到 55 每個三個原像,而索引 56 到 99 只接收兩個。輸入位元組可能是均勻的,但所選的桶分佈卻不是。

實作註解也匯出了直接減少兩個位元組時 7,776 條目清單的對應有限範圍問題。這些數字來自來源中指定的實際範圍,而不是假設的攻擊率。重要的審查問題是是否使用了剩餘值,而不是少數產生的短語中的偏差是否看起來很小。

影響有多大——對於較大的隨機範圍來說很小,但非零,以及為什麼密碼代碼拒絕接受它

確定性測試使不均勻的尾部可見。邊界 3、5、7、100 和 7,776 故意顯得尷尬,而 2 的冪邊界則示範了無拒絕情況。另一種統計控制使用相同的 Web Crypto 來源來實現正確的函數和一個簡單的模幫助器,因此測試隔離了縮減策略,而不是歸咎於熵來源。

ToolAcre 不會將這些分佈檢查轉換為破解時間預測。偏差會降低均勻性,但將這種降低轉化為特定攻擊者的成本需要完整的威脅模型。工程要求更清晰:每個符合條件的索引都應該具有相同數量的可接受的原始值,並程式碼可以準確地強制執行這一點。

實作註解和確定性測試中經過驗證的偏差範例

`secureRandomInt` 找出能夠表示最高有效索引的最小整體位元組數。它計算位元組範圍,減去以邊界後的餘數,並將結果呼叫 `limit`。低於該限制的值屬於完整組;在允許執行模運算之前,等於或高於該值的值將被丟棄。

每次拒絕後都會進行新的抽獎。該環路具有較高的固定天花板,因此損壞的注入源無法永遠懸掛拉環;在重複超出範圍的值後,它會拋出而不是返回有偏見的答案。此失敗路徑是正確性的一部分:拒絕可疑來源可以保留返回索引來自統一接受視窗的承諾。

替代方案 — 繪製足夠的位元並丟棄超出範圍的值,或使用庫的統一整數函數

其他統一整數設計也是可能的,但它們不是此包的行為,因此不作為可互換的 ToolAcre 選項呈現。該引擎公開了一條經過審核的路徑。 `secureRandomChoice` 驗證其輸入是非空數組並委託給 `secureRandomInt(items.length)`,使字選擇成為有界整數合約的直接使用者。

隨機密碼產生器對字元使用相同的路徑,然後呼叫由安全有界交換驅動的 Fisher-Yates 洗牌。它不將 `sort` 與隨機比較器一起使用。將一個原語保留在多個功能之下可以使原始程式碼審查變得容易:修復或測試統一減少一次,然後追蹤其呼叫者。

替代設計不在本模組範圍內;出貨路徑使用拒絕採樣

bound-100 回歸測試提供從 200 到 255 的每個尾字節,然後是最後的 42。正確的程式碼會消耗所有 56 拒絕的位元組和來自 42 的答案。第二個重點案例提供 200 和 7;因為 200 模 100 將為零,傳回 7 證明第一個位元組被拒絕而不是悄悄減少。

此範例在設計上是確定性的,並不包含任何憑證。生產位元組對瀏覽器呼叫保持私有並不會被記錄。測試來源只能注入,因此可以在邊界強制行為;公共包不提供可以重現產生的密碼的生產種子模式。

工作範例:綁定 100 拒絕位元組 200 並接受以下 7

浮點隨機歸約、特定於函式庫的統一 API 和不相關的改組演演算法不屬於此實作範圍。評估它們需要它們的來源和合約。 ToolAcre 的程式碼是基於整數且有明確限制的,因此添加對替代方案的調查會模糊測試實際證明的狹隘主張。

本文也沒有推斷統一產生的密碼適用於每個策略或裝置。統一索引選擇解決了一種機制。即使每個清單元素都有相同的選擇機會,儲存、重複使用、剪貼簿處理、惡意軟體和目的地限制仍然是單獨的問題。

結論-密碼短語產生器必須統一選擇單字;查看該工具的技術說明,以了解密碼產生器的工作原理

密碼短語產生器不能僅僅因為其原始範圍留下餘數而傾向於早期條目。 ToolAcre 從 Web Crypto 取得位元組,拒絕不完整的尾部,並僅減少完整的同等大小組內的值。這些測試強制拒絕和接受邊界,因此該宣告不是基於對輸出的目視檢查。

在查看類似程式碼時,計算所選位元組寬度的原始範圍,將其除以請求的邊界並尋找丟棄的餘數。如果沒有尾部被拒絕,則要求另一份一致性證明。單字清單可以是公開的並來源是加密的,而粗心的減少仍然會引入可避免的偏差。