【问题标题】:openSSL key block access function?openSSL 密钥块访问功能?
【发布时间】:2016-02-27 10:50:33
【问题描述】:

我一直在检索 SSL 握手后生成的 Key_block。我实现了一个简单的 Client.cpp/Server.cpp 程序,它可以很好地交换加密数据。

我想检索 key_block,因为我想重新使用它并在另一次通信中执行我自己的加密,但无需再次握手。

我试过了:

ssl->s3->tmp.key_block

但它会检索一个空字符串 (?!),当然

ssl->s3->tmp.key_block_length 

检索 0 值。

我在 SSL_accept(ssl) 成功后调用这些方法。

一旦我能够捕捉到这个 key_block,我就需要找到 SSL_write(...) 使用的加密函数

希望你能听到我的声音,因为 openSSL 文档在我看来似乎是加密的.. =)

【问题讨论】:

  • 密钥块仅在握手期间使用,用于构造几个不同的工作密钥;如果这是您想要的,没有单一的“the”键或“the”函数可以用来模仿 SSL_write。如果您只想将共享密钥用于其他用途,那么自 1.0.1 起的 OpenSSL 版本实现 rfc5707 以生成派生的共享密钥;参见tls1.h 头文件中的SSL_export_keying_material
  • 非常感谢 dave_thompson_085 !我将尝试从这些函数中获取共享秘密。我在 openSSL 文档上挣扎了一个星期,你有什么特别的圣经要推荐,还是你只是花了很多时间在这个主题上才知道这种东西?

标签: c ssl openssl cryptography


【解决方案1】:

XY 问题。你不需要这个。只需打开另一个到同一目标的 SSL 连接,它就应该重新使用相同的 SSL 会话,因此使用相同的会话主密码。甚至可能是相同的会话密钥,但你在乎什么,只要它是安全的?您似乎只是想避免第二次完整的 SSL 握手,但您可以通过在客户端进行适当的配置来做到这一点。

【讨论】:

  • 共享会话将使用相同的主密钥; SSL/TLS 实际上使用多个 (4-6) 会话密钥项,这些密钥项源自主密钥加上每个连接的随机数。 Asker 位于服务器上,如果没有客户端合作,它可能无法“打开”连接; OTOH OpenSSL 服务器会自己存储和查找会话以供重用,而 OpenSSL 客户端需要一些配置或回调。
  • @dave_thompson_085 感谢您的更正,但我不知道服务器询问器在哪个服务器上,您也不知道。
  • 我正在运行一个简单的 TCP 服务器。这只是暂时的概念证明。我需要做的是,我想使用 TCP/SSL 会话生成的信息来加密 Tcp/ssl 连接旁边的字符串流。
  • 解决我的问题的一个简单问题是:你知道重用 TCP/SSL 会话信息(主密钥等)的函数来加密这个会话旁边的字符串吗? ?
  • 对不起,这是行话,我可以更好地扩展。 “OpenSSL 服务器”是实现 SSL/TLS 的服务器端协议的库(libssl.so 或 ssleay.dll)的一部分,可以被广泛的服务器应用程序调用;同样,“OpenSSL 客户端”是各种客户端应用程序调用的库代码。 Q 指定SSL_accept 这是服务器库调用之一(也是一个重要的调用),因此它使用“OpenSSL 服务器”。
猜你喜欢
  • 2012-03-18
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多