web-dev-qa-db-ja.com

macOS Catalinaの/ dev / urandomから読み取ることは、暗号で保護されたデータを生成する安全な方法ですか?

MacOSのエントロピーについてたくさん読んでいます...

this FIPS 140-02 doc a NIST準拠のDRBGに従って、Yarrowを使用しないことを知っています。

私はたくさん読みます:

https://github.com/briansmith/ring/pull/398Mac OS Xでエントロピーを測定(および増加)するにはどうすればよいですか?https:/ /stackoverflow.com/questions/5832941/how-good-is-secrandomcopybyteshttp://serverascode.com/2014/03/04/yarrow.htmlhttps:/ /stackoverflow.com/questions/3170500/random-number-generator-dev-randomhttps://stackoverflow.com/questions/42197958/secrandomcopybytes-provider-sha1prng-or-nativeprng-type-in -objc

郵送されたクレイグ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

カタリナで/dev/urandomを使用している古いコードをたくさん持っていますが、鍵素材に/dev/urandom/を使用することはまだ有効ですか?暗号的に安全ですか?

すべてをmacOS固有のlibに移植したくありません。

libsodiumでも/dev/urandomを使用しているようですので、大丈夫でしょうか?

9
Woodstock

したがって、やや偶然に、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は、ランダムデバイスへの書き込みを通じてユーザー指定のエントロピーを受け入れます。

したがって、答えははいですが、macOS Catalina(10.15.2 (19C57))でキーマテリアルを生成するために/ dev/urandom /を使用することは依然として有効です。

これにより、_160-bit Yarrow_または_256-bit Fortuna_がCSPRNGの中心にあったかどうかについての私の推測も終わります。

0
Woodstock