如何在 OpenSSL 中使用预共享密钥

Posted

技术标签:

【中文标题】如何在 OpenSSL 中使用预共享密钥【英文标题】:How to use pre-shared keys in OpenSSL 【发布时间】:2017-01-14 10:03:49 【问题描述】:

是否可以在系统上生成 2 个预共享密钥,将它们分发给两个主机 A 和 B,以便 A 和 B 可以使用这些密钥进行它们之间的加密连接? 我说的不是 RSA 之类的公钥,而是移交给双方的 2 个预共享密钥!

我必须在 C++ 中实现它,所以如果可能的话,我需要一个可行的解决方案。

【问题讨论】:

"是否可以在系统上生成 2 个预共享密钥,分发给两个主机 A 和 B,以便 A 和 B 可以使用这些密钥进行加密连接他们” - 是的。 TLS 为其提供了一系列密码套件:TLS-SRP 和 TLS-PSK。两者都使用共享密钥来构建安全通道。 SRP 使用 Diffie-Hellman 问题,而 PSK 使用 Block Cipher 作为底层原语。 然而,这两个都只使用预共享密钥进行身份验证。他们仍然使用协商的会话密钥进行实际加密。 那么如何让两台主机使用预共享密钥呢?我可以简单地将它们复制到一个特殊的目录中,当它们接收到传入连接时,它们会被读取和应用? 【参考方案1】:

是的,这是可能的。您似乎正在寻找的是对称密钥加密。

在这种情况下,密钥通常只是所需的随机字节数。任何加密安全的 RNG 源都可以。如果你以后要使用 openssl,RAND_bytes() 就可以了。

另见AES Encryption -Key Generation with OpenSSL

【讨论】:

但是我如何将这个生成的密钥放在主机上并让它们用于传入的 SSL/TLS 连接? 这不是问题文本所要求的。但是您可以在谷歌搜索“openssl tls psk”bitbucket.org/tiebingzhang/tls-psk-server-client-example/src/… 的第一个链接中找到示例

以上是关于如何在 OpenSSL 中使用预共享密钥的主要内容,如果未能解决你的问题,请参考以下文章

IPsec搭建(预共享密钥)---Centos部署服务器

开放式身份验证需要密码。 预共享密钥不需要密码。

手机中的WIFI , HG520s的共享密钥是啥?求高手解救。

使用 OpenSSL 的 PSK 提示

总部与分支机构之间建立点到点IPSec ***(预共享密钥认证)

如何使用共享密钥限制对 WCF 服务的访问