如何在运行 mbed TLS 的 ESP8266 上加快慢速 TLS 握手?

信息安全 tls 嵌入式系统
2021-09-03 04:53:22

我正在开发一个系统,该系统由一个移动应用程序和一个相互通信的嵌入式设备组成。我正在使用mbed TLS(以前称为 Polar SSL)
问题是嵌入式设备在大约 7 秒内执行 TLS 握手,这对于我们的用例来说太长了。

  • 需要更好的MCU吗?将 MCU ( ESP8266 ) 换成更强大的是显而易见的解决方案。但是,是否可以在不更改 MCU 的情况下加快 TLS 握手?

  • 缓存可能吗?我阅读了有关会话缓存的信息,这会加快多少速度?我必须假设一个设备将由多个用户控制,因此需要缓存各种会话。我不能浪费内存。

身份验证不是问题,我使用的是 1024 RSA。其他算法(例如 Diffie-Hellman 或 ECC)能否加快速度?

握手故障

编辑:
逐步握手时间:

    . Performing the SSL/TLS handshake:
hello request...0ms
client hello...30ms
server hello...0ms
server cert...0ms
server key exchange...4490ms
cert request...0ms
server hello done...0ms
client cert...0ms
client key exchange...3310ms
verify cert...0ms
client change cipher spec...0ms
client finished...10ms
server change cipher spec...0ms
server finished...0ms
flush buffers...0ms
hs wrapup...0ms
-------------------------------------------
-----------------hs done!------------------
-------------------------------------------
total: 7861
2个回答

主要瓶颈在于密钥交换,其中完成了非对称加密。

使用 rsa 密钥交换,这是迄今为止最快的方法。这样它只需要计算客户端密钥交换,避免服务器密钥交换计算。此外,您可以通过更改证书大小来控制客户端密钥交换时间。

请注意,尽管 RSA-2048 加密比 RSA-1024 加密花费更长的时间,但 RSA-1024 太接近已公开证明可破解的大小。每个人都认为 NSA 经常破解“有趣”方的 RSA-1024,并且这样做的代价一直在下降,直到有一天,学者们很快就会证明这样做的能力。上次学者们做演示是在 2009 年,当时他们破解了 RSA-768,因此今天能够在公共云(无定制硬件)上破解 RSA-1024 是可行的 IMO。

还要注意,如果不使用 DHE 或 ECDHE,所有记录的流量都可以在事后使用证书的私钥解密,即使证书已过期且无用。因此,您必须将证书的私钥永远保密。

我会尝试对来自 mbedTLS 和来自bearssl-esp8266的 P-256 ECDHE 进行基准测试。如果可以的话,甚至是 Curve25519 ECDHE。