2017-10-17 10 views

답변

2

내가 아는 한 C# Bouncy Castle 포트의 공식 문서 (또는 심지어 모든 문서)가 없기 때문에 소스 코드를보고 결론을 도출해 볼 수 있습니다. 여기 소스 코드는 SecureRandom입니다. 우리는 거기에 주요 방법은 NextCounterValue (종자를 생성하는 데 사용) 및 NextBytes 실제 무작위 데이터를 생성하는 데 사용되는 것을 볼 수 있습니다. NextCounterValue은 스레드로부터 안전합니다 (Interlocked.Increment 사용). NextBytes은 구현을 IRandomGenerator의 인스턴스로 전달합니다. IRandomGenerator의 인스턴스를 SecureRandom의 생성자에 전달할 수 있으므로 스레드 안전성은 IRandomGenerator의 스레드 안전성에 달려 있다고 판단 할 수 있습니다.

또한 전체 .NET 프레임 워크에 SecureRandom은 (씨앗을 생성하기 위해) 마스터 발전기로 CryptoApiRandomGenerator을 사용하는 경우에 그 사람은 단지 주변 .NET 우리가 스레드 안전 알고 RNGCryptoServiceProvider를 래퍼입니다.

IRandomGenerator을 전달하지 않고 SecureRandom을 그냥 만들면 어떻게 될까요? 그런 다음 DigestRandomGenerator (code)의 인스턴스가 스레드로부터 안전하다고 간주됩니다 (에 간단한 lock 사용).

IRandomGenerator의 인스턴스를 스레드로부터 안전하게 보호하지 않으면 SecureRandom이 스레드로부터 안전하다고 말할 수 있습니다.