5

在 LINUX tcp/ip 协议中生成初始序列号 (ISN) 的过程是什么。我知道在将隐蔽通道嵌入 TCP/IP第 7 页和第 8 页中描述的 LINUX 内核 2.4 到 2.6 中生成 ISN 的过程 。我在后来的内核中搜索过类似的程序,但令我沮丧的是,我找不到任何程序。我了解由于与安全相关的明显原因,可能无法提供很多详细信息。当我正在验证在以后的 Linux 内核中实现类似的隐写术方案(如链接中所述)的可能性时,我非常需要一些信息。任何帮助表示赞赏。

4

3 回答 3

4

在此处阅读我的答案: 在 TCP 标头中操作 ISN 编号的最有效方法

该算法用于最新的内核 TCP Stack ( 3.5)。

编辑:请参阅下图以查看所有相关的内核版本在此处输入图像描述

EDIT2:查看内核源代码以获取旧版本的函数secure_tcp_sequence_number

内核 2.4.22

内核 2.6.30

内核 2.6.39

内核 3.0

Kernel 3.1 : (MD5 已取代 half-MD4)

于 2012-09-01T23:03:08.227 回答
2

在更仔细地阅读了RFC6528RFC1948之后,我得出一个结论,即 RFC1948 中指定的生成初始序列号(ISN)的算法:

       ISN = M + F(LocalIP, LocalPort, RemoteIP, RemotePort, Secretkey)

没有改变。取而代之的是,Bellovin SM 在 RFC1948 中提出的算法被正式指定并纳入了由 Bellovin SM 和 Gont 共同编写的 RFC6528 中的 Standards Track(根据RFC2119 )。F.. 由于现在已经过时的 RFC1948 不能在任何文档中使用,RFC6528 已经取代了它。

但正如我最初问题的答案中所指出的那样,MD5 已将 half-MD4 替换为内核 3.1 中的哈希函数。RFC6528 完全证明了这一点,因为它确实提供了更改作为伪随机函数的 F() 的灵活性。(请查看链接以获取更多详细信息)。

于 2012-09-02T21:58:32.563 回答
2

更新到以前的答案以表示当前状态(2019 年和 Linux 内核 5.1.3),因为ISN在内核中生成 s 的算法再次更改为更安全。

secure_tcp_seq现在使用SipHash(add–rotate–xor) 函数根据初始密钥、源和目标 IP 地址和端口生成 ISN。我想这种变化与哈希冲突漏洞导致哈希泛洪攻击有关。

于 2019-05-21T12:31:45.130 回答