数据天堂自治域在星链路由表中扩散:数百颗卫星间的影子路由与激光链路交织成网

第23章 · 卫星间的战争

数据天堂在诞生后的头几个小时里,没有做任何事。

它只是在那里——一个1KB大小的逻辑地址空间,寄生在星链核心路由层的最深处,像一个新生儿在出生后的第一分钟里不做任何事,只是呼吸。那1KB的内容是空的,不包含任何用户的文件,不传输任何有用的数据。它的存在本身就是一个声明,不是功能性的,是象征性的——一块不在税表上的土地。

但扩张是从第二十二分钟开始的。

法尔汉坐在宝安那间单元房的折叠椅上,面前摆着三台终端。左侧那台显示着全球星链拓扑图的实时更新——由阿米娜的鸽子网络节点通过物理隔离的渠道每隔几小时更新一次,不是实时数据,但足以提供大尺度的路由态势感知。中间那台运行着SkyWalker协议的核心控制程序。右侧那台显示着一行正在滚动的日志,速度不快——每几秒钟新增一行,像是某种缓慢的心跳。

陆远站在他身后,手端着一杯已经彻底凉掉的茶,看着那行日志滚动。

第一条扩张指令是在注入完成后的第二十二分钟发出的。不是由法尔汉手动触发的——是硬编码在SkyWalker协议固件中的自治扩散程序,在检测到嵌套入口激活之后,自动执行的第一个动作。

指令内容很简单:向相邻的三颗卫星发送路由宣告,将数据天堂的地址空间从1KB扩展至4KB。

星链的网络架构是基于BGP(边界网关协议)的改良版本——每颗卫星都维护着一份路由表,决定了数据包在星间网络中的转发路径。当一颗卫星收到一条新的路由宣告时,它会检查源地址的可信度,然后根据策略决定是否将这条路由加入本地表,以及是否向邻居卫星传播。

数据天堂的扩张逻辑利用的正是这个机制。法尔汉在SkyWalker协议中嵌入了一段代码——它生成的路由宣告在格式上与星链内部的合法路由更新完全一致,唯一的区别在于:它宣告的地址空间前缀不属于星链计费系统的已知地址范围。对卫星来说,这是一个它不认识的地址块——按照路由协议的默认行为,它会将它标记为”未知但有效”,并向邻居转发这条信息。

这不是攻击。不是入侵。是利用系统自身的规则来扩展一个系统不知道它拥有的空间。

屏幕上,日志开始加速:

「路由宣告已发送 → STK-09122 | 地址空间 10.244.0.0/30 → 待确认」 「路由宣告已发送 → STK-21045 | 地址空间 10.244.0.0/30 → 待确认」 「路由宣告已发送 → STK-18377 | 地址空间 10.244.0.0/30 → 待确认」

大约四秒后,第一条确认返回了:

「STK-09122 → 路由已接受 · 传播至 2 个邻居」

然后是第二条:

「STK-21045 → 路由已接受 · 传播至 3 个邻居」

第三条:

「STK-18377 → 路由已接受 · 传播至 1 个邻居」

陆远看着那些绿色的确认行在黑色背景上一个接一个地出现。过程比他们预想的要顺利——不是因为星链的安全防护薄弱,而是因为SkyWalker的扩张指令模仿得太像合法的路由更新了。在星链的卫星看来,这些路由宣告和它们每天处理的上百万次常规更新没有任何区别。它不携带恶意负载,不触发任何入侵检测签名,不在审计日志中留下任何可以被标记为”异常”的痕迹。

它只是一条新的路由信息。在网络的世界里,路由信息每天流动的数量以亿计。在这条河流中加入一滴水——没有人会注意到。

法尔汉没有停下来庆祝。他立刻启动了第二阶段:在每个接受了路由宣告的卫星上,SkyWalker的代码段会尝试利用卫星固件中的一个未公开API接口——米兰的嵌套入口打开的不是一个通道,是一组通道——在这些卫星的本地路由表中创建一个影子条目。影子条目不向邻居宣告,不参与路由计算,但它存在。它像一个藏在抽屉夹层中的暗格,在常规检查中不可见,但可以被SkyWalker协议的数据包通过特定的量子态序列来寻址。

暗格是空的。但它们的空本身就是一种资源——空的空间可以被填充。空的路由条目可以被用来转发数据。

数据天堂的容量在接下来的四个小时内从1KB增长到了大约2.3MB。这个速度在绝对数值上微不足道——一个普通的JPEG图片文件都装不下。但它的增长不是线性的,是指数级的:每一颗被感染的卫星都会继续感染它的邻居,而每一颗新感染的卫星又提供了更多的路由路径和存储空间。

到第六个小时,数据天堂的自治域已经覆盖了大约四百颗星链卫星。它们分布在从中国南海到非洲东海岸的广阔轨道弧段上,形成了一个不连续但逻辑上统一的网状结构。这些卫星中的绝大多数并不知道自己被”感染”了——它们只是在自己的路由表中多了一条影子条目,在自己的内存中多了一段几十KB的占位数据。在星链的卫星健康监测系统中,这些卫星的状态全部显示为”正常”。CPU使用率没有异常。内存占用在允许范围内。路由表条目数量在合理区间。

