2017-10-17 19 views

答えて

2

私が知る限り、C#Bouncy Castleポートの公式(または任意の)ドキュメントはないので、ソースコードを見ていくつかの結論を出すことができます。ソースコードはSecureRandomです。我々は、そこにある主な方法は、NextCounterValue(種を生成するために使用される)とNextBytesが実際のランダムなデータを生成するために使用されていることがわかります。 NextCounterValueはスレッドセーフです(Interlocked.Incrementを使用)。 NextBytesの実装をIRandomGeneratorのインスタンスに転送します。 IRandomGeneratorのインスタンスをSecureRandomのコンストラクタに渡すことができるので、スレッドの安全性はIRandomGeneratorのものに依存していると判断できます。

た場合も、完全な.NET Frameworkの上、SecureRandomは(種を生成する)マスタ・ジェネレータとしてCryptoApiRandomGeneratorを使用し、その一つはちょうど私達が知っているように、スレッドセーフである周りの.NET RNGCryptoServiceProviderをラッパーです。

IRandomGeneratorを一切渡さずにSecureRandomを作成するとどうなりますか?次にDigestRandomGeneratorcode)のインスタンスが作成され、スレッドセーフ(には単純lockが使用されます)のように見えます。

スレッドセーフでないIRandomGeneratorのインスタンスを渡さないと、SecureRandomはスレッドセーフであると言えるでしょう。

関連する問題