RSACryptoServiceProvider - 在哪里生成种子数据?
RSACryptoServiceProvider - where does the seed data is being generated?
我有以下使用 RSA 生成 public 和私钥的代码。
// generate RSA 1024
using (var rsa = new RSACryptoServiceProvider(1024))
{
var publicString = RSACryptoService.ExportPublicKeyNoHeaderFooter(rsa);
var privateString = RSACryptoService.ExportPrivateKey(rsa);
rsaKey = Convert.FromBase64String(publicString);
}
My question is on how does RSACryptoServiceProvider
generates everytime a random one, does it uses kind of a seed that is based on hardware or on timestamp?
how does RSACryptoServiceProvider generate a random seed? is it based on hardware or on timestamp?
这取决于可用的硬件和您 运行 使用的操作系统。如果您在 Windows 上 运行,则种子的熵可以来自多个来源:
机器上可能有专用于产生加密强度随机性的硬件。参见 https://en.wikipedia.org/wiki/Trusted_Platform_Module
控制启动顺序的 hardware/firmware——我们过去称之为 BIOS——可能提供加密服务。见 https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface.
现代 Intel 和 AMD CPU 有一个随机数生成指令,可以从硬件中获取随机性。参见 https://en.wikipedia.org/wiki/RDRAND
现代芯片通常有高精度时钟;它的低位可以用作熵的来源。
如果上述 none 可用,Windows 可以退回到使用键盘计时、磁盘计时、鼠标计时等的老式方法,作为熵的来源。
我有以下使用 RSA 生成 public 和私钥的代码。
// generate RSA 1024
using (var rsa = new RSACryptoServiceProvider(1024))
{
var publicString = RSACryptoService.ExportPublicKeyNoHeaderFooter(rsa);
var privateString = RSACryptoService.ExportPrivateKey(rsa);
rsaKey = Convert.FromBase64String(publicString);
}
My question is on how does
RSACryptoServiceProvider
generates everytime a random one, does it uses kind of a seed that is based on hardware or on timestamp?
how does RSACryptoServiceProvider generate a random seed? is it based on hardware or on timestamp?
这取决于可用的硬件和您 运行 使用的操作系统。如果您在 Windows 上 运行,则种子的熵可以来自多个来源:
机器上可能有专用于产生加密强度随机性的硬件。参见 https://en.wikipedia.org/wiki/Trusted_Platform_Module
控制启动顺序的 hardware/firmware——我们过去称之为 BIOS——可能提供加密服务。见 https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface.
现代 Intel 和 AMD CPU 有一个随机数生成指令,可以从硬件中获取随机性。参见 https://en.wikipedia.org/wiki/RDRAND
现代芯片通常有高精度时钟;它的低位可以用作熵的来源。
如果上述 none 可用,Windows 可以退回到使用键盘计时、磁盘计时、鼠标计时等的老式方法,作为熵的来源。