대답은 분명히 자바에서 구현을위한 yes이지만, 어때 Org.BouncyCastle.Security.SecureRandom
C#에서?C# threadsafe에 BouncyCastle의 SecureRandom이 있습니까?
답변
내가 아는 한 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
이 스레드로부터 안전하다고 말할 수 있습니다.
관련 정보 (이후이 클래스를 올바르게 사용하는 방법에 대한 문서화되지 않은 기본 사항에 대해서도) : https://stackoverflow.com/q/46792373/1709587 –