本文將提供關於 OneKey App(軟體錢包)生成錢包助記詞過程中隨機數的安全性測試報告,涵蓋了所有 OneKey App 支援的作業系統(macOS, Windows, Andriod, iOS)及相應客戶端(Desktop & Extension)的測試結果。
測試結論
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 (National Institute of Standards and Technology Special Publication 800-22) 是一份由美國國家標準與技術研究院(NIST)發布的文檔,主要涉及用於測試偽隨機數生成器(PRNG)的統計測試套件。它提供了一組統計測試,用於評估隨機數生成器產生的位元序列的隨機性和質量。
測試環境:macOS 14.5
測試參數:
項目 | 參數 |
段長度 | 1024000 |
測試項目 | 1(指進行全部 15 項測試) |
Block Frequency Test - block length(M) | 20480 |
NonOverlapping Template Test - block length(m) | 10 |
Overlapping Template Test - block length(m) | 10 |
Approximate Entropy Test - block length(m) | 10 |
Serial Test - block length(m) | 16 |
Linear Complexity Test - block length(M) | 5000 |
bitstreams | 20(20*1024000bits = 20480000bits = 20MB) |
Windows
測試平台資訊:系統 Win10 22H2;硬體 i7-13700h
桌面客戶端
由於 Windows 的 OneKey App 桌面端為 electron 應用依賴 Chrome 核心進行工作,通過開發者工具,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。按照測試參數進行測試,「測試報告」如下方附件所示,所有項目均通過測試符合安全要求。
測試結果:NIST SP 800-22-windows-desktop-wini713.txt(可在文章附件中下載查閱)
瀏覽器插件
由於瀏覽器插件依賴 Chrome 核心進行工作,通過開發者工具,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。按照測試參數進行測試,「測試報告」如附件所示,所有項目均通過測試符合安全要求。
測試結果:NIST SP 800-22-windows-ext-wini713.txt(可在文章附件中下載查閱)
macOS
測試平台資訊:系統 Sonoma 14.6;硬體 MacBook Pro 2020 13-inch M1
桌面客戶端
由於 macOS 的 OneKey App 桌面端為 electron 應用依賴 Chrome 核心進行工作,通過開發者工具,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。按照測試參數進行測試,「測試報告」如下方附件所示,所有項目均通過測試符合安全要求。
測試結果:NIST SP 800-22-macOS-desktop-macm1p.txt(可在文章附件中下載查閱)
瀏覽器插件
由於瀏覽器插件依賴 Chrome 核心進行工作,通過開發者工具,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。按照測試參數進行測試,「測試報告」如附件所示,所有項目均通過測試符合安全要求。
測試結果:NIST SP 800-22-macOS-ext-macm1p.txt(可在文章附件中下載查閱)
Android
測試平台資訊:系統 hyperOS 1.0.4.0;硬體 Xiaomi 10s snapdragon870
Android 端
由於 OneKey App 的 Andriod 端為 React Native 應用依賴 Native API 進行工作,在 Android 端應用調用 crypto.getrandomvalue 時實際由系統 API SecureRandom 提供服務。通過 React remote js debug,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。按照測試參數進行測試,「測試報告」如附件所示,所有項目均通過測試符合安全要求。
測試結果:NIST SP 800-22-android-app-andsm870.txt(可在文章附件中下載查閱)
iOS
測試平台資訊:系統 IOS 17.5;硬體 iPhoneX A11
iOS 端
由於 iOS 端為React Native 應用依賴 Native API 進行工作,在 iOS 端應用調用crypto.getrandomvalue 時實際由系統 API SecRandomCopyBytes 提供服務。通過 React remote js debug,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。按照測試參數進行測試,「測試報告」如附件所示,所有項目均通過測試符合安全要求。
測試結果:NIST SP 800-22-iOS-app-x.txt(可在文章附件中下載查閱)
FIPS 140-2 是美國聯邦資訊處理標準(Federal Information Processing Standard,簡稱 FIPS)第 140-2 號標準的簡稱。這是一個由美國國家標準與技術研究院(NIST)制定的計算機安全標準,主要用於密碼模組的安全要求。其中 4.7.1 節及父章節內容,主要從 RNG 類型、安全強度、種子、熵、週期性、週期測試、連續性測試等方面對隨機數生成器提出要求。
測試軟體:rng-tools
測試參數:無
測試環境:ubuntu 24.04 arm64
編譯流程:
正確安裝 gcc、automake
執行 ./autogen.sh
執行 ./configure(若報錯,請按照報錯內容配置依賴環境)
執行 make 得到編譯文件 rngd 和 rngtest
執行 ./rngtest < testfile.bin
⚠️ 注意:測試文件需要以 bin 作為輸入,而非 ASCII 格式輸入。
Windows
測試平台資訊:系統 Win10 22H2;硬體 i7-13700h
桌面客戶端
由於 Windows 的 OneKey App 桌面端為 electron 應用依賴 Chrome 核心進行工作,通過開發者工具,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。將文本文件轉換為二進制文件,「測試報告」如下圖所示,所有項目均通過測試符合安全要求。
瀏覽器插件
由於瀏覽器插件依賴 Chrome 核心進行工作,通過開發者工具,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。將文本文件轉換為二進制文件,「測試報告」如下圖所示,1024 輪測試中 Runs 存在一輪不合格,所有項目均通過測試符合安全要求。
macOS
測試平台資訊:系統 Sonoma 14.6;硬體 MacBook Pro 2020 13-inch M1
桌面客戶端
由於 macOS 的 OneKey App 桌面端為 electron 應用依賴 Chrome 核心進行工作,通過開發者工具,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。將文本文件轉換為二進制文件,「測試報告」如圖所示,所有項目均通過測試符合安全要求。
瀏覽器插件
由於瀏覽器插件依賴 Chrome 核心進行工作,通過開發者工具,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。將文本文件轉換為二進制文件,「測試報告」如下圖所示,所有項目均通過測試符合安全要求。
Android
測試平台資訊:系統 hyperOS 1.0.4.0;硬體 Xiaomi 10s snapdragon870
Android 端
由於 OneKey App 的 Andriod 端為 React Native 應用依賴 Native API 進行工作,在 Android 端應用調用 crypto.getrandomvalue 時實際由系統 API SecureRandom 提供服務。通過 React remote js debug,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。將文本文件轉換為二進制文件,「測試報告」如下圖所示,1024 輪測試中存在三輪全部測試項失敗,所有項目均通過測試符合安全要求。
⚠️ Android 端存在 1024 輪測試中,有三輪測試存在所有測試項目均不通過的問題。此問題可能為 rng-test 測試工具自身 bug,這三輪測試不對測試結論產生影響。
iOS
測試平台資訊:系統 IOS 17.5;硬體 iPhoneX A11
iOS 端
由於 iOS 端為React Native 應用依賴 Native API 進行工作,在 iOS 端應用調用crypto.getrandomvalue 時實際由系統 API SecRandomCopyBytes 提供服務。通過 React remote js debug,在 runtime 中調用助記詞隨機熵生成 API:crypto.getrandomvalue,對隨機數進行取樣,總計 20MB。將文本文件轉換為二進制文件,「測試報告」如下圖所示,1024 輪測試中存在 Long run 一輪不合格,所有項目均通過測試符合安全要求。