4. BGPsec协议:给BGP路由装上数字签名

聊完了RPKI,咱们得进入更硬核的部分了——BGPsec。说实话,我第一次接触BGPsec的时候,心里想的是:「这不就是给路由更新加个签名吗?能有多复杂?」后来真在实验室搭环境测试,才发现坑不少。今天我就把BGPsec的设计思路、签名机制,以及它和RPKI到底怎么配合,一次性讲清楚。

4.1 BGPsec的设计目标

BGPsec要解决什么问题?说白了,就是防止有人伪造路由。你想想看,传统BGP协议里,一个路由器收到一条路由更新,它根本没法验证这条路由是不是真的来自声称的AS。这就是BGP劫持的根源。

BGPsec的设计目标很明确:

  • 路径真实性验证:确保每条路由的AS_PATH是真实的,没有被篡改
  • 源AS验证:确认路由的起源AS确实是该前缀的合法拥有者
  • 防重放攻击:防止攻击者截获合法的路由更新后重复发送
  • 增量部署友好:不能要求全网同时升级,得支持逐步过渡

嗯,这里要注意一点:BGPsec并不加密路由内容,它只做签名验证。路由信息本身还是明文传输的。我见过有人误以为BGPsec是加密协议,其实不是。

核心要点:BGPsec的目标不是让路由变「秘密」,而是让路由变「可信」。它解决的是「谁说的」问题,而不是「说了什么」的问题。

4.2 路径签名机制

BGPsec的签名机制,我习惯把它叫做「洋葱签名」——每一层AS都在前一层的基础上加上自己的签名。咱们一步步拆解:

4.2.1 签名流程

假设AS 1要宣告一个前缀,经过AS 2、AS 3到达AS 4。签名过程是这样的:

  1. AS 1(起源AS):用自己的私钥对前缀+AS 1进行签名,生成签名S1
  2. AS 2:收到后,验证S1有效,然后用自己的私钥对前缀+AS 1+AS 2进行签名,生成S2
  3. AS 3:验证S2有效,签名前缀+AS 1+AS 2+AS 3,生成S3
  4. AS 4:收到后,依次验证S3、S2、S1,全部通过才接受路由

你看,每一跳都叠加了一个签名。攻击者如果想插入一个假的AS,他必须拥有那个AS的私钥——这在理论上是不可能的。

我的经验:我在测试环境里模拟过AS_PATH劫持,用BGPsec验证时,伪造的AS号立刻就被检测出来了。当时的感觉就是——这玩意儿真管用。

4.2.2 签名数据结构

BGPsec在BGP UPDATE消息中新增了一个可选路径属性,叫BGPsec_Path。这个属性里包含一个签名列表,每个签名对应路径中的一跳。具体结构如下:

BGPsec_Path {
  Version: 1,
  Segment List [
    {
      AS Number: 1,
      pCount: 1,
      Signature: [签名数据]
    },
    {
      AS Number: 2,
      pCount: 1,
      Signature: [签名数据]
    }
  ]
}

每个Segment里的pCount字段表示AS在路径中出现的次数,用来处理AS_SET的情况。这个设计挺巧妙的,我一开始没理解,后来才明白是为了兼容某些特殊场景。

4.2.3 验证过程

验证的时候,接收路由器会做这几件事:

  • 检查BGPsec_Path里的AS序列是否与AS_PATH一致
  • 用每个AS的公钥验证对应的签名
  • 确认签名中的前缀与UPDATE消息中的NLRI一致
  • 检查时间戳,防止重放攻击

全部通过,路由才被接受。任何一个环节失败,整条路由就被丢弃。

注意:BGPsec验证失败时,路由器不会回退到普通BGP处理。也就是说,如果BGPsec签名无效,这条路由就直接被丢弃了,不会「降级」使用。这一点在部署时要特别小心,我曾经见过有人配置错了导致路由全部丢失。

4.3 BGPsec与RPKI的关系

很多人搞不清BGPsec和RPKI的区别。我打个比方你就明白了:

  • RPKI 是「身份证」——它告诉你某个前缀归哪个AS所有
  • BGPsec 是「行程记录」——它告诉你这条路由经过了哪些AS

两者是互补关系,不是替代关系。具体来说:

特性 RPKI BGPsec
验证对象 前缀与起源AS的绑定关系 整个AS_PATH的真实性
依赖资源 ROA(路由起源授权) 路由器证书(Router Cert)
保护范围 仅第一跳(起源AS) 整条路径(所有跳)
部署难度 较低,只需配置ROA 较高,需要全网升级
当前普及度 较高,主流运营商已部署 较低,仍在推广阶段

在实际部署中,我建议的顺序是:先上RPKI,再考虑BGPsec。为什么?因为RPKI部署成本低,能解决80%的劫持问题(起源劫持)。BGPsec解决的是剩下的20%(路径劫持),但部署代价大得多。

关键理解:RPKI+BGPsec组合使用,才能实现端到端的路由安全保障。RPKI确保「谁有权宣告」,BGPsec确保「谁在传播」。两者缺一不可。

4.4 知识体系总览

下面这张图把BGPsec的核心逻辑串起来了,我画的时候特意把RPKI的关系也标了出来:

BGPsec 知识体系总览 设计目标 • 路径真实性验证 • 源AS验证 • 防重放攻击 • 增量部署友好 路径签名机制 • 洋葱签名模型 • BGPsec_Path属性 • 逐跳验证流程 • 签名数据结构 与RPKI的关系 • 互补非替代 • RPKI:身份证 • BGPsec:行程记录 • 组合使用最佳 核心结论 BGPsec通过逐跳签名实现AS_PATH真实性验证,与RPKI配合可构建完整路由安全体系 部署建议 先部署RPKI(低成本解决80%问题)→ 再逐步推进BGPsec(解决剩余20%)

这张图把BGPsec的三个核心模块串起来了。你从左往右看,设计目标决定了签名机制怎么实现,而签名机制又需要和RPKI配合才能发挥最大作用。我个人觉得,理解这三者的关系,比死记硬背协议细节更重要。

避坑指南:我曾经在部署BGPsec时犯过一个低级错误——忘了更新路由器证书。结果所有BGPsec签名验证都失败,路由全部被丢弃。后来排查了半天才发现是证书过期了。所以,证书生命周期管理一定要自动化,别指望人工去记。

好了,BGPsec的核心内容就这些。记住一句话:BGPsec不是银弹,但它和RPKI配合,是目前最靠谱的路由安全方案。下一节咱们聊聊实际部署中的那些坑,我踩过的坑可不少。

专注资料整理