从 macOS Catalina 上的 /dev/urandom 读取是否是生成加密安全数据的安全方法?

信息安全 苹果系统 随机的 随机
2021-09-07 06:14:52

我正在阅读很多关于 macOS 上的熵的信息......

我知道根据此FIPS 140-02 文档,它不再使用 Yarrow符合 NIST 的 DRBG。

我读了很多:

https://github.com/briansmith/ring/pull/398 如何在 Mac OS X 上测量(和增加)熵? https://stackoverflow.com/questions/5832941/how-good-is-secrandomcopybytes http://serverascode.com/2014/03/04/yarrow.html https://stackoverflow.com/questions/3170500/random- number-generator-dev-random https://stackoverflow.com/questions/42197958/secrandomcopybytes-provider-sha1prng-or-nativeprng-type-in​​-objc

甚至邮寄了 Craig F: https ://apple.stackexchange.com/questions/362531/does-macos-still-use-yarrow-as-its-cryptographically-secure-pseudorandom-number

我看到SecRandomCopyBytes现在有效地使用:

https://opensource.apple.com/source/xnu/xnu-4570.41.2/osfmk/corecrypto/ccdbrg/src/ccdrbg_nisthmac.c.auto.html

虽然/dev/urandom使用:

https://opensource.apple.com/source/xnu/xnu-4570.41.2/osfmk/prng/random.c.auto.html

我有很多旧代码在 Catalina 上使用,用于密钥材料/dev/urandom是否仍然有效,它在密码学上是否安全?/dev/urandom/

我不想将所有内容都移植到 macOS 特定的库中。

Evenlibsodium似乎使用/dev/urandom,所以我想没关系?

1个回答

因此,有点意外的是,Apple 在刚刚过去的 12 月(2019 年 12 月)发布了更新的平台安全指南

其中直接涵盖了用于加密目的的随机数生成:

随机数生成

加密伪随机数生成器 (CPRNG) 是安全软件的重要组成部分。为此,Apple 提供了在 iOS、iPadOS、macOS、tvOS 和 watchOS 内核中运行的可信软件 CPRNG。它负责聚合来自系统的原始熵,并为内核和用户空间中的消费者提供安全的随机数。

熵源

内核 CPRNG 在引导期间和设备的生命周期内从多个熵源中播种。其中包括(视情况而定):

* The Secure Enclave’s hardware RNG
* Timing-based jitter collected during boot
* Entropy collected from hardware interrupts
* A seed file used to persist entropy across boots
* Intel random instructions, i.e. RDSEED and RDRAND (macOS-only)

内核 CPRNG

内核 CPRNG 是针对256-bit安全级别的 Fortuna 衍生设计。它使用以下 API 向用户空间消费者提供高质量的随机数:

* The getentropy(2) system call
* The random device, i.e. `/dev/random`

内核 CPRNG 通过写入随机设备接受用户提供的熵。

所以答案是肯定10.15.2 (19C57)的,在 macOS Catalina ( )上使用 /dev/urandom/ 生成密钥材料仍然有效。

这也结束了我对是否160-bit Yarrow256-bit FortunaCSPRNG 的核心的猜测。