身份认证:TCP-MD5和TCP-AO

作者 basilguo@163.com

日期 Aug. 26, 2023

简介 身份认证:TCP-MD5和TCP-AO

[TOC]

对于需要保存状态的协议的验证,如BGP、LDP(标签分发协议)或者其他基于TCP的协议,之前一直在用的是MD5的身份验证方式,TCP Authentication Option(TCP-AO)是用来替换MD5的。

RFC2385中,设计了使用TCP-MD5签名选项来验证保护BGP会话。最早是用来保护BGP会话,抵御RST攻击的。但是过了太久总是需要翻新下过往协议中设计不合理的地方。

TCP安全

首先明确,BGP是运行在TCP上面的,虽然它是一个3层协议。

一个场景,RA、RB、RC三个路由器,RA和RB维持了BGP会话连接,RC的运营者是RA和RB运营者的竞争对手,且存在恶意企图,试图中断RA和RB的连接。

RC可以故意给接口分配错误的IP地址(伪造源地址)。不是所有的劫持都有明确的目的,这种无意的攻击在IXP之间很常见,称之为"fat-finger"。

RC选择向RB发起TCP RST攻击。它发送一个伪造报文,伪造了RA的源地址,使用了TCP 179端口(BGP的端口),并设置了TCP RST标志位,猜测了序列号。如果猜错了RB就会丢弃报文,如果猜对了RB就会错误地断开和RA的BGP会话连接。这个例子中,RC on-path还是off-path都不太重要。

TCP MD5会话认证

针对上述问题,RFC 2385 提出的解决办法,就是使用TCP-MD5认证,其kind值19可以从上述网站查询。即对每个发出去的TCP段,都要使用16字节(128bits)的MD5 摘要抵御源伪造。

摘要输入内容顺序:

  1. TCP伪头部(src ip, dst ip, 0填充的协议号和分段长度)
  2. TCP头部,不包括选项并假定checksum为0
  3. TCP分段数据
  4. 独立对称密钥或者密码,通信双方都知道,且可以是特定于连接的(翻译的不是人话,简单理解就是不同的TCP通信可以使用不同的密钥,应该是防止一个泄露其他都遭殃)

Upon receiving a signed segment, the receiver must validate it by calculating its own digest from the same data (using its own key) and comparing the two digests. A failing comparison must result in the segment being dropped and must not produce any response back to the sender.

一旦收到一个签名的TCP段,接收者必须使用自己的密钥,生成摘要来验证这个报文,验证方式就是比对两个摘要内容。验证失败就丢弃报文段,且不会发送任何回应给发送者。身份认证都失败了,还发啥呀,肯定有问题嘛!

TCP Authentication Option (TCP-AO)

但是有了新的需求,事情有了变化,TCP-MD5已经被废止(deprecated)了。这个新的需求就是:对于任何基于预共享密钥的安全机制,运营者总会不时变更密钥。MD5不支持滚动更新密钥,这样子变更密钥的话TCP会话就会断开。所以实际中,密钥总是不能变更,因为使用这些密钥的BGP会话非常重要。

另外就是,TCP-MD5选项不支持多种加密算法计算MAC(消息认证码)信息,当然这是废话,指定的用的是MD5选项,你还想咋用其他算法呢?

TCP-AO是在NANOG 37(2006)提出的,Ron Bonica 展示了Authentication for TCP-based Routing and Management Protocols。大约6年后,IETF发布了RFC 5925 'The TCP Authentication Option,专门用于替代TCP-MD5(RFC 2385)。

TCP-AO和TCP-MD5很相像,只是做了一些些修改:

  1. Each node is configured with one (as in MD5) or multiple (new in TCP-AO) Master Key Tuples (MKTs),就是有了多个主密钥对。

  2. Each node derives traffic keys from each MKT --- The traffic keys and an authentication algorithm (multiple supported in TCP-AO) are used to calculate the Message Authentication Code (MAC),支持了多种认证算法。

  3. The MAC is included in each TCP segment --- The TCP-AO Signature Option includes MAC, KeyID (key for the current package) and RNextKeyID (the key used for the next packet, this allows for hitless key-rollover)多了指定keyID,用于平滑滚动密钥。

  4. The receiving node calculates the MAC for each received TCP segment using the configuration specified algorithm and traffic key associated with the received KeyID,需要配合指定的keyID来计算本地摘要,用于和TCP段中的摘要对比。

  5. The receiving node discards the packet if the calculated MAC does not match the received MAC,同TCP-MD5一样,比对不成功就丢包处理。

TCP-AO的使用肯定是需要硬件的支持的。所以才有了这篇文章:It's time to replace MD5 with TCP-AO

RFC6518: Keying and Authentication for Routing Protocols (KARP) Guidelines设计了,RFC6952: Analysis of BGP, LDP, PCEP, and MSDP Issues According to the Keying and Authentication for Routing Protocols (KARP) Design Guide分析。不过我还没有细看,先插个眼,有空再看吧。

参考

  1. It's time to replace MD5 with TCP-AO
  2. RFC 2385:Protection of BGP Sessions via the TCP MD5 Signature Option
  3. RFC 5925:The TCP Authentication Option
  4. Transmission Control Protocol (TCP) Parameters
相关推荐
傻啦嘿哟15 分钟前
代理IP在后端开发中的应用与后端工程师的角色
网络·网络协议·tcp/ip
向阳12181 小时前
Dubbo HTTP接入之triple协议
网络协议·http·dubbo
Estar.Lee2 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
hgdlip7 小时前
主IP地址与从IP地址:深入解析与应用探讨
网络·网络协议·tcp/ip
lwprain8 小时前
安装支持ssl的harbor 2.1.4 docker 19.03.8 docker-compose 1.24.0
网络协议·ssl·harbor
软件技术员8 小时前
Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
服务器·网络协议·ssl
C++忠实粉丝11 小时前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
C++忠实粉丝13 小时前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
Estar.Lee13 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
蝶开三月13 小时前
php:使用socket函数创建WebSocket服务
网络·websocket·网络协议·php·socket