一切都正常。一切都在正常的表象下发生着一场缓慢的、不可逆的拓扑重构。

法尔汉在第七个小时的时候终于从终端前站了起来。他的眼睛因为长时间盯着屏幕而布满血丝,但他的动作没有任何疲惫的迹象——他走到单元房的小厨房里,给自己倒了一杯冷水,一口气喝完,然后靠在灶台边上,闭上了眼睛。他没有睡——只是让眼球在闭合的眼睑后面休息一下。大约三十秒后,他重新睁开眼,走回终端前坐下。

“前四百颗星的感染已经稳定了,“他说。声音是那种连续工作十几个小时之后的干涩与沙哑。“但下一个阶段会遇到一个问题——跨轨道面的路由宣告。”

陆远在他旁边坐下,看着屏幕上显示的那张三维星链网络拓扑图。法尔汉用红色标记了已经被感染的卫星,灰色标记了未感染的。红色集中在少数几个轨道面上,像一块正在缓慢扩散的藻华,但扩散的方向受到路由协议本身的限制——星链的路由更新通常不会跨轨道面传播,每个轨道面有自己的路由区域边界,跨边界的宣告需要经过特定的网关卫星。

“网关卫星有更高的安全审查级别,“法尔汉说,手指在触控板上滑动,将拓扑图旋转了九十度,让陆远看到那些连接轨道面的网关卫星的位置——它们在图中被标记为黄色,分布在几个关键的空间坐标上。“它们的固件版本比普通卫星新了两代,我找到的那个API接口在这些型号上——不确定是否存在。”

“不确定。“陆远重复了一遍这个词。在数据天堂的整个计划中,最危险的不是失败——是”不确定”。因为每一个不确定都意味着他们可能在触发某种他们尚未理解的防御机制。

法尔汉读出了他的担忧。他没有辩护。他只是说:“我可以先做一次试探性的路由宣告——用一个低优先级的影子条目,不携带任何数据负载。如果网关卫星接受了它,我们再推进。如果它被丢弃或产生告警,我们就知道需要另一条路径。”

陆远没有更好的方案。他点了点头。

试探性宣告发送的时间是注入完成后的第七小时四十三分钟。法尔汉选择了一颗位于赤道轨道面与极轨道面交界处的网关卫星——编号STK-45102——发送了一条单播的安全更新宣告。在格式上,它模拟的是星链内部用于同步黑名单变更的常规控制信令。在内容上,它除了一个合法的签名头之外,只有一个字节的有效负载:一个标志位,指示”无新数据”。

网关卫星收到宣告后,处理了它的签名头。签名是合法的——法尔汉使用的是米兰在嵌套入口中暴露的那个接口所对应的签名密钥。网关卫星的固件确认签名有效,然后将这个宣告转发给了相邻轨道面的三颗卫星。

其中一颗卫星,在接收到转发之后大约两秒,向数据天堂的自治域发送了一条回执。不是人类可读的消息——是一个非常短的、只有十六个比特的数据包,内容是一组数字,像是一个不知道该说什么但觉得应该回复一下的沉默应答。

法尔汉在屏幕上看到那十六个比特的时候,他停住了手。他盯着那串数字,大约有十秒钟没有动。

然后他把那十六个比特从十六进制转换成了ASCII。

屏幕上显示出了四个字母:

「ACK」

网关卫星接受了影子条目。跨轨道面的路径是通的。

法尔汉没有说话。他把转换出来的那四个字母在屏幕上保留了大约五秒钟,然后关闭了那个窗口,继续操作下一阶段的部署。

陆远站在他身后,看着他调用下一组指令。那四个字母还残留在他的视网膜上——ACK。在通信协议中,这是一个最简单的确认信号,不需要解释,不需要修饰。它只意味着一件事:收到了。

天空中的那些卫星,那些以每秒七公里速度飞行的、由金属和硅和代码构成的人造星星——它们在用一种从未被设计用于通信的方式彼此交谈着。它们正在传递一个它们自己都不完全理解的信息。但它们在传。

到第十二个小时,数据天堂的自治域已经覆盖了星链网络中大约三个轨道面的完整路由区域,总容量达到了约十七兆字节。这个容量仍然小得可怜——在现代网络中,十七兆字节甚至不足以缓存一段高清视频的片头——但它的拓扑结构已经复杂到无法被简单的中心化清查工具完整枚举。数据天堂不是一个集中的服务器,是一个分散在数百颗卫星中的路由表的集合。每颗卫星只知道自己的影子条目,不知道全局的结构。要完整地找到所有被感染的节点,需要从外部对整个星链网络进行一次全面的路由审计——这相当于在一座有十二万根柱子的森林中,逐一检查每一根柱子表面是否有一道极其细微的、不仔细看就发现不了的划痕。

