首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CNG和BCRYPT_KDF_SP80056A_CONCAT KDF时出现的问题

使用CNG和BCRYPT_KDF_SP80056A_CONCAT KDF时出现的问题
EN

Stack Overflow用户
提问于 2012-03-21 12:08:52
回答 1查看 729关注 0票数 1

我正在实现一个CNG ECDH,然后尝试使用BCRYPT_KDF_SP80056A_CONCAT KDF来派生一个对称AES256密钥(BCryptDeriveKey())。我有一个问题(我总是返回0xc000000d状态返回)。

我已经成功地生成了一个共享密钥,并且我已经创建了缓冲区描述"BCryptBufferDesc“,它有一个"BCryptBuffer”数组,其中有1个AlgorithmID,1个PartyU和1个PartyV "other info“。我想我已经正确地定义和填充了所有的结构。我只是为PartyU和PartyV字节选择了一些“值”(我尝试了1个字节和16个字节,但我得到了相同的结果)。NIST文档没有提供其他信息应该是什么的详细信息。

我跟随Microsoft网站来创建这些结构,使用它们的字符串、定义等。我尝试使用标准的L"HASH“kdf,它可以工作,并且我在”两端“得到相同的派生密钥,但是使用连接KDF,我总是得到相同的0xC000000D状态。

有没有其他人能够成功地使用BCRYPT_KDF_SP80056A_CONCAT CNG KDF?如果你有,你有什么提示吗?

EN

回答 1

Stack Overflow用户

发布于 2012-06-11 00:56:24

这对我很有效:

代码语言:javascript
复制
    ULONG derivedKeySize = 32;
    BCryptBufferDesc params;
    params.ulVersion = BCRYPTBUFFER_VERSION;
    params.cBuffers = 3;
    params.pBuffers = new BCryptBuffer[params.cBuffers];
    params.pBuffers[0].cbBuffer = 0;
    params.pBuffers[0].BufferType = KDF_ALGORITHMID;
    params.pBuffers[0].pvBuffer = new byte[0];
    params.pBuffers[1].cbBuffer = 0;
    params.pBuffers[1].BufferType = KDF_PARTYUINFO;
    params.pBuffers[1].pvBuffer = new byte[0];
    params.pBuffers[2].cbBuffer = 0;
    params.pBuffers[2].BufferType = KDF_PARTYVINFO;
    params.pBuffers[2].pvBuffer = new byte[0];

    NTSTATUS rv = BCryptDeriveKey(secretHandle, L"SP800_56A_CONCAT", &params, NULL, 0, &derivedKeySize, 0);
    if (rv != 0){/*fail*/}

    UCHAR derivedKey = new UCHAR[derivedKeySize];

    rv = BCryptDeriveKey(secretHandle, L"SP800_56A_CONCAT", &params, derivedKey, derivedKeySize, &derivedKeySize, 0);
    if (rv  != 0){/*fail*/}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9798480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档