MASTG-BEST-0025 安全な乱数生成器 API を使用する (Use Secure Random Number Generator APIs)
オペレーティングシステムの 暗号論的に安全な擬似乱数生成器 (CSPRNG) を基盤とする安全な乱数生成器 API を使用します。独自の 擬似乱数生成器 (PRNG) を構築してはいけません。
Swift / Objective-C
Security フレームワーク (推奨): Security フレームワークの
SecRandomCopyBytesAPI を使用します。これはシステム CSPRNG を基盤とする暗号論的に安全なランダムバイトを生成します。CommonCrypto:
CCRandomCopyBytesやCCRandomGenerateBytes(Apple Developers ウェブサイトには記載されていません) を使用 できます。これらもシステム CSPRNG を基盤としています。但し、これらの関数のラッパーであるSecRandomCopyBytesをお勧めします。Swift 標準ライブラリ:
SystemRandomNumberGeneratorを基盤とする Swift 標準ライブラリの.randomAPI を使用できます。但し、それらの乱数生成器はカスタマイズ可能であるため、デフォルトのSystemRandomNumberGenerator(カスタム生成器を指定していないなど) や安全な代替手段 (暗号論的に安全であることを確保している) を使用するように、注意します。CryptoKit: CryptoKit は直接ランダムバイト生成器を公開していませんが、システム CSPRNG を基盤とする暗号演算を通じて、安全なランダムノンスと鍵を提供します。たとえば、鍵には
SymmetricKey、ノンスにはAES.GCM.Nonceを使用でき、生のランダムバイトを直接管理する必要はありません。
これらの API のコード例については 乱数生成 (Random Number Generator) を参照してください。
その他の言語
標準ライブラリやフレームワークを参照して、オペレーティングシステム CSPRNG を公開する API を見つけてください。ライブラリ自体に既知の脆弱性がない限り、これは通常最も安全な方法です。
iOS 上のクロスプラットフォームアプリやハイブリッドアプリでは、基盤となるシステム CSPRNG への呼び出しを転送するフレームワークを頼ります。以下に例を示します。
Flutter や Dart では
Random.secure()を使用します。これは暗号論的に安全であると記述されています。プラットフォーム統合レイヤ を通じてSecRandomCopyBytesに到達します。セキュリティレビューについては この記事 をご覧ください。React Native では、iOS 上で内部的に
SecRandomCopyBytesを呼び出す、react-native-secure-randomやreact-native-get-random-valuesなどのライブラリを使用します。
Last updated
Was this helpful?