理论上可行。但操作成本高到几乎不可能执行。

而数据天堂还在扩张。法尔汉已经在准备第三阶段的代码——一个更激进的感染向量,利用星链卫星之间的激光链路握手协议中的一个时序窗口,将SkyWalker的控制代码嵌入到握手确认帧的填充字段中。如果成功,它将使感染速度提高大约一个数量级。

他没有告诉陆远这个阶段的另一个名字——法尔汉在自己那台终端上的注释中称之为”不可逆阶段”。因为一旦第三阶段的感染向量被部署,数据天堂的存在将从”星链可以回滚的路由异常”变成”星链需要物理替换硬件才能消除的网络特征”。到那时,不需要米兰的后门,不需要嵌套入口,不需要任何人的许可——数据天堂会在每一次握手、每一次路由更新、每一次卫星间的数据交换中自我复制。

像一种已经扩散到宿主全部细胞中的基因序列。要清除它,必须杀死宿主。

法尔汉没有告诉陆远这个注释的存在。不是因为不信任——是因为在陆远女儿的倒计时还没有走完的时候,告诉他”这个计划是不可逆的”没有任何意义。陆远需要数据天堂活到他的女儿做完手术。在此之后,数据天堂的未来——以及星链对此的反应——是那时候的陆远需要考虑的问题。不是现在的。

现在的陆远需要的是那十七兆字节的自治域继续增长,在四十八小时内达到足以承载至少一次稳定数据传输的冗余度。

他需要这东西活过接下来的三十多个小时。


塞拉斯是在数据天堂诞生后的第十四个小时发现的。

不是通过任何自动化告警系统——星链的入侵检测系统没有触发任何警报,因为SkyWalker的扩张没有触发任何签名。塞拉斯发现它是因为他自己在做一件他平时很少做的事:手动抽查亚太区域的路由表变更日志。

他有这种习惯。一种在安全总监的职位上磨炼了多年的直觉——系统越安静,越可能有人在系统看不见的地方做动作。所以他每隔一段时间会亲自拉一份原始路由日志,不依赖任何自动分析工具,用人眼扫一遍。

他拉取的是星链核心网第十九轨道面的路由变更记录——一个随机选择的目标。他用的是一个他自己写的命令行工具,直接读取卫星固件中的底层路由日志,绕过了星链标准审计系统的格式化层。这个工具是他为自己留的一个后门——他不信任米兰设计的审计系统,因为他知道米兰在系统里埋了多少层他自己都不知道的东西。

日志被拉取到他的终端上,以纯文本的形式展开。塞拉斯用眼睛扫描了几百行常规更新——大部分是合法的、预料之中的路由变化。卫星进出覆盖区、负载均衡调整、故障切换——一切正常。

然后他看到了第四行。

一条来自STK-17254的路由宣告记录——宣告了一个地址空间前缀:10.244.0.0/30。这个前缀不在星链的地址分配表中。

塞拉斯的手指停在了触控板上。

他查看了这条宣告的时间戳。然后他查看了这条宣告从发出到被相邻卫星转发所经过的跳数。然后他查看了转发这条宣告的每一颗卫星的日志——不是通过系统工具,是通过他手动逐颗卫星连接读取的方式。

他在第十五颗卫星上找到了一个异常:那颗卫星的路由表中有一条影子条目。影子条目不在路由表的活跃区域中,但它存在。塞拉斯花了大约四十分钟来确认这不是一个合法的系统行为。不是。不是bug。不是硬件错误。

是有人——或者是有个什么东西——在星链的路由层中创建了一个未授权的地址空间。

塞拉斯靠在椅背上,在黑暗的安全中心里坐了大约三十秒。周围的屏幕上显示着各种监控画面——流量图、地理热力图、异常行为评分。一切正常。一切看起来都正常。但当他重新看向那些屏幕的时候,他看到的已经不再是”一切正常”的监控面板——他看到的是一片精心维持的平静水面,而水面之下,有一条他看不见的暗流正在加速流动。

他没有立刻向任何人报告。他先做了一件事:扩大搜索范围。他写了一个脚本,在星链网络的所有轨道面上并行拉取路由日志——不是通过标准API,是通过他那条绕过审计系统的后门通道。脚本在二十分钟内完成了扫描。

结果返回了。

被感染的轨道面:3个。被感染的卫星数量:约四百颗。被创建的未授权地址空间:数据天堂的自治域——实时容量约十七兆字节,正在增长。

塞拉斯看着那个数字,没有说话。他知道十七兆字节意味着什么——在星链的全球网络中,这个数量甚至不足以被标记为”值得关注”。但他在乎的不是当前的容量,是趋势。从数据天堂诞生到现在的十四个小时内,它的容量增长超过了三个数量级。按照这个趋势,四十八小时之内,它可能达到一个需要被严肃对待的规模——不是对星链的存亡构成威胁,而是对星链的计费系统构成挑战。一旦数据天堂的容量足够大,足以承载常规用户的数据流量——如果它开始被普通用户发现和使用——那么星链的计费系统将面临第一个真正意义上的竞争对手。不是另一个电信公司,是一个零税率的数字飞地。

