最近我分析了几个SSL / TLS应用程序包,我发现在SSL / TLS应用程序数据包的最开始,有些数据包以固定的7个零字节开始,这很有趣。
http://gnuplot.sourceforge.net/docs_4.2/node162.html
TLS 1.2 application data example 1
我不知道为什么会这样?直观地,加密的消息应该是随机字节。
答案 0 :(得分:2)
我认为这是伽罗瓦反模式所特有的特殊性。 Wireshark所谓的“加密应用程序数据”在本例中为GenericAEADCipher
,在RFC 5246, section 6.2.3.3中定义,并以:
opaque nonce_explicit[SecurityParameters.record_iv_length];
RFC 5288, section 3描述了GCM的这个字段:
每个不同的nonce_explicit的每个值必须是不同的 调用任何固定密钥的GCM加密功能。没有 满足这种唯一性要求会严重降低安全性。 nonce_explicit可以是64位序列号。
nonce不需要是随机的,也不是不可预测的 - 但绝对必须是唯一的(参见this answer)。使用TLS记录序列号(不是TCP序列号!)是确保一个连接内唯一性的好方法,因此NSS遵循该建议(参见lib/ssl/ssl3con.c
,第2148-2167行和第2994-行 - NSS中的3016(3.27.1)。
因此,在新的TLS连接开始时,该nonce将只是一堆零。请注意,在第二个屏幕截图中,最后一个字节已经是01
- 大概是连接中的第二个记录。
答案 1 :(得分:0)
每个SSL组块中的7个前导0意味着它不太可能是SSL加密数据。必须有一些混淆,或者这只是SSL流/块中隐藏的数据通道。