本文档提供了关于 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;硬件 小米 10s 骁龙870
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;硬件:小米 10s 骁龙870
Android 客户端
OneKey App 的 Android 客户端是基于 React Native 的应用,依赖于原生 API。在 Android 上,当应用程序中调用
crypto.getRandomValues时,会同步调用系统 API SecureRandom。使用 React 远程 JS 调试,在运行时调用助记词熵生成 APIcrypto.getRandomValues进行随机数采样,共计 20MB。文本文件已转换为二进制文件,下方的“测试报告”显示共测试了 1024 轮,其中有三轮的所有测试项目均未通过,但整体上所有项目均通过,满足安全要求。
⚠️ 注意:Android 客户端在 1024 轮测试中有三轮全部测试项目失败。此问题可能是 rng-test 工具本身的 bug,并不影响测试的最终结论。
iOS
系统:iOS 17.5;硬件:iPhoneX A11
iOS 客户端