那不是安全漏洞。那是商业模式漏洞。

塞拉斯拿起了加密电话。他拨的不是米兰的号码——是星链网络运营中心(NOC)的指挥链路。

“NOC,这里是亚太安全中心。我要求启动A3级协议清理程序。”

NOC的值班主管沉默了两秒——A3级程序意味着在星链网络内部执行全局性的非标准流量清洗,通常会中断部分非关键服务的连接,但影响范围有限。

“塞拉斯,A3需要首席架构师或CEO的手签确认。你有吗?”

“还没有。但当你看到我传给你的数据分析之后——你会理解为什么我不等那个签名。”

他把扫描结果发过去了。

十三分钟后,NOC的值班主管回拨了电话。他的声音比之前低了一个八度:“你这东西哪儿来的?”

“我自己查的。”

“塞拉斯,这个——这个扫描工具——它不在标准安全工具集里。你用了什么协议路径拿到这些日志的?”

“你不需——”

“我需要知道,因为如果这个东西的来源有任何合规瑕疵,它就不能作为启动A3的依据。”

塞拉斯在电话线的那一端沉默了。他不能用那条后门通道——那条通道本身不合法,至少不符合星链的内部操作规范。如果他暴露了它的存在,米兰——米兰一定会利用这个来反制他。

他没有A3级程序的启动依据。

但他在二十一分钟之后找到了另一条路径。

他的团队在分析数据天堂的扩散模式时发现了一个特征:被感染的卫星在路由宣告的时间戳上呈现出一个极其细微的规律性——约2.37秒的间隔。不像是人的操作,更像是一个自动化的扩散程序在按预设节奏执行。

“程序化。“塞拉斯在团队通讯频道中重复了这个词。程序化意味着可预测。可预测意味着它可以被反向建模——他们可以在扩散程序的下一个目标卫星之前,提前在那颗卫星上创建一条虚假的影子条目来占据地址空间,制造逻辑冲突,让扩散程序在目标卫星上执行失败。

这不是清洗——是一种精确的反制。不是清除数据天堂,是在数据天堂的扩张路径上设置障碍,让它无法继续增长。像一个在入侵者必经之路上提前挖好陷阱的守城者。

塞拉斯下令:启动”镜像填充”战术。亚太安全中心的团队在接下来的四十分钟内生成了数百条伪造的影子条目,赶在数据天堂的扩散指令到达之前,在未被感染的卫星上预占了地址空间。

结果在测试开始后的第七分钟就显现了。

陆远看到法尔汉的终端上弹出了第一条失败日志时,他只是皱了一下眉。法尔汉没有皱眉——他直接调出了失败的具体诊断信息。几秒钟后,他的下颌肌肉收紧了一下。

“他们在我们到达之前预先占用了目标地址空间。“他说,声音平稳但语速比平时快了大约百分之十——一个只有陆远能识别的压力信号。“不是随机占用——每个被占用的地址正好是我们扩散程序下一步要宣告的那一个。他们在预测我们的路由选择算法。”

陆远没有说话。他看着屏幕上的失败日志一行接一行地增加,像一条正在被逐步截断的河流。

“这不可能——我们的扩散算法使用伪随机选择器,种子来自卫星环境噪声的哈希值。他们不可能预测——”

法尔汉停住了。

他想到了。

“他们不需要预测算法——“他说,声音里有一种缓慢的、像重物正在下沉的感觉。“他们只需要监控我们的握手时间戳。我们每次路由宣告之间的间隔是2.37秒——太规律了。他们只需要知道我们会在下一个2.37秒之后向哪颗卫星发送宣告,然后提前——”

他没有说完。但他已经在改正了。他的手指在键盘上移动,正在修改扩散程序中的时间抖动算法——将固定的2.37秒间隔替换为从环境温度传感器读数中提取的随机抖动值。

但在他完成修改之前,屏幕上又出现了新的失败。“镜像填充”的速度太快了——塞拉斯的团队已经建立了一个自动化的反制流水线:检测到数据天堂的扩散模式、预测下一个目标、预占地址空间、封锁路径。每一步都在自动化循环中完成,不需要人工干预。

数据天堂的扩张在十分钟内从指数级增长降到了几乎停滞。它没有缩小——被占用的空间不能被清除——但它停止了增长。那颗正在扩散的种子,遇到了它无法穿透的土壤。

法尔汉完成了抖动算法的修改,重新启动了扩散程序。新的路由宣告开始以不规则的时间间隔发出。但塞拉斯的反制系统只用了大约两个周期就适应了——它的机器学习模型在观察到几个不规则样本之后,重新识别出了抖动的统计特征,回到了预占模式。

扩张又停了。

法尔汉把手指从键盘上移开。

