第9章 · SkyWalker协议
他们在数据党的地下基地里待了十七天。
十七天里陆远只上过三次地面。第一次是法尔汉带他去弄一台旧的星链地面站终端,第二次是去一家不用身份登记的诊所给女儿做复查,第三次是半夜去楼顶抽烟——他不抽烟,但那天晚上他需要站在能看到天空的地方想事情。头顶上的星链卫星每隔七分钟就有一颗从深圳的天幕上划过,像一群不知疲倦的牧羊犬在巡视栅栏。
女儿适应得比他快。子衿在那个法拉第笼环绕的地下空间里找到了自己的领地——法尔汉不知道从哪里弄来了一块旧的数位板和一支压感笔,她蹲在角落的地上画画。她画蝴蝶,画花,画爸爸牵着一个穿裙子的小人站在绿色的草坪上。有时候她会走到那个巨大的星链拓扑图前面,仰头看那些不断变化的彩色线条。她看不懂那些数据流的含义,但她觉得它们好看。
第十七天的晚上,法尔汉来到陆远的笼子前,敲了敲金属边框。
“给你看个东西。”
法尔汉带他穿过基地最深处的走廊。走廊尽头是一扇厚重的气密门——不是那种普通的数据中心防火门,是一扇真正的气密门,带有旋转手柄和橡胶密封圈,看起来像从某种工业设施上拆下来重新安装的。法尔汉转动手柄的时候,陆远能听到门框周围的密封条重新贴合时发出的嘶嘶声。
门后是一个很小的房间,大约二十平方米,但层高惊人——至少有五米。房间中央悬浮着一颗全息投影,尺寸比外面那块主屏幕上的星链拓扑图大得多,也精细得多。那是星链的七层协议架构,从最底层的物理层一直到最顶层的应用层,每一层都被渲染成不同颜色的半透明结构,像一座倒悬的数据巴别塔。
陆远见过星链公开的白皮书里的协议栈示意图——那些图表工整、简洁,像是教科书上的完美范例。但他面前这个全息图不是那种经过审阅的公开版本。这是从星链内部网络中实时捕获的真实协议栈映像,包含了所有未公开的私有层、调试接口、和后门通道。
“这是我在贝尔格莱德那两年画出来的。“法尔汉站在全息图的边缘,蓝光映在他的脸上,让他的表情看起来比平时更冷,“从星链欧洲核心网的协议日志里逆向出来的。大部分工作是在我公寓的洗手间里做的——因为我租的那间公寓的卧室有星链的环境麦克风,唯独洗手间不在监听范围内。”
他用手在全息图中划过,其中一层被放大——那是网络层和传输层之间的一个区域,标着浅蓝色的标签:QKD信道·元数据区。
“你之前问过SkyWalker的基础原理,“法尔汉说,“现在我给你看答案。”
全息图进一步放大,QKD信道的内部结构像一朵被层层剥开的花。陆远看到了光子级联检测器的信号路径、纠缠光子源的时序发生器、以及——法尔汉手指指向的那个区域——一个标着”时间戳抖动缓冲器”的模块。
“星链的卫星间通信使用量子密钥分发来协商对称加密密钥。过程是这样的:两颗卫星各自产生纠缠光子对,然后对光子进行贝尔态测量,通过对比测量结果来生成共享密钥。“法尔汉的声音在狭小的房间里回荡,带着一种他很少流露的专注——像一个匠人在展示他打磨了多年的作品,“但在这个过程的底层,有一个被星链工程师认为是’噪声’的副产品。”
他调出了一组数据图表。那是一串光子到达时间差的分布曲线——理论上应该是完美的正态分布,中心值对称,两侧平滑递减。但法尔汉把曲线放大了一千倍之后,陆远看到了分布曲线上极其微小的、周期性的波纹——这些波纹的幅度小到几乎淹没在统计噪声中,但它们确实存在,而且呈现出某种规律性。
“这是物理不可克隆函数的自然产物。“法尔汉说,“每一颗星链卫星的激光器都有独一无二的相位噪声特征——制造公差、材料应力、老化速率的差异决定了每一颗激光器都是不同的个体。这种相位噪声会体现在光子到达时间差上。星链的系统知道这个噪声存在,但认为它是不携带任何信息的随机抖动,所以在元数据区把它原样记录,不做加密,不计费。”
陆远盯着那些波纹看了很久。法尔汉不再说话,让他自己消化。
他理解了。或者说,他的工程直觉已经先于他的理智抓住了那个核心逻辑。
“你可以调制这个噪声。“他说。
“用对激光器驱动电流的微调来主动控制相位噪声的波形,“法尔汉接上了他的话,“让原本随机的抖动变成可控制的抖动。不是把数据编码在信号里——是把数据编码在噪声里。”
“速率呢?”
“理论极限大约是每秒一点二比特。实际稳定传输速率约每秒一比特。”
每秒一比特。发送一个字节需要八秒钟。发送一句”Hello”需要将近一分钟。但发送一个加密密钥——256位的AES密钥——只需要四分多钟。发送一条指令、一组坐标、一个认证令牌——这些都不需要很大的数据量。
“SkyWalker不做星链做的事,“法尔汉说,“SkyWalker做星链不做的事。”
他调出了一张新的全息图——这一次不再是协议栈的内部结构,而是一张全球地图,上面标记着密密麻麻的点和线。那些线不是公开的星间激光链路,而是一条完全不同路径的网络——从深圳出发,经过一颗低轨卫星的QKD信道,嵌入到光子到达时间差的抖动中,然后通过星链的星间链路跳转到另一颗卫星,最后下行到非洲西海岸的一个地面站——拉各斯。
“你的数据包从进入QKD信道到被接收端提取,全程不被星链的计费系统看见。因为在你看来,你传输的是数据;但在星链看来,你只是给这个数据包披了一件噪声的外衣——而噪声是不收费的。”
陆远的手指在空中划过那些光点构成的路径。从深圳到拉各斯,跨越一万两千公里。在普通网络上,这个距离的延迟是一百毫秒左右。在SkyWalker上——由于那每秒一比特的极低速率——传输一个标准的IP数据包需要大约几十秒。但它不会被征税。不会被审查。不会被切断。
“但有一个问题,“法尔汉说,他的声音重新变得平淡,但陆远注意到他放在身侧的左手手指在轻微敲击裤缝——一种他只有在紧张时才会做的动作,“信号太弱了。”
他调出了另一组数据:频谱分析图。SkyWalker信号——即被调制的QKD相位噪声——在星链的底层信号处理芯片中经过了一连串的降噪算法。陆远看着那组滤波器响应曲线,很快就明白了症结所在。
“星链的降噪算法是基于统计预测的。“陆远说,他不需要法尔汉解释,“它知道QKD信道的本底噪声特征是什么,然后在接收端用自适应滤波器把那些噪声减去。你的调制信号——即使幅度很小——也会被减法滤波器当成噪声的一部分一并消除。”
“对。我试了四种不同的调制策略——幅值调制、相位调制、时序调制、甚至是基于量子态的偏振调制——全部被降噪算法在接收端中和掉了。降噪算法像一个太勤快的清洁工,把你精心布置的信标当灰尘擦掉了。”
法尔汉关掉了全息图。房间暗下来,只剩下一盏应急灯在墙角投下昏黄的光。他站在那盏灯的边缘,表情在明暗之间半隐半现。
“SkyWalker目前是一个理论上可行、工程上被堵死的协议。我们有一条路,但路中间有一堵墙。”
他们回到主基地的时候,子衿已经趴在角落的垫子上睡着了。她的小手紧紧攥着那支压感笔,屏幕上的画还没完成——一只蓝色蝴蝶,翅膀上的花纹画了一半。陆远蹲下来把笔从她手里轻轻抽出来,把薄毯盖到她身上。动作很小,但女儿还是微微睁了一下眼,看了他一眼——确认他在——然后又闭上了。
他站起来的时候,脑子里还在转着那个问题。
降噪算法。信号太弱。聪明过头的清洁工。
他拿起一块空白的数位板——不是女儿画画的那块——用手指在上面无意识地画着滤波器的频率响应曲线。法尔汉在他旁边的工位上调试代码,键盘声急促而规律。整个基地里只有键盘声、风扇声、和偶尔有人起身时椅子轮子碾过水泥地面的声音。
陆远盯着那条曲线,忽然想起了什么。
在华为201所的时候,他们做过一个实验——关于自适应噪声消除的极限测试。项目组里有一个比他大三届的师兄,姓林,在降噪算法上钻得很深。林师兄曾经说过一句话,当时大家都没太在意,但此刻它像一颗沉在水底多年的石子,忽然浮出了水面:
“噪声消除最怕的不是信号太弱——是信号太干净。”
陆远的手停住了。
他重新在脑海中跑了一遍星链降噪算法的逻辑。基础假设:QKD信道的本底噪声具有特定的统计分布——高斯白噪声,均值为零,方差稳定。算法用一段滑动时间窗内的噪声样本来估计当前时刻的噪声特征,然后从接收信号中减去这个估计值。
但——如果算法收到的”噪声样本”不是真正的噪声呢?
如果SkyWalker不是增加信号——而是制造空洞呢?
在星链预期有噪声的地方——在那些光子到达时间差原本应该抖动的地方——人为地制造一个没有抖动的间隙。不是把信号加进噪声里,而是从噪声里拿走一些东西。那些”被拿走的噪声”——那些预期中的抖动消失留下的小小空洞——就是信号。
因为降噪算法的逻辑基础是”去除噪声”。而噪声的缺失——一个原本应该有噪声、现在却没有噪声的时间窗口——在算法的逻辑框架里根本就不存在。它不会去除”不存在的东西”。它只会放行。
信号不是你说了什么。是你选择不在什么时候说什么。
陆远转身走向法尔汉的工位。他走得太快,踢到了一个地上的电源插排,但他没有停下来。
“法尔汉。”
法尔汉从屏幕上抬起头。
“如果SkyWalker不是一种信号——而是一种签名呢?”
法尔汉挑了挑眉。
陆远没有等他回答,直接伸手在法尔汉的键盘上调出了一个空白的终端窗口。他快速敲了几行伪代码——他不想浪费时间在语法上,只想表达核心逻辑:
// 传统思路:在噪声中嵌入信号
发送端:full_noise(t) + modulated_signal(t) → 接收端
// 问题:降噪算法会滤除modulated_signal(t)
// 新思路:在噪声中制造空洞
发送端:full_noise(t) - delta_noise(t) → 接收端
// 洞本身不是信号——但洞的模式是信号
// 降噪算法看到:"噪声变少了"——这不触发它的清洗逻辑
// 因为降噪算法只关心噪声是否被去除,不关心噪声是否出现空洞
他敲完最后一行,转过身。
“星链的降噪算法在每一个时间窗口里都会计算噪声功率的期望值。如果实际噪声功率低于期望——它不会报错,不会干预,因为它认为那是自然波动。但如果实际噪声功率中有一种周期性的、可辨识的下降模式——那个模式可以被用来编码信息。”
法尔汉盯着屏幕上的那几行伪代码,一动不动地看了大概十秒钟。整层楼的噪音——键盘声、风扇声——好像在这十秒里都消失了,只剩下屏幕的微光在他的虹膜上闪烁。
然后他转回身,手指放在键盘上。开始敲代码。
他整整敲了四个小时。
陆远坐在旁边的椅子上,没有打扰他。女儿在角落里翻了一个身,毯子滑落了一半,他走过去重新盖好。中间有人给法尔汉送来一杯茶,他接过来放在手边,没有喝,直到彻底凉透。
凌晨两点四十七分,法尔汉停下手,靠在椅背上,长长地呼了一口气,像是整个人被抽空了一瞬间。
“仿真通过了。“他说,声音沙哑得几乎听不清,“三组不同的QKD信道仿真参数——低轨、中轨、高轨——全部跑通了。降噪算法没有清洗我们制造的空洞信号。因为从算法的角度看,空洞里什么都没有。”
他转过头看着陆远。他的眼眶因为长时间盯着屏幕而充血泛红,但眼神里有一种陆远从未在他脸上见过的东西——不是兴奋,不是狂热,是一种极其克制的、正在努力保持平静的满足感。
“来吧,“法尔汉站起来,“我们去搭建测试环境。”
基地的西南角有一个被改造过的屏蔽室。
屏蔽室原本是这座废弃数据中心的一间小型配电房,法尔汉让人在内壁加装了一层铜网和吸波材料,重新铺设了供电线路,安装了一台二手的星链卫星信号模拟器——一台能完整模拟星链QKD信道物理层特征的设备,是法尔汉从欧洲的一个实验室的报废清单上”捡”回来的。外壳上还贴着那家实验室的资产编号标签,已经被撕掉了一半,剩下的一半上面印着模糊的德语单词。
陆远和法尔汉花了将近三个小时完成了测试环境的搭建和校准。模拟器、调制器、信号采集卡、解码终端——它们在屏蔽室的金属桌上被粗壮的SMA线缆连接起来,像一场精密的连接手术。法尔汉拧接头的时候习惯在最后一圈用扳手再紧半圈,确保接触阻抗最小化。陆远注意到这个细节——这是一个在射频工程里泡了很多年的人才会有的习惯。
“准备好了吗?“法尔汉问。
陆远点头。
法尔汉按下了一个开关。模拟器开始运转——它产生的QKD信道噪声信号通过线缆流入调制器,调制器按照新的算法在噪声中制造空洞。空洞的时序模式被编码器映射成二进制序列:一个短空洞是0,一个长空洞是1;两个空洞之间的间隔决定位边界。
解码终端接收到的信号通过一个软件定义的噪声功率检测器处理——它不提取信号,它只检测”信号何时变得比预期更安静”。那些安静的间隙在屏幕上被绘制成一条起伏的曲线:波峰是正常噪声,波谷是被削去噪声的空洞。波谷的时序排列呈现出一种可辨识的、非随机的模式。
法尔汉在那条曲线上手动标出了第一个解码结果。
比特流显示在屏幕的底部:
01001000 01000101 01001100 01001100 01001111
ASCII转换:H E L L O。
六秒钟。五个字节。每秒不到一个字节。但它做到了——没有触发任何模拟的计费系统,没有被降噪算法清洗,没有在任何一个处理环节留下可追踪的痕迹。噪声中的空洞安静地通过了所有的滤波器,像一群穿过了安检门的透明人。
法尔汉看着那行字母,很久没有说话。
然后他坐在屏蔽室的地板上——直接坐在那布满灰尘的水泥地面上——向后靠着墙,双手垂在膝盖上,闭着眼睛,发出了一声很轻的、几乎听不到的叹息。
“六秒。“他说,“六秒钟传输了五个字节。这是第一个没有被星链征税的数据包。”
他睁开眼看着陆远,嘴角弯了一下——一个极其微小的弧度,但不是笑容。
“很小。但它自由了。”
陆远站在那台解码终端前,屏幕上”H E L L O”那几个字母还在闪烁——解码终端在持续收到相同的信号,因为法尔汉的算法设置了循环发送,那五个字节正一遍又一遍地从调制器出发,经过模拟的QKD信道,穿过降噪算法,抵达解码器。每一次都是同样的结果。每一次都成功。
“Hello”——互联网的婴儿期,1969年10月29日,加州大学洛杉矶分校的计算机向斯坦福研究院发送了第一个数据包,本意是传输”LOGIN”,但系统在传输第三个字母”G”时崩溃了。人类历史上的第一条网络消息只有两个字母:“LO”。
而此刻,在深圳地下二十米的一个废弃数据中心的屏蔽室里,另一个网络发出了它的第一声啼哭。声音很轻。声音很小。但它确实存在。
陆远忽然感到一种不安。
不是来自那个信号本身——信号是对的,测试结果是完美的。法尔汉的设计没有漏洞,他的补充方案也没有漏洞。从物理层到解码层,整个链条在理论上和仿真上都站得住脚。
他感到不安的原因是:太顺利了。
从信号克隆到SkyWalker——每一步都像是有人在前面铺好了路。他掉进坑里,坑里恰好有一扇门。他推开那扇门,门后恰好是一条通道。通道恰好通向一个可以逃生的出口。
他看了一眼法尔汉——对方已经从地上站起来,正在检查测试数据,手指在键盘上飞舞,没有注意到陆远的表情。陆远没有说出他的不安。不是不想说,是不知道怎么表达——他手里没有证据,只有一种直觉,像一根针一样扎在他意识深处某根最敏感的神经末梢上。
他用这种直觉的方式想:
米兰·沃伊诺维奇——那个设计了这个系统的人,那个在第一颗星链卫星升空之前就规划好了每一行代码的人——他真的不知道QKD信道的这个漏洞吗?
还是说,这个漏洞本身就是他留在系统里的另一扇门?
一个像米兰那样的人——能在星链的认证系统中埋下一个信号指纹克隆的后门,能在法尔汉面前暴露自己的存在却不采取行动——这样的人,会真的忽略一个像SkyWalker这样明显的设计空白吗?
陆远站在屏蔽室里,头顶是二十米厚的混凝土和泥土,泥土之上是深圳的城市灯火,灯火之上是十二万颗卫星构成的天网。在那张网的某个节点上,也许有一双眼睛正在看着地下深处这个小小的屏蔽室里发出的那五个字母。
H E L L O。
像一个婴儿的第一次啼哭。
也像一个陷阱的第一次闭合。
法尔汉关掉了模拟器,收起线缆,摘下耳机挂在脖子上。他转过身来看着陆远,脸上的表情是那种他很少流露的、接近温暖的东西。
“如果你女儿需要用到高通量通信——比如说远程手术——我们在SkyWalker上再搭建一个算力共享层。让每一个接入SkyWalker的节点贡献自己的闲置计算资源。不需要去抢OrbitNet的算力——我们自己造一个。”
他说得很平静,像在说一个他已经构思了很久的计划。但陆远在他眼底捕捉到了别的东西——不是技术的兴奋,而是某种更深层的、和陆远自己心中那份不安对称的东西。
法尔汉也在怀疑。
但他们都选择了不把那个怀疑说出口。
因为不管米兰·沃伊诺维奇是敌是友,路已经走到这一步了。后退的方向已经被封死。前方的路——无论是通向自由还是陷阱——都必须继续走。
“算力共享层,“陆远重复了一遍这个词,“你想让SkyWalker变成一个分布式的网络?”
“不是我想——是它必须变成那样。只靠QKD信道的那点带宽,SkyWalker传不了大文件,跑不了AI推理。但如果接入SkyWalker的每一台终端——手机、平板、路由器、智能家居设备——都贡献一小部分算力,汇聚起来就是一台分布式的超级计算机。不是OrbitNet那种集中式的庞然大物,而是一台由成千上万个微小的计算碎片拼成的异形机器。”
他停了停。
“一台从不问你要计算什么的机器。一台不会因为你的账户等级不够就拒绝你的请求的机器。一台——”
他找了一个词:
“——不计费的机器。”
陆远看着屏蔽室里那些线缆和设备。他想起女儿那天在医院里看到的高清蝴蝶视频,那些她以前永远加载不出来的图片。如果那种流畅对每个孩子来说都是免费的——不需要铂金账户、不需要每月两万信用点、不需要一个父亲去偷邻居的信号——
那会是另一个世界。
他不知道那个世界能不能建成。但他知道这个世界——头顶被十二万颗卫星严密计费的世界——他不打算让它继续维持下去了。
“回去吧,“他说,“女儿要醒了。”
他们走出屏蔽室的时候,走廊尽头的应急灯在混凝土墙壁上投下长长的影子。法尔汉走在前面,脚步很快,背挺得很直。陆远跟在他身后,左脚踝的旧伤还在隐隐作痛。
在他的口袋里,手机屏幕亮了一下——一条来自未知号码的短信,只有一个字。陆远在走廊里停下脚步,借着应急灯的微光看了一眼。
短信写着:
「快。」
没有发件人。没有上下文。只有一个字。
陆远盯着那个字看了两秒钟,锁上了屏幕,快步跟上了法尔汉。
在走廊尽头的另一边,在那些法拉第笼隔间的深处,五岁的陆子衿趴在一张折叠床上。面前摊着一块旧的数位板,板面上显示着一幅还没画完的画:一只蝴蝶,翅膀上带有电路板纹理的线条。
她用压感笔补上了另一只翅膀,托着下巴看了一会儿。觉得它看起来像一只不需要空气也能飞的东西。
像那些在头顶飞过的星星一样。
她不知道自己为什么会有这种想法。她低下头,继续画第二只蝴蝶。