跳至主要內容

OneKey App 隨機數安全性測試

一週前已更新

本文旨在提供 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 平台上,則分別呼叫系統提供的安全隨機介面 SecureRandomSecRandomCopyBytes

⚠️ 注意:儘管 OneKey App 嚴格遵守安全開發指南,隨機數生成的安全性亦可能受限於用戶設備的作業系統或硬體實現。

安全性測試

NIST SP 800-22 FIPS 140-2

NIST SP 800-22(美國國家標準與技術研究院特別出版物 800-22)是由美國國家標準與技術研究院(NIST)發佈的文件,主要包含用於測試偽隨機數生成器(PRNG)的統計測試套件。它提供了一系列統計測試,旨在評估隨機數生成器所產生的位元序列的隨機性與品質。

項目

參數

分段長度

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 時會觸發系統 API SecureRandom。透過 React 遠端 JS 除錯,於執行時呼叫助記詞熵生成 API crypto.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 時會觸發系統 API SecRandomCopyBytes。透過 React 遠端 JS 除錯,於執行時呼叫助記詞熵生成 API crypto.getRandomValues 進行隨機數採樣,總計 20MB。根據定義的參數進行測試,得出的「測試報告」(參見下方附件)顯示所有項目皆通過,符合安全要求。

    • 結果: NIST SP 800-22-iOS-app-x.txt(可於附件中獲取)

FIPS 140-2(聯邦資訊處理標準 140-2)是由 NIST 發布的電腦安全標準。它詳細規定了加密模組的安全要求,特別針對隨機數生成器(RNG)類型、安全強度、種子、熵、週期性與連續測試等進行了規範。

  • 測試軟件: rng-tools

  • 測試參數:

  • 測試環境: ubuntu 24.04 arm64

  • 編譯流程:

    1. 正確安裝 gcc, automake

    2. 執行 ./autogen.sh

    3. 執行 ./configure(若發生錯誤,請依錯誤訊息配置相依項)

    4. 執行 make 以編譯文件 rngdrngtest

    5. 執行 ./rngtest < testfile.bin

⚠️ 注意:測試文件必須以二進位格式輸入,不得為 ASCII。

Windows

系統:Win10 22H2;硬體:i7-13700h

  • 桌面客戶端

    • OneKey App 的 Windows 桌面客戶端為基於 Chrome 引擎的 Electron 應用程式。透過開發者工具,於執行時呼叫助記詞熵生成 API crypto.getRandomValues 進行隨機數採樣,總計 20MB。將文字檔轉為二進位檔後,下方的「測試報告」顯示所有項目皆通過,符合安全要求。

      app-v5-randomness-fips-140-2-windows-desktop.png
  • 瀏覽器擴充功能

    • Chrome 擴充功能依賴於 Chrome 引擎。透過開發者工具,於執行時呼叫助記詞熵生成 API crypto.getRandomValues 進行隨機數採樣,總計 20MB。將文字檔轉為二進位檔後,下方的「測試報告」顯示在 1024 輪測試中,有一輪 Runs 項失敗,但整體全部通過,符合安全要求。

      app-v5-randomness-fips-140-2-windows-ext.png

macOS

系統:Sonoma 14.6;硬體:MacBook Pro 2020 13-inch M1

  • 桌面客戶端

    • OneKey App 的 macOS 桌面客戶端為基於 Chrome 引擎的 Electron 應用程式。透過開發者工具,於執行時呼叫助記詞熵生成 API crypto.getRandomValues 進行隨機數採樣,總計 20MB。將文字檔轉為二進位檔後,下方的「測試報告」顯示所有項目皆通過,符合安全要求。

      app-v5-randomness-fips-140-2-mac-desktop.png
  • 瀏覽器擴充功能

    • Chrome 擴充功能依賴於 Chrome 引擎。透過開發者工具,於執行時呼叫助記詞熵生成 API crypto.getRandomValues 進行隨機數採樣,總計 20MB。將文字檔轉為二進位檔後,下方的「測試報告」顯示所有項目皆通過,符合安全要求。

      app-v5-randomness-fips-140-2-mac-ext.png

Android

系統:hyperOS 1.0.4.0;硬體:Xiaomi 10s snapdragon870

  • Android 客戶端

    • OneKey App 的 Android 客戶端為 React Native 應用,依賴於原生 API。在 Android 上,應用程式呼叫 crypto.getRandomValues 時會觸發系統 API SecureRandom。透過 React 遠端 JS 除錯,於執行時呼叫助記詞熵生成 API crypto.getRandomValues 進行隨機數採樣,總計 20MB。將文字檔轉為二進位檔後,下方的「測試報告」顯示 1024 輪中有 3 輪的所有測試項目失敗,但整體全部通過,符合安全要求。

      app-v5-randomness-fips-140-2-android.png

    ⚠️ 注意:Android 客戶端在 1024 輪次中有 3 輪測試出現全項失敗。此問題極有可能是 rng-test 工具本身的 bug,並不影響測試的總體結論。

iOS

系統:iOS 17.5;硬體:iPhoneX A11

  • iOS 客戶端

    • OneKey App 的 iOS 客戶端為 React Native 應用,依賴於原生 API。在 iOS 上,應用程式呼叫 crypto.getRandomValues 時會觸發系統 API SecRandomCopyBytes。透過 React 遠端 JS 除錯,於執行時呼叫助記詞熵生成 API crypto.getRandomValues 進行隨機數採樣,總計 20MB。將文字檔轉為二進位檔後,下方的「測試報告」顯示 1024 輪中有 1 輪測試在 Long run 項目失敗,但整體全部通過,符合安全要求。

      app-v5-randomness-fips-140-2-ios.png

結果附件


是否回答了您的問題?