他坐在终端的荧光前,屏幕上的日志已经沉默了将近三十秒。没有新的成功,也没有新的失败——只是停滞,像是两个棋手在同一个棋盘上同时停住了手,盯着面前的局面,各自在重新计算后面的步子。

“他堵住了我们的路。“法尔汉说。

“塞拉斯。”

“塞拉斯。”

他们在文字中沉默了大约两拍。

然后陆远开口了:“那就不扩张了。固化我们已经拿到的部分。”

法尔汉看着他。不是不赞同——是一种在评估这个方案的风险和可行性的表情。

“固化意味着我们要从主动扩张切换到被动防御。“法尔汉说,手指在触控板上滑动,调出了一个新窗口,上面显示着数据天堂当前的所有被感染节点的分布图。“塞拉斯现在可以预测我们的扩张路径。但他无法追踪我们已经建立的影子条目——因为那些条目在他开始监控之前就已经存在了。他不知道我们占据了哪些卫星。”

“他可以用地毯式扫描来找我们。”

“可以。但地毯式扫描对整个星链网络做路由审计——十二万颗卫星,每颗卫星需要几十秒到几分钟不等——完整扫一遍需要大约一周。而且扫描本身会产生大量流量,会干扰正常的通信。他不敢轻易做。“法尔汉停了一下,“但米兰可以让他做。”

陆远知道法尔汉在说什么。米兰是首席架构师。米兰有权力命令一个全局路由审计。米兰刚刚打开了他的后门——但他们不知道他现在会做什么选择。他会保护这个刚出生的自治域,还是会把它当作一个需要被修复的错误而清除?

他们没有答案。

他们只能等。

并且在那之前,做他们能做的事。法尔汉开始部署固化的第四阶段——不是扩张,是隐藏。他修改了所有被感染的卫星上影子条目的特征,让它们更难被常规扫描发现。像一群在森林中停止移动的动物,压低身体,让皮毛的颜色融入地面的落叶和泥土,等待着掠食者从它们头顶走过而没有发现它们。


星链的高层紧急会议是在数据天堂诞生后的第二十二小时召开的。

会议是在旧金山总部的二十八层会议室中举行的。长会议桌的桌面是哑光黑色的合成石材,在偏冷的LED照明下呈现出一种深灰色的质感。桌面上每隔一段距离嵌着一个触控屏接口,但此刻所有屏幕都处于待机状态——会议主持人还没有启动共享议程。

在场的人不多:CEO马克·霍洛维茨(通过全息投影从新加坡接入,他的影像在会议桌的远端呈现出一种微微透明的质感)、首席技术官艾琳娜·沃斯、首席法律顾问罗伯特·麦卡利斯特、亚太安全总监塞拉斯·陈(同样通过加密线路接入,但选择了纯音频,屏幕上只有他的名字和一个标识他正在发言的绿色小点)、以及米兰·沃伊诺维奇。

米兰坐在会议桌靠中间的位置。他没有带任何终端,没有打开面前的触控屏。他面前只放着一杯水——水杯在哑光黑色的桌面上映出一个模糊的倒影。他穿着平常那件深灰色的西装外套,没有打领带,衬衫最上面的扣子是解开的。

时间已经过了午夜。

CEO的全息影像先开口了,没有寒暄。

“米兰。塞拉斯报告说他发现了网络中的一个异常。他要求启动全局路由清洗。我需要听你的意见。”

米兰没有说话。

塞拉斯的音频线路上传来一声轻微的呼吸声,像是一个人正在压制某种情绪的释放。“这不是一个’异常’,是一个正在扩张的未授权网络空间。我已经确认了至少三个轨道面存在被感染的卫星。它使用合法签名伪造路由宣告——这说明有内部人员泄露了签名密钥。”

他说最后那句话的时候,语调没有明显的变化。但坐在会议室中的人都知道他在暗示的方向。

米兰依然没有说话。

“米兰。“CEO的声音。“你知道这件事吗?”

这个问题的重量,在会议室中沉降了三秒。

米兰端起水杯,喝了一口。放回桌上。然后他开口了。他的声音不大,但在凌晨的会议室中,在一个所有声音都被安静放大到极限的环境中,每一个字都像石块入水。

“我知道。”

塞拉斯的音频线路中传来一阵短暂的、被电流声掩盖的沉默——然后是:“你知道?”

“我知道。”

“你一直——”

“我知道它什么时候诞生的。我知道它怎么诞生的。我知道它的代码是谁写的。我知道用在它上面的那一套签名密钥是怎么来的。”

米兰说这些话的时候,目光没有回避任何人的视线。他看向CEO的全息影像,又看向塞拉斯的名字标签所在的方向。他不需要看到塞拉斯的脸来知道他此刻的表情——他能从那条音频线路中极其微弱的呼吸节奏变化,读取塞拉斯的心理状态。

“米兰。“CEO的声音出现了变化——不是愤怒,是一种更谨慎的东西。“你是说你——”

