Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption 使用CNG和BCRYPT_KDF_SP80056A_CONCAT KDF时出现的问题_Encryption_Public Key Encryption_Encryption Asymmetric_Bcrypt_Cng - Fatal编程技术网

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

Encryption 使用CNG和BCRYPT_KDF_SP80056A_CONCAT KDF时出现的问题,encryption,public-key-encryption,encryption-asymmetric,bcrypt,cng,Encryption,Public Key Encryption,Encryption Asymmetric,Bcrypt,Cng,我正在实施CNG ECDH,然后我尝试使用BCRYPT_KDF_SP80056A_CONCAT KDF导出对称AES256密钥(BCryptDeriveKey())。我遇到问题(我总是返回0xc000000d状态。) 我已经成功地生成了一个共享密钥,并创建了缓冲区描述“BCryptBufferDesc”,其中包含一个数组“BCryptBuffer”,其中包含1个算法ID、1个PartyU和1个PartyV“other info”。我想我已经正确定义和填充了所有结构。我只是为PartyU和Part

我正在实施CNG ECDH,然后我尝试使用BCRYPT_KDF_SP80056A_CONCAT KDF导出对称AES256密钥(BCryptDeriveKey())。我遇到问题(我总是返回0xc000000d状态。)

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

我在Microsoft网站上创建了这些结构,使用了它们的字符串、定义等。我尝试使用标准的L“HASH”kdf,它可以工作,并且我在“两侧”都得到了相同的派生键,但是使用串联kdf,我总是能得到相同的0xC000000D状态

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

这对我很有用:

    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*/}