winapi - 可以在多线程中调用 RtlGenRandom (SystemFunction036) 检索重复字节吗?
问题描述
我将在多线程应用程序中生成 RSA 密钥。我使用 RtlGenRandom 作为 RNG。
我知道我可以在挂起/崩溃或错误的情况下调用多线程。
我的问题是:
可以在多个线程中调用 RtlGenRandom 给我每个线程上的重复字节吗?
请不要提醒我使用 CNG 或 cryptgenrandom,因为这个答案说它们都以bcryptPrimitives!AesRNG*
.
解决方案
只有微软可以肯定地告诉你,或者该功能背后的合同到底是什么,但微软基本上说你应该远离这个功能。
RtlGenRandom 函数可用于要求部分中指定的操作系统。在后续版本中可能会更改或不可用。相反,使用 CryptGenRandom 函数
不管怎样,拆开它,你会发现
ProcessPrng -> AesRNGState_generate -> SymCryptRngAesGenerate
函数调用链,沿途还有EnterCriticalSection调用,所以我“想象”它是线程安全的。
PS:最后一个SymCryptRngAesGenerate
功能是开源的。
另请参阅此crypto/rand:Currently using deprecated API for random number generation on Windows github 关于该主题的讨论。
推荐阅读
- javascript - 如何让我的 NPM 模块正确安装其依赖项?
- c# - 比较字符串值并拆分它们
- maps - 为什么 openlayers 4 hasrsineDistance 距离的计算方式不同
- wso2 - WSO2 APIM 应用程序注册 urn:未找到批准操作
- r - 使用 textInput 选项在 R Shiny 中对数据框进行子集化
- typo3 - 我在哪里可以安全地下载旧的 TYPO3 版本?
- wso2 - WSO2 EI 6.1.1 发布请求正文未发送
- python-3.x - GraphFactory 找不到 gremlin.graph 属性配置
- vue.js - 使用 vuex-persistedstate 重定向到 fecth/asyncData 不能 100% 工作
- python - Python - 微软的 Face Api - 没有持久的人脸