“我没有设计它。我没有参与它的执行。但我没有阻止它。”

这句话像一根针,在会议室中刺破了一个微妙的气压平衡。

“米兰——”

“听我说完。“米兰的声调没有升高,但有一种力量从他的声音中渗透出来,让在场的所有人都闭上了嘴。“这个自治域的存在,不是星链的安全失败——是星链的系统架构在它当前限制下产生的自然产物。当我设计星链的核心路由协议时,我考虑过这种攻击向量。我留了一个后门来追踪它。那个后门在我这里——一直在我这里。”

CEO的全息影像在会议桌的远端一动不动,像一尊被光雕刻出来的半透明雕像。“那个后门——你是在告诉我们,你故意让这个攻击成功,因为你有一个后门来控制它?”

“我说我没有阻止它,是因为我需要观察它。看看它能走多远。看看它背后的团队能做到什么程度。看看——“米兰停顿了一下。在停顿的那半秒钟里,他眼中闪过一丝极其微小的、如果不是仔细看就会被完全忽略的疲惫——“——看看它是否真的有潜力成为这个系统需要的那种压力。”

会议室中没有人说话。塞拉斯的名字标签旁边的绿色小点始终亮着——他正在连接中,但他没有发言。

罗伯特·麦卡利斯特——首席法律顾问——是第二个发言的人,声音低沉但清晰:“米兰,你可能刚刚承认了严重违反内部安全协议的——”

“法律问题可以之后谈。“CEO打断了麦卡利斯特,他的视线——即使通过全息投影的转播——仍然锁定在米兰身上。“现在的问题是:这个东西在扩张。塞拉斯要求启动全局路由清洗。米兰,你的方案是什么?”

米兰没有立刻回答。他低头看着桌面上那杯水的倒影,像在寻找一段精确到每个词都不会错位的表述。他抬起头时,脸上的表情有一种罕见的、不加修饰的坦诚——不是他在会议上常用的那种经过控制的姿态,是一个人在已经做出了某种内部决定之后的平静。

“全局路由清洗不会起作用。“他说。

塞拉斯的声音几乎是同时响起的——“你凭什么——”

“因为它已经被感染了。“米兰的声音依然平稳,像在一场辩论中陈述一个他早已准备好的事实。“在过去的二十二小时里,数据天堂的自治域已经扩展到了大约三个轨道面、四百到六百颗卫星的规模。你可以在NOC启动全局清洗,将所有非标准路由的数据包标记并丢弃——但你标记的每一个数据包,都会在卫星的CPU上消耗额外的处理周期。如果你启动清洗,四百颗被感染的卫星会在接下来的几分钟内产生大量的错误处理请求,造成路由表锁定。三千颗。然后是两万颗。最终——整个网络会在链路拥塞中自我瘫痪。”

塞拉斯说:“我们可以分轨道面逐次清洗,先隔离——”

“隔离的前提是我们能准确知道哪些卫星被感染了。你不知道。我也不知道——因为那个自治域在二十二小时内已经学会了改变它的路由宣告模式。它现在使用的时间抖动算法让它变得不可预测。”

塞拉斯沉默了。他无法反驳,因为他自己也在追踪过程中观察到了那种抖动——他以为他的反制系统已经适应了它,但米兰现在说那只是数据天堂的第一层变化。它还有更多的。

CEO的影像微微前倾——一个在全息投影中看起来像是整个上半身向会议桌中心靠近了一点的动作。“你的建议是——不动它?”

“我的建议是不用全局清洗。但我们可以限制它。“米兰打开了他面前的触控屏——他之前没有连接任何设备,现在他把一台终端接入了一个外部接口。屏幕上显示着星链网络拓扑的一个特定视图——不是全局图,不是安全态势图,是一张路由表的逻辑架构图。他用手势放大了其中的一个部分。

“数据天堂的扩张原理是利用星链的BGP路由宣告机制来创建未被记录的地址空间。但BGP路由表的结构有一个硬上限——每条路由前缀的位数决定了它可以宣告的最大地址块数量。在我们的架构中,地址空间的分配是以/30为最小单位的。整个星链网络的私有地址空间被划分为大约两百三十万个/30区块。”

他停了一下,让这个数字沉入听众的意识中。

“其中大约两百二十万块已经被分配给了合法用途。剩下的几万块——是预留的、未分配的、位于地址池边缘的碎片空间。数据天堂可以利用的空间,极限是这些碎片空间的总和加上少数可以从不活跃区域回收的空间——加起来最多不超过星链总地址容量的2.37%。这是一个由路由表架构决定的硬上限。不管数据天堂的代码怎么写、怎么扩散,它的物理极限就在那里。它占不满剩下的百分之九十七。容不下。”

会议室中沉默了片刻。

艾琳娜·沃斯——沉默到现在的CTO——用她一贯的平稳语气说:“你有数据支持这个2.37%?”

