メインコンテンツにスキップ

OneKey Appのランダムナンバーセキュリティテスト

OneKey avatar
対応者:OneKey
今週アップデートされました

この記事は、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)のランダム性と品質を評価するための一連の統計テストセットを提供する文書です。

プロジェクト

パラメータ

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

  • コンパイル手順:

    1. gccautomakeを正しくインストール

    2. ./autogen.sh を実行

    3. ./configure を実行(エラーが発生した場合は、エラーメッセージに従って依存関係を設定)

    4. make を実行して rngd および rngtest をコンパイル

    5. ./rngtest < testfile.bin を実行

⚠️ 注意: テストファイルはバイナリ形式である必要があり、ASCIIではありません。

Windows

システム: Win10 22H2; ハードウェア: i7-13700h

  • デスクトップクライアント

    • Windows用OneKey AppのデスクトップクライアントはElectronアプリケーションで、Chromeエンジンに依存しています。開発者ツールを使用して、ランダム値のサンプリングには実行時に crypto.getRandomValues APIを呼び出します。累計20MBのランダム値を収集し、テキストファイルをバイナリファイルに変換し、以下の「テストレポート」に示されたように、すべての項目が承認され、セキュリティ要件を満たしています。

      app-v5-randomness-fips-140-2-windows-desktop.png
  • ブラウザー拡張機能

    • Chrome拡張機能はChromeエンジンに依存しています。開発者ツールを使用して、ランダム値のサンプリングには実行時に crypto.getRandomValues APIを呼び出します。累計20MBのランダム値を収集し、テキストファイルをバイナリファイルに変換し、以下の「テストレポート」に示されたように、1024回のテストで1回のシーケンスエラーテストが失敗しましたが、すべての項目が総合的に承認され、セキュリティ要件を満たしています。

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

macOS

システム: Sonoma 14.6; ハードウェア: 13インチMacBook Pro 2020 with M1

  • デスクトップクライアント

    • macOS用OneKey AppのデスクトップクライアントはElectronアプリケーションで、Chromeエンジンに依存しています。開発者ツールを使用して、ランダム値のサンプリングには実行時に crypto.getRandomValues APIを呼び出します。累計20MBのランダム値を収集し、テキストファイルをバイナリファイルに変換し、以下の「テストレポート」に示されたように、すべての項目が承認され、セキュリティ要件を満たしています。

      app-v5-randomness-fips-140-2-mac-desktop.png
  • ブラウザー拡張機能

    • Chrome拡張機能はChromeエンジンに依存しています。開発者ツールを使用して、ランダム値のサンプリングには実行時に crypto.getRandomValues APIを呼び出します。累計20MBのランダム値を収集し、テキストファイルをバイナリファイルに変換し、以下の「テストレポート」に示されたように、すべての項目が承認され、セキュリティ要件を満たしています。

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

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回ランダム値シーケンスが失敗しましたが、すべての項目が総合的に承認され、セキュリティ要件を満たしています。

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

    ⚠️ 注意: 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回失敗しましたが、すべての項目が総合的に承認され、セキュリティ要件を満たしています。

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

テスト結果の添付ファイル

こちらの回答で解決しましたか?