我正在检查与连接的openssl客户端有关jsse tls加密和解密的Java应用程序的行为。
首先,我观察到当我为客户数据调用unwrap时,它总是对37字节的字节进行解包并产生0。下一次的unwrap会消耗一些字节并产生一些。
起初我以为客户端会先包装一个空数组。
但是后来我发现jsse代码执行相同的操作,除了它产生1个字节而不是0个字节。
因此,对wrap
的每次调用都消耗X个字节并产生Y个字节,但需要两个unwrap
,而第一个调用消耗37个字节并产生1个字节,而第二个消耗Y-37个字节并产生X-1个字节。
尽管openssl和jsse的功能几乎相同,但我希望这是正确的。
但是我想知道,为什么会这样。
我看不出原因,并且需要更多资源...?
最佳答案
您所看到的是缓解BEAST攻击的两种略有不同的方法。一种方法是使用an empty fragment as it's done with OpenSSL。 JSSE does something similar by sending 1 byte of data and the rest separately。
以下是一些有趣的链接:
This answer类似的问题。
Beat the BEAST with TLS 1.1/1.2 and More。
The BEAST summary - TLS, CBC, Countermeasures (Update 4)。
Tor and the BEAST SSL attack。