跳至主要內容

OneKey App 隨機數安全性測試

今日已更新

本文將提供關於 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 平台中,則分別調用了系統原生提供的安全隨機種子接口SecureRandomSecRandomCopyBytes

⚠️ 注意:雖然 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)的統計測試套件。它提供了一組統計測試,用於評估隨機數生成器產生的位元序列的隨機性和質量。

項目

參數

段長度

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

  • 編譯流程:

    1. 正確安裝 gcc、automake

    2. 執行 ./autogen.sh

    3. 執行 ./configure(若報錯,請按照報錯內容配置依賴環境)

    4. 執行 make 得到編譯文件 rngd 和 rngtest

    5. 執行 ./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 一輪不合格,所有項目均通過測試符合安全要求。

測試結果附件

是否回答了您的問題?