gpt4 book ai didi

c++ - 使用 OpenSSL EVP 的临时 ECDH (ECDHE)

转载 作者:行者123 更新时间:2023-11-30 16:51:43 86 4
gpt4 key购买 nike

因此,我尝试使用椭圆曲线 DH 的 OpenSSL EVP 方法执行 key 交换,以派生共享 key 。这对于在 GCM 模式下使用 AES 为自定义协议(protocol)提供强大的安全性是必要的。

问题是,我似乎只能找到有关静态 key 交换 (ECDH) 的信息和示例(请参阅 here )。

要使我的 key 交换“短暂”,我需要执行以下操作吗?

  1. 使用 EVP_PKEY_keygen 在服务器 (pub_s_e,priv_s_e) 和客户端 (pub_c_e, priv_c_e) 上生成新的“临时”公钥和私钥
  2. 使用 EVP_DigestSign 在客户端和服务器上使用主私钥对新的临时公钥进行签名(在服务器上使用 priv_s 对 pub_s_e 进行签名,在客户端上使用 priv_c 对 pub_c_e 进行签名)功能。
  3. 在客户端和服务器之间交换已签名的临时公钥(可以是明文形式)。
  4. 根据服务器的已知主公钥验证服务器的临时公钥,根据客户端的已知主公钥验证客户端的临时公钥,使用 EVP_DigestVerify功能。
  5. 执行 ECDH 来派生共享 key ,对其进行散列(以删除薄弱位)并使用 key 派生函数,如 EVP_BytesToKey获取 AES 的加密 key 和初始化 vector (IV)。
  6. 照常使用派生 key 和 IV 进行加密。

这似乎提供了完美的前向保密性,因为主 key 的妥协将允许签署 future 的 key ,但不允许检索过去的临时 key 。

我错过了什么吗?

最佳答案

好吧,我终于解决了这个问题。临时 ECDH 只需要在服务器和客户端上生成临时 key 对(使用 EVP_PKEY_keygen)。对于 ECDHE 来说,对它们进行身份验证是可选的,但使用我上面建议的静态 key 的“签名”方法是有效的。

通过明文发送静态公钥应该不会造成任何问题,因此客户端所需要做的就是验证服务器的证书并验证服务器的临时公钥上的签名。

关于c++ - 使用 OpenSSL EVP 的临时 ECDH (ECDHE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41646726/

86 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com