JSSE包创建两个需要两次unwraps的tls包。 为什么?

我正在使用连接的openssl客户端检查jsse tls加密和解密的java应用程序的行为。

首先,我观察到当我为客户端数据调用unwrap时,它总是解包消耗37个字节并产生0.下一个unwrap消耗一些字节并产生一些。

起初我以为客户端会首先包装一个空数组。 但后来我发现jsse代码做的相同,只不过它产生1个字节而不是0。

因此,对wrap每次调用都会消耗X个字节并产生Y个字节,但需要两个unwrap而第一个消耗37个字节并产生1个字节,第二个消耗Y-37字节并产生X-1个字节。

虽然openssl和jsse几乎一样,但我希望这是正确的。 但是我想知道,为什么会这样。 我没有看到这个原因,需要额外的资源……?

您所看到的是两种略微不同的缓解BEAST攻击的方法。 这样做的一种方法是使用OpenSSL完成的空片段 。 JSSE通过发送1个字节的数据来完成类似的操作,其余的则分别进行 。

以下是一些可能感兴趣的链接:

  • 这回答了类似的问题。
  • 使用TLS 1.1 / 1.2和更多版本击败BEAST
  • BEAST摘要 – TLS,CBC,对策(更新4)
  • Tor和BEAST SSL攻击