繁体   English   中英

BouncyCastle在C#threadsafe中的SecureRandom?

[英]Is BouncyCastle's SecureRandom in C# threadsafe?

对于Java中的实现,答案显然是肯定的,但C#中的Org.BouncyCastle.Security.SecureRandom怎么样?

据我所知,由于没有C#Bouncy Castle端口的官方(甚至任何)文档 - 我们所能做的就是查看源代码并尝试得出一些结论。 这是SecureRandom的源代码。 我们可以看到主要方法有NextCounterValue (用于生成种子)和NextBytes用于生成实际的随机数据。 NextCounterValue是线程安全的(使用Interlocked.Increment )。 NextBytes将实现转发给IRandomGenerator实例。 由于您可以将任何IRandomGenerator实例IRandomGeneratorSecureRandom构造函数 - 我们可以得出结论,它的线程安全性取决于所使用的IRandomGenerator线程安全性。

此外,在完整的.NET Framework上, SecureRandom使用CryptoApiRandomGenerator作为主生成器(生成种子),而且只是.NET RNGCryptoServiceProvider包装,我们知道它是线程安全的。

如果您只是在不传递任何IRandomGenerator情况下创建SecureRandom ,该IRandomGenerator办? 然后它将创建DigestRandomGenerator代码 )的实例,它似乎是线程安全的(在NextBytes使用简单lock )。

总而言之,如果你没有传递一个IRandomGenerator不是线程安全的IRandomGenerator实例,我们可以说SecureRandom是线程安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM