As a CSPRNG, we should use AES-CTR DRBG (NIST SP 800-90A standard) which is approved by Microsoft.
Regarding entropy sources, we should access as many sources as possible like RDSEED (x86_64), TPM (GetRandom), and more.
Minimal feature set:
- 256-bit AES
- Entropy source (RDSEED)
- Nonce (from TPM). For now, just have a memory buffer and interface to initialize it.
- Derivation function
- No personalization
- Pass NIST test cases
There are drbg and aes_ctr_drbg crates, but we'd like to implement a simple one from scratch with the above features.
This CSPRNG replaces litebox_platform_lvbs/src/host/lvbs_impl.rs's litebox::platform::CrngProvider::fill_bytes_crng.