繁體中文

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

PRNG 與 CSPRNG:瀏覽器的隨機數字實際上來自哪裡

· 背景

密碼 網路加密 csprng

瀏覽器加密位元組透過拒絕取樣流向單字索引
原始 ToolAcre 向量圖

解釋偽隨機和加密安全產生器之間的差異、作業系統如何從硬體事件收集熵,以及隨機性如何透過 Web Crypto API 到達網頁。

計算機是確定性的,那麼隨機性從何而來? — 每個產生器背後的基本難題

在 ToolAcre 中執行的 JavaScript 從 API 邊界開始。它可以從 `crypto.getRandomValues` 請求字節,觀察呼叫是否成功並使用傳回的陣列。它無法檢查特定平台可能使用的每個實體事件、核心池或硬體元件。因此,手冊關於隨機性的起源故事超出了當地證據。

技術上誠實的解釋從觀察開始。該應用程式探測 Web Crypto,引擎對其進行包裝,並所有選擇都消耗該來源。特定於平台的內部結構需要平台檔案和審計,而不是從瀏覽器方法名稱推斷的通用語句。

儲存庫從瀏覽器 API 啟動;它不會審核物理熵來源

偽隨機產生器通常由種子和可重現狀態來描述,但此儲存庫不需要 JavaScript 引擎共用一個 Math.random 設計。 ToolAcre 透過在憑證產生中完全禁止 API 來避免歧義。源掃描強化了這種負保證。

測試仍然需要確定性字節,因此它們透過內部參數注入暴露 `getRandomValues` 的物件。這些假貨存在於測試支援中,不會作為種子生產模式匯出。可測試性不會為可重複的密碼建立隱藏的使用者選項。

Math.random 在這裡被禁止,沒有宣告一個通用的 PRNG 設計

本產品以一定範圍的方式使用「加密」:所需的瀏覽器介面是 Web Crypto,當它不存在或不可用時,產生將失敗關閉。應用程式在偵測期間呼叫該方法,而不是僅檢查其類型,捕獲呼叫拋出的受限環境。

此合約不承諾抵抗每一個假設的狀態妥協或認證瀏覽器實作。它證明了頁面請求的是哪個 API,並沒有較弱的後備與其並行。裝置完整性保留在產生器之外。

驗證的加密屬性是所需的 Web Crypto 來源和拒絕路徑

定時事件、專用處理器指令、重新播種計畫和作業系統熵池都位於 Web API 表面之下。這裡沒有斷言,因為包源無法驗證它們。未來特定於平台的文章將需要其描述的每個環境的主要檔案。

這項遺漏加強了而不是削弱了當前的主張。 ToolAcre 可以準確地說出它要求瀏覽器做什麼以及它如何處理位元組。它不需要假裝 JavaScript 可以審核完整的熵鏈來證明拒絕 Math.random 的合理性。

硬體事件和作業系統池詳細資訊是實作宣告,該來源未證明

`getRandomValues` 填入 `Uint8Array` ,其大小依要求的獨佔邊界決定。 `secureRandomInt` 將這些位元組組裝為無符號大端數字,計算最大的可整除接受視窗並丟棄其餘值。然後將接受的值減少為一個索引。

單字、分隔符號、字元和隨機交換都會重複使用此路徑。單一阻塞點使瀏覽器到選擇鏈可審查,並確保修復有界減少影響每個產生模式,而不是被遺忘的呼叫者。

從 getRandomValues 到 secureRandomInt:可見的瀏覽器到索引路徑

對於 7,776 字池,函數選擇足夠的位元組來表示每個有效索引。它形成一個整數,拒絕任何等於或高於計算限制的值,並僅在接受後傳回餘數。 `secureRandomChoice` 使用此結果從符合條件的陣列中讀取一個字。

特定的生產索引是私有的,不應在檔案中複製。相反,確定性測試會提供已知的尾部和範圍內位元組來證明控制流。這會追蹤一個選擇,而不會將產生的短語變成公共範例。

工作範例:透過拒絕取樣追蹤位元組到一個清單索引

硬體隨機數產生器設計和形式加密證明不包含在該包中。伺服器執行時或本機應用程式都不是。該實作是一個瀏覽器產生器,其保證不應複製到不相關的系統上。

它也不會解決儲存或以後使用的問題。透過 Web Crypto 選擇的值仍然可能因重複使用、網路釣魚、剪貼簿歷史記錄或惡意軟體而暴露。 CSPRNG 選擇解決了來源問題,而不是每個憑證處理問題。

重點 — 密碼產生器詢問瀏覽器的密碼產生器,這是秘密的正確來源

可操作的鏈很短:測試 Web Crypto 是否有效,如果無效則拒絕產生,填充字節,拒絕不均勻的尾部並將接受的值映射到索引。 ToolAcre 讓每一步都可見並測試困難的界限。

檢查該鏈,而不是依賴模糊的「隨機」標籤。然後分別檢查端點和目的地。瀏覽器的加密 API 是該產品的正確來源,但儲存庫並未聲稱驗證其下方的內容或後續的所有內容。