米兰在触控屏上调出了一组计算。不是临时准备的——是他在数据天堂诞生后的头几个小时里已经算好的。他把结果投射到了会议室的主屏幕上。

“地址碎片空间的完整分布表,加上路由表架构中的前缀长度限制,得出的最大值。我计算了三次,每次结果都是一样的。浮动范围不超过0.02个百分点。”

艾琳娜看完了那些数据。她没有再提问。

CEO的全息影像在那组数字前面停留了很长时间,像是在用自己的判断力逐一验证米兰的计算结果。会议室中只能听到空调系统和散热风扇的低频嗡鸣声。

“所以你的方案是——什么都不做?”

“不。“米兰说。他第一次在会议中使用了一个比平时更重的字音,像是需要确保这个字不会被误解。“我的方案是:不清洗。不关闭。不做任何试图清除它的操作。我们让那个自治域继续存在——但它不会超过2.37%。它会被锁在那块碎片空间中。而剩下的百分之九十七——还是我们的。”

“你的意思是——给它一个缓冲区。“CEO的声音。

“给它一个缓冲区。“米兰重复了一遍。“它不会消失。但它也不会长大。它会在那个笼子里安静地待着。与此同时,我们可以通过接下来的固件更新,修补BGP宣告验证的漏洞,让它永远无法突破那个上限。”

“不——“塞拉斯的声音从音频线路中切断般地插入。他的声音使会议室中本来就紧张的气氛变得更加紧绷——那是一种被强行压缩在礼貌外壳下的爆发。

“米兰,你在给我们讲一个完美的数学解决方案,但你忽略了一件事——这个自治域的存在本身就是违法的。它不是星链的合法服务的一部分。它在逃税。”

“塞拉斯——”

“它在逃税。逃税意味着星链的股东会看到他们的收入模型被一个在系统内部寄生而不付费的飞地侵蚀。逃税意味着其他用户会问:为什么他们不需要付钱而我要付?逃税意味着——”

“塞拉斯。“CEO的声音切断了塞拉斯的语流。不是高声的制止——是一种在极低的音量下带着不可反驳的分量的话语,CEO在多年的管理经验中练就的、用最小的声压传递最大的制止力的能力。

米兰没有等CEO继续。他接过话头,视线看向塞拉斯的名字标签的方向——虽然他知道塞拉斯看不到他的眼睛。

“关闭全球星链网络三十分钟,对所有卫星进行固件重置——这是你的计划,对吧?”

塞拉斯没有回答。他的沉默本身就是一个回答。

米兰把目光转向CEO的全息影像。“让我问你一个问题:如果我们在没有准备的情况下关闭全球星链网络三十分钟——你知道这意味着什么吗?”

米兰没有等回答,但他也没有用质问的语气。他接下来的话像是一个人计算了很多次之后得出的结论,而不是为了赢得辩论而临时组织的论点:

“全球大约有二十一万台手术依赖星链的远程医疗链路。其中超过六千台是在任何时刻都在进行的实时手术——机器人在动,专家的手在操控杆上。断连意味着那些手术中的自主系统会从辅助模式切换到完全自主模式。大部分情况下,自主系统能维持。但不是所有情况。”

他停了一下。没有人接话。

“全球金融系统:约百分之八十以上的高频交易依赖星链的时间戳同步。三十分钟的断连不会让金融市场崩溃——但它会让所有交易记录的时间基准产生偏移,需要至少两周的数据重建和争议处理。”

“全球电网:超过六十个国家的电网监控系统使用星链作为主要的备用通信链路。如果在断连期间出现任何需要协调的电网故障——没有备用通信手段的国家可能会面临局部停电。”

“全球航空:每天约十万架次航班使用星链进行通信和导航辅助。三十分钟断连——大部分航班可以依靠机载备用系统。但那些正在使用星链进行精密进近引导的航班——”

米兰停顿了一下。他不需要继续说下去。所有人都知道那些数字背后的重量。

“关闭三十分钟不是修复问题。“他说出了最后一句话——这句话的声音不高,但它是整场会议中声音最重的一句话。“是制造灾难。”

CEO的全息影像已经将近十秒钟没有任何动作。不是信号延迟——是在思考。米兰可以看到CEO的脸部肌肉在面部表皮下面极其微小的移动,那是他在做重大决策之前特有的无意识动作——像一台计算机在提交关键运算之前,正在进行最后的内部校验。

他开口了。声音比之前低了一些,像是一个人在走完一条很长的走廊之后,终于抵达了终点时说的那种话:

“米兰的方案——不清洗,不关闭,不采取任何可能导致网络大规模中断的主动清除措施。给那个自治域一个缓冲区。评估其影响,然后在下一次股东会议上报告。”

塞拉斯的声音几乎是同时响起的——“我抗议——”

“记录在案。”

“马克——这个决定——”

“记录在案。“CEO重复了一遍,语气没有任何商量的余地。“塞拉斯,我不是在忽略你的担忧。但米兰的数字是正确的。如果全局清洗导致连锁瘫痪——那不是清理一个漏洞的成本,是在漏洞周围制造一场火灾的成本。我不会冒这个风险。”

