跳转到主要内容

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;硬件 小米 10s 骁龙870

  • 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. 正确安装 gccautomake

    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;硬件:小米 10s 骁龙870

  • Android 客户端

    • OneKey App 的 Android 客户端是基于 React Native 的应用,依赖于原生 API。在 Android 上,当应用程序中调用 crypto.getRandomValues 时,会同步调用系统 API SecureRandom。使用 React 远程 JS 调试,在运行时调用助记词熵生成 API crypto.getRandomValues 进行随机数采样,共计 20MB。文本文件已转换为二进制文件,下方的“测试报告”显示共测试了 1024 轮,其中有三轮的所有测试项目均未通过,但整体上所有项目均通过,满足安全要求。

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

    ⚠️ 注意:Android 客户端在 1024 轮测试中有三轮全部测试项目失败。此问题可能是 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 轮,其中有一轮在长程测试(Long run)中失败,但整体上所有项目均通过,满足安全要求。

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

结果附件


这是否解答了您的问题?