本文旨在提供 OneKey App(軟件錢包)助記詞生成隨機性的安全性測試報告,涵蓋 OneKey App 支援的所有作業系統(macOS、Windows、Android、iOS)及其對應客戶端(桌面版與擴充功能)。
結論
OneKey App 在 Windows、macOS、iOS、Android 客戶端以及 Chrome 擴充功能中,均採用了開發指南所推薦的、各平台專用的加密級強隨機數 API。內部測試證實,其符合 NIST SP 800-22 與 FIPS 140-2 隨機數安全標準。
在基於 Chrome 的平台(Windows, macOS)上,使用 Chrome 提供的安全偽隨機數 API
crypto.getRandomValues來生成加密級強偽隨機數。在基於 React Native 的 Android 和 iOS 平台上,則分別呼叫系統提供的安全隨機介面
SecureRandom與SecRandomCopyBytes。
⚠️ 注意:儘管 OneKey App 嚴格遵守安全開發指南,隨機數生成的安全性亦可能受限於用戶設備的作業系統或硬體實現。
安全性測試
NIST SP 800-22 FIPS 140-2
NIST SP 800-22(美國國家標準與技術研究院特別出版物 800-22)是由美國國家標準與技術研究院(NIST)發佈的文件,主要包含用於測試偽隨機數生成器(PRNG)的統計測試套件。它提供了一系列統計測試,旨在評估隨機數生成器所產生的位元序列的隨機性與品質。
測試軟件: NIST SP 800-22 統計測試套件
測試環境: macOS 14.5
測試參數:
項目
|
參數
|
分段長度
|
1024000
|
測試項
|
1 (全部 15 項測試)
|
區塊頻率測試 - 區塊長度(M)
|
20480
|
非重疊模板測試 - 區塊長度(m)
|
10
|
重疊模板測試 - 區塊長度(m)
|
10
|
近似熵測試 - 區塊長度(m)
|
10
|
串列測試 - 區塊長度(m)
|
16
|
線性複雜度測試 - 區塊長度(M)
|
5000
|
位元流
|
20(20*1024000位元 = 20480000位元 = 20MB)
|
Windows
系統:Win10 22H2;硬體:i7-13700h
桌面客戶端
OneKey App 的 Windows 桌面客戶端為基於 Chrome 引擎的 Electron 應用程式。透過開發者工具,於執行時呼叫助記詞熵生成 API
crypto.getRandomValues進行隨機數採樣,總計 20MB。根據定義的參數進行測試,得出的「測試報告」(參見下方附件)顯示所有項目皆通過,符合安全要求。結果: NIST SP 800-22-windows-desktop-wini713.txt(可於附件中獲取)
瀏覽器擴充功能
Chrome 擴充功能依賴於 Chrome 引擎。透過開發者工具,於執行時呼叫助記詞熵生成 API
crypto.getRandomValues進行隨機數採樣,總計 20MB。根據定義的參數進行測試,得出的「測試報告」(參見下方附件)顯示所有項目皆通過,符合安全要求。結果: NIST SP 800-22-windows-ext-wini713.txt(可於附件中獲取)
macOS
系統:Sonoma 14.6;硬體:MacBook Pro 2020 13-inch M1
桌面客戶端
OneKey App 的 macOS 桌面客戶端為基於 Chrome 引擎的 Electron 應用程式。透過開發者工具,於執行時呼叫助記詞熵生成 API
crypto.getRandomValues進行隨機數採樣,總計 20MB。根據定義的參數進行測試,得出的「測試報告」(參見下方附件)顯示所有項目皆通過,符合安全要求。結果: NIST SP 800-22-macOS-desktop-macm1p.txt(可於附件中獲取)
瀏覽器擴充功能
Chrome 擴充功能依賴於 Chrome 引擎。透過開發者工具,於執行時呼叫助記詞熵生成 API
crypto.getRandomValues進行隨機數採樣,總計 20MB。根據定義的參數進行測試,得出的「測試報告」(參見下方附件)顯示所有項目皆通過,符合安全要求。結果: NIST SP 800-22-macOS-ext-macm1p.txt(可於附件中獲取)
Android
系統:hyperOS 1.0.4.0;硬體:Xiaomi 10s snapdragon870
Android 客戶端
OneKey App 的 Android 客戶端為 React Native 應用,依賴於原生 API。在 Android 上,應用程式呼叫
crypto.getRandomValues時會觸發系統 APISecureRandom。透過 React 遠端 JS 除錯,於執行時呼叫助記詞熵生成 APIcrypto.getRandomValues進行隨機數採樣,總計 20MB。根據定義的參數進行測試,得出的「測試報告」(參見下方附件)顯示所有項目皆通過,符合安全要求。結果: NIST SP 800-22-android-app-andsm870.txt(可於附件中獲取)
iOS
系統:iOS 17.5;硬體:iPhoneX A11
iOS 客戶端
OneKey App 的 iOS 客戶端為 React Native 應用,依賴於原生 API。在 iOS 上,應用程式呼叫
crypto.getRandomValues時會觸發系統 APISecRandomCopyBytes。透過 React 遠端 JS 除錯,於執行時呼叫助記詞熵生成 APIcrypto.getRandomValues進行隨機數採樣,總計 20MB。根據定義的參數進行測試,得出的「測試報告」(參見下方附件)顯示所有項目皆通過,符合安全要求。結果: NIST SP 800-22-iOS-app-x.txt(可於附件中獲取)
FIPS 140-2(聯邦資訊處理標準 140-2)是由 NIST 發布的電腦安全標準。它詳細規定了加密模組的安全要求,特別針對隨機數生成器(RNG)類型、安全強度、種子、熵、週期性與連續測試等進行了規範。
測試軟件: rng-tools
測試參數: 無
測試環境: ubuntu 24.04 arm64
編譯流程:
正確安裝 gcc, automake
執行
./autogen.sh執行
./configure(若發生錯誤,請依錯誤訊息配置相依項)執行
make以編譯文件 rngd 與 rngtest執行
./rngtest < testfile.bin
⚠️ 注意:測試文件必須以二進位格式輸入,不得為 ASCII。
Windows
系統:Win10 22H2;硬體:i7-13700h
桌面客戶端
瀏覽器擴充功能
macOS
系統:Sonoma 14.6;硬體:MacBook Pro 2020 13-inch M1
桌面客戶端
瀏覽器擴充功能
Android
系統:hyperOS 1.0.4.0;硬體:Xiaomi 10s snapdragon870
Android 客戶端
OneKey App 的 Android 客戶端為 React Native 應用,依賴於原生 API。在 Android 上,應用程式呼叫
crypto.getRandomValues時會觸發系統 APISecureRandom。透過 React 遠端 JS 除錯,於執行時呼叫助記詞熵生成 APIcrypto.getRandomValues進行隨機數採樣,總計 20MB。將文字檔轉為二進位檔後,下方的「測試報告」顯示 1024 輪中有 3 輪的所有測試項目失敗,但整體全部通過,符合安全要求。
⚠️ 注意:Android 客戶端在 1024 輪次中有 3 輪測試出現全項失敗。此問題極有可能是 rng-test 工具本身的 bug,並不影響測試的總體結論。
iOS
系統:iOS 17.5;硬體:iPhoneX A11
iOS 客戶端
