この記事は、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は厳格なセキュリティ開発ガイドラインを採用していますが、乱数生成のセキュリティはユーザーのデバイスのOSおよびハードウェアの実装にも影響される可能性があります。
ランダムナンバーセキュリティテスト
NIST SP 800-22 FIPS 140-2
NIST SP 800-22(米国国立標準技術研究所の特別出版800-22)は、擬似乱数生成器(PRNG)のランダム性と品質を評価するための一連の統計テストセットを提供する文書です。
テストソフトウェア: NIST SP 800-22 Statistical Test Suite
テスト環境: macOS 14.5
テストパラメータ:
プロジェクト
|
パラメータ
|
Segment Length
|
1024000
|
Test Items
|
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エンジンに依存しています。開発者ツールを使用して、ランダム値のサンプリングには実行時に
crypto.getRandomValues
APIを呼び出します。累計20MBのランダム値を収集し、定義されたパラメータに従ってテストを実施し、「テストレポート」を生成しました(以下の添付ファイルを参照)。すべての項目が承認され、セキュリティ要件を満たしています。テスト結果: NIST SP 800-22-windows-desktop-wini713.txt(記事の添付ファイルにて利用可能)
ブラウザー拡張機能
Chrome拡張機能はChromeエンジンに依存しています。開発者ツールを使用して、ランダム値のサンプリングには実行時に
crypto.getRandomValues
APIを呼び出します。累計20MBのランダム値を収集し、定義されたパラメータに従ってテストを実施し、「テストレポート」を生成しました(以下の添付ファイルを参照)。すべての項目が承認され、セキュリティ要件を満たしています。テスト結果: NIST SP 800-22-windows-ext-wini713.txt(記事の添付ファイルにて利用可能)
macOS
システム: Sonoma 14.6; ハードウェア: 13インチMacBook Pro 2020 with M1
デスクトップクライアント
macOS用OneKey AppのデスクトップクライアントはElectronアプリケーションで、Chromeエンジンに依存しています。開発者ツールを使用して、ランダム値のサンプリングには実行時に
crypto.getRandomValues
APIを呼び出します。累計20MBのランダム値を収集し、定義されたパラメータに従ってテストを実施し、「テストレポート」を生成しました(以下の添付ファイルを参照)。すべての項目が承認され、セキュリティ要件を満たしています。テスト結果: NIST SP 800-22-macOS-desktop-macm1p.txt(記事の添付ファイルにて利用可能)
ブラウザー拡張機能
Chrome拡張機能はChromeエンジンに依存しています。開発者ツールを使用して、ランダム値のサンプリングには実行時に
crypto.getRandomValues
APIを呼び出します。累計20MBのランダム値を収集し、定義されたパラメータに従ってテストを実施し、「テストレポート」を生成しました(以下の添付ファイルを参照)。すべての項目が承認され、セキュリティ要件を満たしています。テスト結果: NIST SP 800-22-macOS-ext-macm1p.txt(記事の添付ファイルにて利用可能)
Android
システム: hyperOS 1.0.4.0; ハードウェア: Xiaomi 10s Snapdragon 870
Androidクライアント
Android用OneKey AppのAndroidクライアントは、ネイティブAPIに依存するReact Nativeアプリケーションです。Androidでは、
crypto.getRandomValues
を呼び出すと、システムのSecureRandom
APIが呼び出されます。ReactのリモートJSデバッガーを使用して、実行時にcrypto.getRandomValues
APIを呼び出してランダム値をサンプリングします。累計20MBのランダム値を収集し、定義されたパラメータに従ってテストを実施し、「テストレポート」を生成しました(以下の添付ファイルを参照)。すべての項目が承認され、セキュリティ要件を満たしています。テスト結果: NIST SP 800-22-android-app-andsm870.txt(記事の添付ファイルにて利用可能)
iOS
システム: iOS 17.5; ハードウェア: iPhoneX A11
iOS クライアント
iOS用OneKey AppのiOSクライアントは、ネイティブAPIに依存するReact Nativeアプリケーションです。iOSでは、
crypto.getRandomValues
を呼び出すと、システムのSecRandomCopyBytes
APIが呼び出されます。ReactのリモートJSデバッガーを使用して、実行時にcrypto.getRandomValues
APIを呼び出してランダム値をサンプリングします。累計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; ハードウェア: 13インチMacBook Pro 2020 with M1
デスクトップクライアント
ブラウザー拡張機能
Android
システム: hyperOS 1.0.4.0; ハードウェア: Xiaomi 10s Snapdragon 870
Androidクライアント
Android用OneKey AppのAndroidクライアントは、ネイティブAPIに依存するReact Nativeアプリケーションです。Androidでは、
crypto.getRandomValues
を呼び出すと、システムのSecRandomCopyBytes
APIが呼び出されます。ReactのリモートJSデバッガーを使用して、実行時にcrypto.getRandomValues
APIを呼び出してランダム値をサンプリングします。累計20MBのランダム値を収集し、テキストファイルをバイナリファイルに変換し、以下の「テストレポート」に示されたように、1024回のテストで3回ランダム値シーケンスが失敗しましたが、すべての項目が総合的に承認され、セキュリティ要件を満たしています。
⚠️ 注意: Androidクライアントは1024回のテストで3回のテスト失敗が発生しています。この問題はテストツールrng-testのバグであり、総合的なテスト結果には影響しません。
iOS
システム: iOS 17.5; ハードウェア: iPhoneX A11
iOSクライアント
iOS用OneKey AppのiOSクライアントは、ネイティブAPIに依存するReact Nativeアプリケーションです。iOSでは、
crypto.getRandomValues
を呼び出すと、システムのSecRandomCopyBytes
APIが呼び出されます。ReactのリモートJSデバッガーを使用して、実行時にcrypto.getRandomValues
APIを呼び出してランダム値をサンプリングします。累計20MBのランダム値を収集し、テキストファイルをバイナリファイルに変換し、以下の「テストレポート」に示されたように、長いランダム値シーケンスの1024回のテストで1回失敗しましたが、すべての項目が総合的に承認され、セキュリティ要件を満たしています。