【问题标题】:Is BouncyCastle's SecureRandom in C# threadsafe?C# 线程中的 Bouncy Castle SecureRandom 是否安全?
【发布时间】:2018-03-29 06:27:27
【问题描述】:

答案显然是yes 用于Java 中的实现,但是Org.BouncyCastle.Security.SecureRandom 在C# 中呢?

【问题讨论】:

标签: c# random cryptography bouncycastle


【解决方案1】:

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

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

如果你只创建SecureRandom 而不传递任何IRandomGenerator 会怎样?然后它将创建DigestRandomGenerator (code) 的实例,这似乎是线程安全的(在NextBytes 中使用简单的lock)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-30
    • 2014-04-22
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多