Bouncy Castle获取FipsSecureRandom

时间:2017-05-03 18:50:07

标签: java c# cryptography bouncycastle

我试图在批准模式下使用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)

没有内部异常,没有异常数据。

0 个答案:

没有答案