我试图在批准模式下使用Bouncy Castle(CryptoServicesRegistrar.SetApprovedOnlyMode(true);
)并且在生成RSA密钥时遇到了一些麻烦。我一直在下面一行抛出异常。
var generator = CryptoServicesRegistrar.CreateGenerator(new FipsRsa.KeyGenerationParameters(BigInteger.ValueOf(65537L), 3072), FipsSecureRandom.GetInstance(FipsDrbg.CtrAes256.Algorithm.Name));
我已经调试了构造函数,查看了源代码,等等,但我无法弄清楚如何获取FSR对象。该对象的所有构建器方法都是BC库的内部方法,因此我无法访问它们。 FipsDrbg类中提供的方法也都是内部的,并且提供的存根(例如我的示例中的CtrAes256
)也不会公开它。我已经尝试将一个PRNG方法的字符串直接传递给构造函数,这些值来自文档中的值,例如" SHA256PRNG。"这给出了以下例外:
attempt to create key pair with unapproved RNG: RSA
查看源代码,抛出此异常的方法来自ValidateRandom
方法,该方法检查以确保随机实例为FipsSecureRandom
,因此它无法让我到处找。
最后,尝试回溯Builder : IDrbgBuilder<FipsSecureRandom>
课程并不能带来任何好处。它们完全用在完全内部的Base : Org.BouncyCastle.Crypto.Parameters.Parameters<FipsAlgorithm>, IDrbgBuilderService<FipsSecureRandom>
类中。虽然Builder的Build
方法是公开的,但它不是静态的,构造函数是内部的,所以我无法创建它的实例来构建任何东西。
我错过了什么?
更新
我被要求拆分失败的线路,所以这就是线路拆分。
var rsaParams = new FipsRsa.KeyGenerationParameters(BigInteger.ValueOf(65537L), 3072);
var fipsRandom = FipsSecureRandom.GetInstance("SHA256PRNG");
var generator = CryptoServicesRegistrar.CreateGenerator(rsaParams, fipsRandom);
抛出异常的行是var generator =
行。完整的异常详情就是这样。
Source: "bc-fips-1.0.1"
Message: attempt to create key pair with unapproved RNG: RSA
at Org.BouncyCastle.Crypto.Fips.Utils.ValidateRandom(SecureRandom random, Int32 securityStrength, FipsAlgorithm algorithm, String message)
at Org.BouncyCastle.Crypto.Fips.FipsRsa.KeyPairGenerator..ctor(KeyGenerationParameters keyGenParameters, SecureRandom random)
at Org.BouncyCastle.Crypto.Fips.FipsRsa.KeyGenerationParameters.<>c.<Org.BouncyCastle.Crypto.IGenerationService<Org.BouncyCastle.Crypto.Fips.FipsRsa.KeyPairGenerator>.GetFunc>b__17_0(IParameters`1 parameters, SecureRandom random)
at Org.BouncyCastle.Security.SecurityContext.CreateGenerator[A](IGenerationServiceType`1 type, SecureRandom random)
at Org.BouncyCastle.Crypto.CryptoServicesRegistrar.CreateGenerator[A](IGenerationServiceType`1 type, SecureRandom random)
没有内部异常,没有异常数据。