在Linux TCP/IP协议中,生成初始序列号(ISN)的过程是怎样的?我了解Linux内核2.4至2.6版本中的ISN生成过程,可以在Embedding Covert Channels into TCP/IP第7和第8页中找到。然而,在后续的内核版本中,我搜索了类似的过程,但很遗憾没有找到。由于与安全相关的明显原因,可能无法获得太多细节信息。因为我正在验证在后续的Linux内核版本中实现类似隐写术方案(如链接所述)的可能性,所以我非常需要一些信息。感谢任何帮助。
更新之前的答案以反映当前状态(2019 年和 Linux 内核 5.1.3),因为生成内核中的 ISN
的算法再次更改以提高安全性。
secure_tcp_seq 现在使用 SipHash
(add–rotate–xor) 函数根据初始密钥、源 IP 地址、目标 IP 地址和端口生成 ISN。我认为这个变化与哈希冲突漏洞有关,导致 hash flooding 攻击。
ISN = M + F(LocalIP, LocalPort, RemoteIP, RemotePort, Secretkey)