MASTG-BEST-0001: 使用安全的随机数生成器 API
使用平台或编程语言提供的密码学安全的伪随机数生成器。
Java/Kotlin¶
使用 java.security.SecureRandom
,它符合 FIPS 140-2,密码模块安全要求,第 4.9.1 节中指定的统计随机数生成器测试,并满足 RFC 4086:安全随机性要求中描述的密码强度要求。它产生非确定性输出,并在对象初始化期间使用系统熵自动播种自身,因此通常不需要手动播种,如果操作不当,反而会削弱随机性。
建议使用 SecureRandom
的默认(无参数)构造函数,因为它使用系统提供的适当长度的种子来确保高熵。 Android 文档中不鼓励向构造函数提供种子(硬编码或其他方式),因为它存在创建确定性输出并破坏安全性的风险。
虽然 文档说提供的种子通常会补充现有种子,但如果使用旧的安全提供程序,则此行为可能会有所不同。 为避免这些陷阱,请确保您的应用程序以具有更新提供程序的现代 Android 版本为目标,或显式配置安全提供程序,例如 AndroidOpenSSL(或更新版本中的 Conscrypt)。
其他语言¶
请查阅标准库或框架文档,以查找公开操作系统密码学安全伪随机数生成器的 API。 这通常是最安全的方法,前提是该库的随机数生成中没有已知的漏洞。 例如,请参阅 Flutter/Dart 问题,以提醒您某些框架的 PRNG 实现可能存在已知弱点。