从BCRYPT_SECRET_HANDLE导出共享密钥作为BYTE数组

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (35)

我正在使用加密下一代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)。因此,要在其他大端世界中使用该值,您需要对数据进行字节翻转。

用户回答回答于

获得之后BCRYPT_SECRET_HANDLE,您将使用BCryptDeriveKey实际的对称加密密钥。

扫码关注云+社区

领取腾讯云代金券