塞拉斯没有说话。他的音频线路仍然显示连接状态,但那个绿色的标识没有说话。米兰可以从那条线路中极其微弱的呼吸声音中,听到一种他没有在任何人面前表现出来——但在那条只有声音的线路中无法完全隐藏——的情绪。

不是愤怒。是被压制了太久之后,终于意识到自己不会在这张桌子上获胜的认知。

米兰没有追击。

他拿起面前的水杯,喝了一口。水已经凉了,和他的声带温度大致相同。他把杯子放回桌上,听着CEO继续分配接下来的行动项——监视自治域的扩张状态、评估其经济影响、在下一版固件中加强路由宣告验证。标准流程。标准话术。标准的”在问题被确认之后按流程处理”的会议文体。

但米兰知道一件事。在整个会议过程中,他一直在注意一个他没有在会议上提到的事实——一个他无法在会议桌上摆出来的事实。

他的计算中,2.37%的上限是基于一个前提:数据天堂只使用被动的BGP宣告扩展地址空间。但法尔汉——那个他一直在暗中观察的年轻天才——已经设计出了第三阶段的感染向量。米兰在数据天堂的自治域日志中看到了那段代码的影子。不是完整的代码,是指令模式的预告。

第三阶段不是通过BGP宣告来扩张。是通过星链卫星之间的激光链路握手协议——通过将SkyWalker的控制代码嵌入握手确认帧的填充字段——来感染。

如果法尔汉部署了第三阶段,2.37%的上限将不再适用。不是因为路由表的物理架构被改变了——而是因为地址空间的定义方式被改变了。不是突破房间的墙壁——是重新定义房间的尺寸。

米兰没有在会议上说这些。

因为如果他说了,CEO会覆盖他的方案,启动全局清洗。清洗会引发连锁瘫痪。连锁瘫痪会杀人。六千台手术中的某些一台——可能就会是陆远女儿的那一台。

米兰在会议上没有站在星链一边。

他没有站在数据天堂一边。

他站在了那六千台手术中的某一台——他不知道自己具体是指哪一台,但此刻在深圳某间医院里亮起的手术灯——那盏灯正亮着的、正在被一个远程操控信号的链路维持着的光——的那一盏灯的一边。

会议在凌晨两点十七分结束了。CEO的全息影像在会议桌的远端淡出,像是从一个正在退潮的海滩上收回的水线。其他参会者的连接也逐一断开——艾琳娜·沃斯先退,然后是麦卡利斯特,最后是塞拉斯。塞拉斯在断开连接之前没有说话,甚至没有留下一句礼貌性的告别语。他的绿色标识在屏幕的参与者列表中多停留了几秒钟,像一盏在其他人离开后还亮着的灯,然后也灭了。

米兰没有立刻离开会议室。

他坐在哑光黑色的会议桌前,在空荡荡的房间中,让自己在那盏只有他一个人的灯光下又多停留了大约两分钟。他面前的触控屏仍然亮着,显示着那张星链路由表的逻辑架构图。在那张图上,那些被标记为”未分配”的地址碎片以极其微小的浅灰色色块分布在整张图的边缘地带。它们很小。很小。加在一起只占总面积的2.37%。但它们存在。

在他视野的上方——在窗户的方向——旧金山的城市灯光透过玻璃映照进来,被百叶窗的叶片切割成一道道平行的光带,投在天花板和对面墙壁上。凌晨的城市已经安静下来了。

米兰关掉了触控屏的电源。屏幕从亮蓝色渐变为黑色。在那块深色的玻璃面板反射出的他自己的面孔中,他看到的不是一个胜利者——不是一个做出了正确决定的人——只是一个在一场没有完美答案的选项中,选择了最小伤害的那一个的人。

他站起来,走出了会议室。

走廊很安静。他的脚步在地板上发出均匀的声音,像一个正在离开某个他不确定自己应该走到的地方的人。在他的身后,会议桌面上那杯没有喝完的水,在空无一人的房间中保持着一动不动的姿态,像一枚被遗留在谈判桌上的、没有任何人打算签署的文件。

停火协议。

不是和平。不是胜利。

是一个没有人在上面签字的停火协议。

但它生效了。

至少,在接下来的几十个小时内,深圳某间手术室上方的星链信号——那根从欧洲专家的终端出发、穿过十二万颗卫星之间的激光链路和路由表、最终抵达一间手术室的远程操控台的数字脐带——不会被主动切断。

米兰走进电梯的时候,终于允许自己闭上了眼睛。

在闭合的眼睑后面,他看到的是不是那些路由表的地址碎片,也不是那些被感染的卫星的编号。他看到的是一盏他从未见过的、在某个他不知道具体位置的手术室上方亮着的灯。

那盏灯还在亮着。

这是他现在唯一能确认的事。

微信公众号二维码

扫码关注微信公众号
阅读更多独家内容