BouncyCastle的C#threadsafe是SecureRandom吗?

时间:2017-10-17 14:11:02

标签: c# random cryptography bouncycastle

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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