内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我正在使用加密下一代API(CNG)实现ECDHE。我成功生成公钥和私钥。对于预共享密钥,我使用BCryptSecretAgreement API,它返回预共享密钥保密句柄(BCRYPT_SECRET_HANDLE)。
如何从BCRYPT_SECRET_HANDLE中将预共享密钥导出为BYTE数组?
从Windows 10开始,您可以使用BCRYPT_KDF_RAW_SECRET
。响应BCryptDeriveKey()
生成的密钥数据是原始密钥。
注1:bcrypt.h表示这种格式适用于“WINBLUE”,如果我理解正确的话,它将是Windows 8.1,但我收到了STATUS_NOT_SUPPORTED,以便在Windows 8.1和Windows Server 2012 R2上使用此KDF类型。但是,这适用于Windows 10.)
注2:我发现使用这个KDF类型返回的数据是little-endian(BCrypt中的其他所有内容都是big-endian)。因此,要在其他大端世界中使用该值,您需要对数据进行字节翻转。