在充气城堡FIPS中使用HKDF

问题描述 投票:0回答:1

我需要能够在 bouncy-castle FIPS 库中的输入键上使用 HKDF 算法。在通常的充气城堡库中,有一种简单的方法可以做到这一点

HKDFBytesGenerator hkdfBytesGenerator = new HKDFBytesGenerator(new SHA256Digest());
HKDFParameters hkdfParameters = new HKDFParameters(inputKey, salt, info);
hkdfBytesGenerator.init(hkdfParameters);
byte[] hkdf = new byte[32];
hkdfBytesGenerator.generateBytes(hkdf, 0, 32);

但是在 bouncy-castle FIPS 中,我还不知道如何执行相同的操作。我需要能够提供

salt
info
参数。
HKDFKeyBuilder#build
仅执行“提取”部分,而不执行“扩展”,因此没有
info
作为参数。类似地命名为
HKDFBytesGenerator
,但不执行“提取”,因此不包含
salt

java bouncycastle fips hkdf
1个回答
0
投票

答案一直就在我身边。正如我提到的

HKDFKeyBuilder
仅执行“提取”而
HKDFBytesGenerator
仅执行“扩展”,因此您需要同时使用两者。您需要首先使用
HKDFKeyBuilder
提取密钥,然后使用
HKDFBytesGenerator
展开它。根据您的其他参数,代码应该与此类似

HKDFKeyBuilder hkdfKeyBuilder = FipsKDF.HKDF_KEY_BUILDER.withSalt(salt).withPrf(AgreementKDFPRF.SHA256_HMAC);
byte[] extractedKey = hkdfKeyBuilder.build(inputKey).getKey();
AgreementOperatorFactory factory = new AgreementOperatorFactory();
KDFCalculator<AgreementKDFParameters> kdfCalculator = factory.createKDFCalculator(FipsKDF.HKDF.withPRF(AgreementKDFPRF.SHA256_HMAC).using(extractedKey).withIV(info));
byte[] hkdf = new byte[32];
kdfCalculator.generateBytes(hkdf);
return hkdf;
© www.soinside.com 2019 - 2024. All rights reserved.