MASTG-BEST-0025 安全な乱数生成器 API を使用する (Use Secure Random Number Generator APIs)

オペレーティングシステムの 暗号論的に安全な擬似乱数生成器 (CSPRNG) を基盤とする安全な乱数生成器 API を使用します。独自の 擬似乱数生成器 (PRNG) を構築してはいけません。

Swift / Objective-C

  • Security フレームワーク (推奨): Security フレームワークの SecRandomCopyBytes API を使用します。これはシステム CSPRNG を基盤とする暗号論的に安全なランダムバイトを生成します。

  • CommonCrypto: CCRandomCopyBytesCCRandomGenerateBytes (Apple Developers ウェブサイトには記載されていません) を使用 できます。これらもシステム CSPRNG を基盤としています。但し、これらの関数のラッパーである SecRandomCopyBytes をお勧めします。

  • Swift 標準ライブラリ: SystemRandomNumberGenerator を基盤とする Swift 標準ライブラリの .random API を使用できます。但し、それらの乱数生成器はカスタマイズ可能であるため、デフォルトの SystemRandomNumberGenerator (カスタム生成器を指定していないなど) や安全な代替手段 (暗号論的に安全であることを確保している) を使用するように、注意します。

  • CryptoKit: CryptoKit は直接ランダムバイト生成器を公開していませんが、システム CSPRNG を基盤とする暗号演算を通じて、安全なランダムノンスと鍵を提供します。たとえば、鍵には SymmetricKey、ノンスには AES.GCM.Nonce を使用でき、生のランダムバイトを直接管理する必要はありません。

これらの API のコード例については 乱数生成 (Random Number Generator) を参照してください。

その他の言語

標準ライブラリやフレームワークを参照して、オペレーティングシステム CSPRNG を公開する API を見つけてください。ライブラリ自体に既知の脆弱性がない限り、これは通常最も安全な方法です。

iOS 上のクロスプラットフォームアプリやハイブリッドアプリでは、基盤となるシステム CSPRNG への呼び出しを転送するフレームワークを頼ります。以下に例を示します。

Last updated

Was this helpful?