【问题标题】:OpenSSL - Find the AES keyOpenSSL - 查找 AES 密钥
【发布时间】:2011-07-30 08:49:47
【问题描述】:

我使用 OpenSSL 库在客户端和主机之间用 C 语言创建了一个 SSL 套接字。 我需要 SSL 会话的 AES 密钥来正确加密消息,但我不能使用标准函数 ssl_write 和 ssl_read。 我发现有一个名为 AES_KEY 的结构,但我不知道如何找到它!

SSL_write 和 SSL_read 仅适用于数据包类型:23(“应用程序协议”)

例如,我如何解密来自服务器的 SSL Hello 消息(我打开了该服务器的 SSL 通道)?如何加密来自其他客户端的 SSL Hello 客户端(在 clair 中)?

我试图在 TLS 协议的“TLS 重新协商”阶段演示攻击。我正在尝试使用自定义代理模拟攻击 MITM。

现在,服务器向代理发送一定数量的 22(握手)和 20(ChangeCipherSpec)类型的加密消息。我怎样才能阅读这些消息并解密它们?标准库 ssl_read 仅适用于消息 23(应用程序)。

此外,客户端向代理客户端发送 Hello 和其他类型 22 和 20 的消息。我如何编写这些消息并加密它们?我尝试使用 ssl_write,但服务器不理解这些消息。

【问题讨论】:

  • "我不能使用标准函数 ssl_write 和 ssl_read" 为什么?
  • 因为我想发送个性化的握手消息。
  • 很高兴您想发送个性化的握手消息。但它没有回答我的问题。
  • 在重新协商阶段,握手消息使用 AES 加密,然后使用 MD5 散列。我想解密这些消息,而不是继续透明的重新协商阶段。

标签: c encryption openssl aes ssl


【解决方案1】:

您应该使用SSL_CTX_set_info_callback 来获取您想要的信息,而不是手动(en|de)加密记录。

【讨论】:

  • 谢谢...所以我必须为 SSL_connect 调用回调,手动生成 AES 密钥,然后为 SSL_write() 和 SSL_read() 调用另一个回调?通过这种方式,我可以个性化消息,但我必须为密钥生成管理很多问题。我不明白用于加密/解密操作的 SSL 私钥存放在哪里。
  • 你不应该做你想做的事。
  • 是的,对于正常使用,您是对的,但我试图演示 TLS 重新协商类型的攻击以通过考试。
  • 很好,但现在我们已经到了我指出该软件是开源的地步了。
  • 也许,它可能需要比你想象的更多的工作。也许,因为我没有在考试中获得学分,所以我不倾向于做这项工作。
【解决方案2】:

我找到了解决方案。功能是:

int ssl3_read_bytes (SSL *s, int type, unsigned char *buf, int len, int peek);
int ssl3_write_bytes (SSL *s, int type, const void *buf_, int len);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多