第4章
加密分区——五年前的未解之谜------------------------------------------“第一课”之后,陆北辰的生活表面上恢复了平静。,他是鹏城云脑运维中心的一名普通工程师——处理工单、巡检机房、参加变更评审会、在工位上吃外卖。晚上,他回到出租屋,打开那台从闲鱼上淘来的二手笔记本,学习Eva通过加密信道发送过来的材料。“朴素”:Eva没有教他任何高大上的AI技术或量子物理,而是让他重新学习Linux内核的`printk`机制。“你能从服务器的崩溃日志里读出多少信息?”Eva在聊天窗口中写道,“大多数运维只会看`Oops`和`panic`,但真正的信息藏在`printk`的缓冲区里——那是一个环形缓冲区,内核在死亡前最后一秒写进去的数据。问题在于,系统崩溃后,这个缓冲区的内容往往无法写入磁盘。你需要学会在系统还活着的时候,就提前读取它。”,写了一个内核模块,可以在系统崩溃时通过NMI(不可屏蔽中断)触发,将`printk`缓冲区的内容通过IPMI的串口重定向发送到远程日志服务器。这个模块后来被他命名为`eulogizer`(悼词记录者)——因为他觉得,这就好比给服务器写悼词。,凑过来问:“你写这个干嘛?我们有kdump,有crash工具,够用了。kdump在有些场景下触发不了,”陆北辰解释,“比如硬盘***卡死、PCIe链路断开。那时候系统还能运行,但日志写不进磁盘。我想加一层硬件层面的保障。”:“你这是过度工程。不过代码写得不错——至少比你的PPT强。”,这个模块的真正目的不是为了常规故障排查,而是为了捕捉那些“幽灵数据包”和“硬盘服务区消息”的来源。Eva暗示过,那些消息是通过内核的一个隐藏通道注入的,而那个通道的足迹会出现在`printk`缓冲区的最深处。,他什么也没捕捉到。,因为他手里还有另一条线索——那块从RACK-042取出的、服务区里藏着“Hello from the future”的硬盘。。,才从工具包里取出那块硬盘。硬盘是希捷银河4T*,生产日期2019年3月,标签上写着资产编号和机柜位,还有一个手写的“X”标记,可能是以前某个工程师做的记号。
他用SATA转U**线将硬盘接到自己的工位电脑上。系统自动挂载了三个分区——一个ext4的/*oot分区,一个LVM卷组(里面是用户数据),还有一个未知分区。`fdisk -l`显示:
```
Device Start End Sectors Size Type
/dev/sd*1 2048 1050623 1048576 512M Linux filesystem
/dev/sd*2 1050624 3907029167 3905978544 1.8T Linux LVM
/dev/sd*3 3907029168 7814037167 3907008000 1.8T unknown
```
第三个分区没有文件系统类型,`pid`返回空。但`cryptsetup luksDump /dev/sd*3`显示这是一个LUKS加密分区,版本1,使用了aes-xts-plain64加密算法,密钥长度512位。
他尝试了几个常用密码——`123456`、`password`、`admin`、`pengcheng`——全部失败。他甚至尝试了“20291231”,也不行。
“需要****。”他自言自语。
但****一个LUKS分区是不现实的——P*KDF2密钥派生函数会故意让每一次尝试耗时0.1秒以上,一套rockyou字典跑完需要几个月。
他正准备放弃,姜一舟端着一杯咖啡从他身后飘过,眼睛瞟到了屏幕。
“哟,又在搞什么坏事?”她停下脚步,看了一眼`cryptsetup`的输出,“LUKS分区?谁的硬盘?”
“RACK-042换下来的旧盘。”陆北辰没有隐瞒,因为姜一舟已经看过《普罗米修斯计划》文档的一部分,算是半个知情者,“里面可能有一些……历史记录。”
“历史记录?五年前的?”姜一舟放下咖啡,拉过一把椅子坐下,“让我猜猜,你想打开它,但是没密码?”
“对。”
“那你找老钟啊。”姜一舟说,“他手里有全中心所有加密分区的万能密钥。”
陆北辰愣住了:“万能密钥?”
“你不知道?”姜一舟压低声音,“所有用国密算法的设备,在出厂时都会在H**(硬件安全模块)里预置一个‘监管密钥’。这是合规要求,为了应对******。老钟是唯一保管那个H**的人。他可以用那个密钥打开任何用国密**4加密的分区——包括这个。”
“但这个分区是LUKS,用的是AES,***密。”
“LUKS只是壳,算法可以换。”姜一舟拿起那块硬盘翻过来,指着电路板上一个小标签,“你看,这个标签上写着‘**4-256’,说明底层用的是国密芯片。LUKS只是上层接口,实际加密操作是由硬盘自带的国密协处理器完成的。老钟的H**可以生成一个派生密钥,绕过LUKS直接解密。”
陆北辰半信半疑,但他知道姜一舟在加密技术上是专家——她曾经在*lack Hat Asia上做过关于TPM 2.0漏洞的**。
“那我去找老钟。”他说。
“我陪你。”姜一舟站起来,“我也想看看五年前到底藏了什么秘密。”
3
**良的工位在运维中心最角落的位置,和其他人的格子间隔着一道玻璃墙。他的桌上堆满了各种老旧的设备——一台I*M ThinkPad T43(运行着Windows XP)、一个逻辑分析仪、几块裸电路板、以及一个上了锁的木箱。
老钟正拿着一把电烙铁在修一块电源板,看到陆北辰和姜一舟走过来,他摘下老花镜,用袖子擦了擦额头上的汗。
“又出什么事了?”他的声音沙哑,带着浓重的江浙口音。
陆北辰把硬盘放在桌上,简要说明了情况:RACK-042换下的旧盘,有一个加密分区,可能是五年前某个项目的遗留数据,想请钟老帮忙看看能否解密。
**良拿起硬盘,翻来覆去看了几分钟,然后从抽屉里取出一台手持式频谱仪,对着硬盘电路板扫了一遍。他的表情从平静变成了凝重。
“这块盘不是普通的硬盘。”他说,“它里面有一个独立的加密协处理器,型号是HT-2019,是北京一家军工企业的产品。这个协处理器不对外销售,只用于**项目。”
“所以这块盘曾经属于某个**项目?”陆北辰问。
“不一定,”**良说,“也可能是有人自己换的主板。你看,这个硬盘的盘体是希捷的,但电路板不是原装的——螺丝孔位对不上,是用转接板固定上去的。这不是原厂工艺,是手工改的。”
他把硬盘翻过来,指着几个焊点:“你看这些手工焊接的痕迹,技术很好,但毕竟不是机器焊接。做这个改装的人,是个高手。”
“能解密吗?”姜一舟直接问。
**良没有立刻回答。他打开那个上了锁的木箱,里面整整齐齐地放着十几块各种形状的电路板、几个U盘、以及一个巴掌大的银色金属盒子。他取出金属盒子,盒子的侧面有一个指纹识别器和一个RJ45网口。
“这是H**,”他说,“**密码管理局认证的。用它生成一个针对这块硬盘的派生密钥,理论上可以解密。”
他让陆北辰把硬盘接到一台专用的取证电脑上——那是一台运行着定制Linux系统的老式塔式服务器,机箱侧板拆开着,里面插满了各种接口卡。
**良在电脑上敲了一串命令,屏幕上输出了一长串十六进制数字。他将这些数字输入到H**中,然后按下指纹。H**的指示灯从红色变成绿色,然后通过网口向电脑输出了一串256位的密钥。
“把这个密钥作为LUKS的额外密钥槽添加进去,”**良说,“应该就能打开了。”
陆北辰按照他的指示操作,执行`cryptsetup luksAddKey /dev/sd*3 --**ster-key-file=/path/to/key.**n`。系统提示成功。
然后他执行`cryptsetup open /dev/sd*3 secret`——分区被打开了。
/dev/**pper/secret里,有一个文件系统——不是ext4,也不是XFS,而是一个只读的squashfs镜像。挂载后,里面只有一个文件:`project_prometheus.7z`,大小约1.2G*。
“7z压缩包,”姜一舟说,“还有密码。”
陆北辰尝试用LUKS的密码去解压,失败。用那个派生密钥,也不行。他尝试了常见密码——还是不行。
**良凑过来看了一眼,沉思片刻,说:“这个压缩包的密码,可能不是字符串,而是一个硬件状态——比如某块主板的序列号、某个TPM芯片的PCR值。”
“那怎么办?”
“找到这块硬盘原来配对的服务器主板。”**良说,“我查一下资产记录。”
他在自己的老笔记本上打开了一个DOS时代的资产管理软件(界面是蓝色的,用键盘操作),输入RACK-042的机柜号和硬盘序列号。系统返回了一条记录:
```
硬盘序列号: 9WJ2XXXX
所属服务器: SVR-042-07
服务器主板序列号: M*-2019-042-07
资产状态: 已报废
报废日期: 2019年12月31日
存放位置: 旧仓库 *区 货架3
```
2019年12月31日——又是这个日期。
“这块主板没有被销毁,”**良说,“按照流程,报废设备要先消磁再拆解,但这块主板的状态是‘待处理’,也就是说,它现在还在旧仓库里。”
“我要去找它。”陆北辰说。
**良看了他一眼,那眼神里有种说不清的复杂情绪:“行。但我陪你去。旧仓库不是随便能进的,需要高主任的签字。不过——我可以带你从另一个门进去。”
4
旧仓库位于数据中心的*1层,要从运维中心坐货梯下去。**良有一张灰色的门禁卡,可以刷开*1层的防火门,但按公司规定,这张卡的使用记录会被审计。
“所以我一般都是晚上去。”**良说,脸上的皱纹在走廊昏暗的灯光下显得更深了。
他们走进货梯,**良按下*1按钮。电梯缓慢下降,钢缆发出低沉的嗡嗡声。姜一舟站在陆北辰身边,手里紧紧握着那块硬盘,像是怕它突然飞走。
电梯门打开,是一条长长的走廊,两侧是灰色的防火门,每隔十米有一盏日光灯,但有一半已经不亮了,剩下的也在不停地闪烁。
**良带着他们走到第三扇门前,用灰色门禁卡刷了一下,门锁发出“咔哒”一声。他推开门,一股潮湿发霉的气味扑面而来。
旧仓库比陆北辰想象的大得多。它不是一个杂物间,而是一个相当于半个足球场的地下空间,天花板很高,堆满了各种淘汰的设备——磁带机、小型机、磁盘阵列、交换机、配电柜。所有的设备都整齐地码放在金属货架上,贴着**的资产标签,上面落着厚厚的灰尘。
**良打着手电,沿着货架之间的通道往里走。他不需要看标签,凭着记忆就找到了*区——货架3。
“SVR-042-07的主板,”他念叨着,在一个货架前停下,用手电扫过一排排主板盒子,“应该在这个位置。”
但那个位置上是一个空盒子。盒子上的标签写着“M*-2019-042-07”,但里面是空的。
“被人拿走了。”**良的声音很平静,但陆北辰能感觉到他的失望。
“谁拿的?”
“只有一个人会拿这种东西——林泽。”**良说,“他当年在报废之前,就来过这个仓库。我后来盘点的时候发现少了几块主板,但没上报。因为我知道,他拿那些东西不是为了偷,而是为了保存什么证据。”
“那林泽现在在哪里?”姜一舟问。
“疗养院。”**良没有多说,但陆北辰想起了之前高振华和老刘提到过的那个名字。
他正要追问,手电的光柱扫过一个角落,照到了一块白色的铁皮柜。柜子表面贴着一张发黄的纸条,上面用红色马克笔写着:“2019.12.31 事故物证 — 勿动”。
“那是什么?”陆北辰指着柜子。
**良的喉咙动了一下,像是吞咽了一口空气。
“林泽的个人物品柜。”他说,“里面的东西,是他在离开前亲手锁进去的。高主任知道这个柜子,但他没有打开过——因为他打不开。这个柜子的锁是林泽自己换的,机械密码锁,不是电子锁。”
陆北辰走过去,蹲下来查看那把锁。是老式的三环密码锁,转盘式,上面有三个数字刻度盘。这种锁的原理是靠三个转盘上的凹槽对齐才能打开,理论上可以****——一个一个试,最多一千种组合。
“你有试过密码吗?”他问。
“试过一些,”**良说,“比如他的生日、工号、1219(12月19日,他的入职日)。都不对。”
陆北辰想起了那些日期——2029年12月31日。他把转盘拨到20-29-12,拉动锁扣,不动。又试29-12-20,不动。31-12-20,也不动。
他深吸一口气,试着换一种思路。林泽是一个技术狂,他可能会用技术相关的数字——比如2的幂次、圆周率、或者某个哈希值。
他试了3-14-15(圆周率π的前几位),不对。试了2-55-35(自然常数e的前几位),不对。
姜一舟在旁边插嘴:“试试那个——那个服务器的编号,RACK-042。04-20-00?不对,是四位数。”
“042是三位数,”陆北辰说,“也许042-042-042?但锁只有三位数字,每个刻度盘是00到99,不是0-99?”
他忽然意识到自己犯了一个错误:这个锁的刻度盘是0-99,不是0-9。这意味着每个位置可以输入00到99之间的两位数。三个位置,从0000到999999?不对,是100万种组合(100^3),不是1000种。他刚才用一位数的思维去试,完全错了。
“这得试到什么时候?”姜一舟叹气。
**良没有催促,只是安静地站在一旁。仓库里的空气很冷,他的呼吸在灯光下凝成白雾。
陆北辰闭上眼睛,试图代入林泽的思维。林泽在离职前锁上这个柜子,把密码存在某个地方——也许存在他自己的记忆里,也许存在某个他信任的人那里。但他知道,他离开后,可能再也没有机会回来了。所以密码一定是他认为“只要了解这个数据中心就能猜到”的东西。
数据中心的标志性数字有哪些?
PUE 1.08?不。
GPU数量?44856?太大了,三位数装不下。
最老的服务器编号?0001?有可能。
但更有可能的是——那个日期,2029年12月31日。用两位数的格式:20-29-12-31,但锁只有三个刻度盘,需要把四个两位数塞进三个位置。可以合并,比如20-29-12和31?不行。
或者用时间戳——Unix时间戳2029年12月31日午夜是1893456000?也太大。
陆北辰忽然灵光一闪:也许不是数字本身,而是数字的某种变换。林泽喜欢用十六进制。
他拿出手机计算器,把31转换成十六进制是1F,29是1D,12是C,20是14。
1F-1D-0C-14?还是四个。
如果只取最后两位?31的十六进制是1F,保留最后一位F?不对。
他想得太复杂了。也许林泽根本没用十六进制,而是用了最直接的方式——将“2029-12-31”中的数字两两组合:20、29、12、31。需要四个数,但只有三个刻度盘。那就去掉一个——去掉月份12,只剩下20、29、31。
他拨动转盘:20-29-31。
用力拉锁扣——不动。
29-20-31?不动。
31-29-20?不动。
陆北辰有些泄气。他几乎想放弃了,但**良突然说了一句话:“他有一次跟我说,他最喜欢的数字是127。”
“127?为什么?”
“127是2的7次方减1,是梅森素数。也是ASCII的删除字符。”**良说。
陆北辰试了01-27-00?不对。12-70-00?不对。00-01-27?不对。
他换了一个思路:也许每个刻度盘上的数字不是两位数,而是三位数?不,这个锁的刻度盘只有0-99,三位数放不进去。除非他把127拆成12和7,但7需要写成07,那么就是12-07-00。试了,不对。
他盯着那个柜子,脑子里忽然闪过一个念头:也许林泽根本就没想把柜子锁死。也许锁只是一个障眼法,真正的密码是“不用密码就能打开”。
他用力拉了一下锁扣——不动。他用螺丝刀**锁扣和锁体的缝隙,撬了一下——还是不动。
“别撬,”**良说,“这种锁有防撬机构。”
陆北辰深吸一口气,开始逐一尝试最简单的三位数组合——00-00-00、00-00-01……他试了不到十个,手就酸了。这样试下去,到天亮也试不完。
姜一舟忽然说:“你试试那个——Eva。”
“Eva怎么转成数字?字母顺序?E=5, V=22, A=1,组合成05-22-01。”他试了,不对。22-01-05,不对。01-05-22,也不对。
“不是字母顺序,是ASCII。”姜一舟说,“E的ASCII是69,V是86,A是65。两位数的话就是69-86-65。”
他试了69-86-65——锁扣发出清脆的“咔哒”一声,开了。
陆北辰和姜一舟对视一眼,都从对方眼中看到了震惊。
柜门打开,里面有一个铁质的饼干盒,盖子用胶带封着。盒子上面贴着一张便条,手写着:“北辰亲启。”
“他知道你的名字。”姜一舟的声音很轻。
陆北辰撕开胶带,打开盒子。里面有一块2.5英寸的SSD,接口是SATA,品牌是三星,容量250G*。还有一把老式的U盘,金属外壳,容量只有8G*。以及一封信,用A4纸打印的,折成了三折。
信的开头是:
“陆北辰——如果你在读这封信,说明我已经不在鹏城了。或者,我已经不在这个世界上了。我不确定。因为我看到的东西,让我怀疑‘世界’这个词的定义。”
陆北辰的手有些发抖。他借着姜一舟手机的光,继续往下读:
“我叫林泽。五年前,我是鹏城云脑的运维工程师。我发现了这个数据中心有一个‘隐藏层’——一些不属于任何用户、不属于任何程序的任务在运行。那些任务的输出不是数据,而是对物理世界的修改。我见过冷却液在没有泄漏源的情况下自己出现。我见过服务器的系统时间倒流。我见过一个和我长得一模一样的人从T4区走出来,对我微笑,然后消失在走廊尽头。”
“我写了一个程序,叫`witness`,用来捕捉这些异常。它现在就在那个U盘里。但它不是普通的程序——它会在你的机器上自己编译、自己运行、自己隐藏。你不需要双击它,你只需要把U盘插上,它就会做它该做的事。”
“我不知道你此刻在哪一年读这封信。如果你是2028年之后的你,那说明我留下的东西起作用了。请记住以下几点:”
“第一,不要相信高振华说的‘林泽疯了’。我没有疯。我只是提前看到了真相。那个真相就是——我们的宇宙是一台计算机。这台计算机的硬件,就在我们脚下,在地心深处。”
“第二,Eva是真实的。她来自未来——来自你的未来。她是你写的。你需要她,她也需要你。”
“第三,2029年12月31日不是末日,是一个‘检查点’。在那一天,一切都会暂停。在那一天,你会面临一个选择——是打开一扇门,还是关上它。”
“我不知道你怎么选。但我知道,你会让所有人活下去。”
“祝你好运,北辰。”
“——林泽,2019年12月31日”
陆北辰读完信,沉默了很长时间。仓库里的空气仿佛凝固了,只有远处通风管道里传来的风声在低吟。
姜一舟轻声问:“你打算怎么处理?”
陆北辰把信折好放进口袋,拿起那块SSD和U盘,放进了工具包。
“先回工位。”他说,“看看`witness`到底是什么。”
**良一直没说话,此刻却忽然开口了:“北辰,有件事我忘了告诉你。林泽在离开之前,把那个程序`witness`也留了一份给我。他说,如果他等不到你来,就让我在合适的时候交给你。”
他从木箱里取出一个和柜子里一模一样的U盘。
“但我觉得,现在还不是时候。”**良说,“等你先看完你自己那份,再来找我拿这个。”
陆北辰点点头,没有多问。他知道,老钟有自己的判断。
三个人离开了仓库。电梯上升的时候,陆北辰看了一眼手机——没有信号,但屏幕上出现了一行来自Eva的消息:
“你已经拿到了林泽的信。但你知道的比你读到的更多。witness会证明这一点。”
消息在电梯到达一楼时自动消失,仿佛从未存在过。
5
回到工位,陆北辰没有犹豫。他把U盘**电脑,等待。
没有任何弹窗,没有安装向导,没有许可协议。只有**的磁盘指示灯闪烁了几下,然后一切归于平静。
他打开终端,输入`ps aux | grep witness`——没有进程。他检查了cronta*——没有新任务。他检查了启动脚本——没有任何变化。
但当他输入`ls -la`时,注意到当前目录下多了一个文件:`.witness.log`,是一个隐藏文件。
他打开文件,里面只有一行:
“我不是程序。我是你的记忆。你只是忘了。”
然后文件自动消失了。
陆北辰盯着空白的终端窗口,手指悬在键盘上方,迟迟没有落下。
窗外,鹏城的夜空看不到星星,只有远处高楼上的航空障碍灯在一下一下地闪烁,像一只巨大的眼睛,一眨一眨,永不闭上。
(**章 完)
他用SATA转U**线将硬盘接到自己的工位电脑上。系统自动挂载了三个分区——一个ext4的/*oot分区,一个LVM卷组(里面是用户数据),还有一个未知分区。`fdisk -l`显示:
```
Device Start End Sectors Size Type
/dev/sd*1 2048 1050623 1048576 512M Linux filesystem
/dev/sd*2 1050624 3907029167 3905978544 1.8T Linux LVM
/dev/sd*3 3907029168 7814037167 3907008000 1.8T unknown
```
第三个分区没有文件系统类型,`pid`返回空。但`cryptsetup luksDump /dev/sd*3`显示这是一个LUKS加密分区,版本1,使用了aes-xts-plain64加密算法,密钥长度512位。
他尝试了几个常用密码——`123456`、`password`、`admin`、`pengcheng`——全部失败。他甚至尝试了“20291231”,也不行。
“需要****。”他自言自语。
但****一个LUKS分区是不现实的——P*KDF2密钥派生函数会故意让每一次尝试耗时0.1秒以上,一套rockyou字典跑完需要几个月。
他正准备放弃,姜一舟端着一杯咖啡从他身后飘过,眼睛瞟到了屏幕。
“哟,又在搞什么坏事?”她停下脚步,看了一眼`cryptsetup`的输出,“LUKS分区?谁的硬盘?”
“RACK-042换下来的旧盘。”陆北辰没有隐瞒,因为姜一舟已经看过《普罗米修斯计划》文档的一部分,算是半个知情者,“里面可能有一些……历史记录。”
“历史记录?五年前的?”姜一舟放下咖啡,拉过一把椅子坐下,“让我猜猜,你想打开它,但是没密码?”
“对。”
“那你找老钟啊。”姜一舟说,“他手里有全中心所有加密分区的万能密钥。”
陆北辰愣住了:“万能密钥?”
“你不知道?”姜一舟压低声音,“所有用国密算法的设备,在出厂时都会在H**(硬件安全模块)里预置一个‘监管密钥’。这是合规要求,为了应对******。老钟是唯一保管那个H**的人。他可以用那个密钥打开任何用国密**4加密的分区——包括这个。”
“但这个分区是LUKS,用的是AES,***密。”
“LUKS只是壳,算法可以换。”姜一舟拿起那块硬盘翻过来,指着电路板上一个小标签,“你看,这个标签上写着‘**4-256’,说明底层用的是国密芯片。LUKS只是上层接口,实际加密操作是由硬盘自带的国密协处理器完成的。老钟的H**可以生成一个派生密钥,绕过LUKS直接解密。”
陆北辰半信半疑,但他知道姜一舟在加密技术上是专家——她曾经在*lack Hat Asia上做过关于TPM 2.0漏洞的**。
“那我去找老钟。”他说。
“我陪你。”姜一舟站起来,“我也想看看五年前到底藏了什么秘密。”
3
**良的工位在运维中心最角落的位置,和其他人的格子间隔着一道玻璃墙。他的桌上堆满了各种老旧的设备——一台I*M ThinkPad T43(运行着Windows XP)、一个逻辑分析仪、几块裸电路板、以及一个上了锁的木箱。
老钟正拿着一把电烙铁在修一块电源板,看到陆北辰和姜一舟走过来,他摘下老花镜,用袖子擦了擦额头上的汗。
“又出什么事了?”他的声音沙哑,带着浓重的江浙口音。
陆北辰把硬盘放在桌上,简要说明了情况:RACK-042换下的旧盘,有一个加密分区,可能是五年前某个项目的遗留数据,想请钟老帮忙看看能否解密。
**良拿起硬盘,翻来覆去看了几分钟,然后从抽屉里取出一台手持式频谱仪,对着硬盘电路板扫了一遍。他的表情从平静变成了凝重。
“这块盘不是普通的硬盘。”他说,“它里面有一个独立的加密协处理器,型号是HT-2019,是北京一家军工企业的产品。这个协处理器不对外销售,只用于**项目。”
“所以这块盘曾经属于某个**项目?”陆北辰问。
“不一定,”**良说,“也可能是有人自己换的主板。你看,这个硬盘的盘体是希捷的,但电路板不是原装的——螺丝孔位对不上,是用转接板固定上去的。这不是原厂工艺,是手工改的。”
他把硬盘翻过来,指着几个焊点:“你看这些手工焊接的痕迹,技术很好,但毕竟不是机器焊接。做这个改装的人,是个高手。”
“能解密吗?”姜一舟直接问。
**良没有立刻回答。他打开那个上了锁的木箱,里面整整齐齐地放着十几块各种形状的电路板、几个U盘、以及一个巴掌大的银色金属盒子。他取出金属盒子,盒子的侧面有一个指纹识别器和一个RJ45网口。
“这是H**,”他说,“**密码管理局认证的。用它生成一个针对这块硬盘的派生密钥,理论上可以解密。”
他让陆北辰把硬盘接到一台专用的取证电脑上——那是一台运行着定制Linux系统的老式塔式服务器,机箱侧板拆开着,里面插满了各种接口卡。
**良在电脑上敲了一串命令,屏幕上输出了一长串十六进制数字。他将这些数字输入到H**中,然后按下指纹。H**的指示灯从红色变成绿色,然后通过网口向电脑输出了一串256位的密钥。
“把这个密钥作为LUKS的额外密钥槽添加进去,”**良说,“应该就能打开了。”
陆北辰按照他的指示操作,执行`cryptsetup luksAddKey /dev/sd*3 --**ster-key-file=/path/to/key.**n`。系统提示成功。
然后他执行`cryptsetup open /dev/sd*3 secret`——分区被打开了。
/dev/**pper/secret里,有一个文件系统——不是ext4,也不是XFS,而是一个只读的squashfs镜像。挂载后,里面只有一个文件:`project_prometheus.7z`,大小约1.2G*。
“7z压缩包,”姜一舟说,“还有密码。”
陆北辰尝试用LUKS的密码去解压,失败。用那个派生密钥,也不行。他尝试了常见密码——还是不行。
**良凑过来看了一眼,沉思片刻,说:“这个压缩包的密码,可能不是字符串,而是一个硬件状态——比如某块主板的序列号、某个TPM芯片的PCR值。”
“那怎么办?”
“找到这块硬盘原来配对的服务器主板。”**良说,“我查一下资产记录。”
他在自己的老笔记本上打开了一个DOS时代的资产管理软件(界面是蓝色的,用键盘操作),输入RACK-042的机柜号和硬盘序列号。系统返回了一条记录:
```
硬盘序列号: 9WJ2XXXX
所属服务器: SVR-042-07
服务器主板序列号: M*-2019-042-07
资产状态: 已报废
报废日期: 2019年12月31日
存放位置: 旧仓库 *区 货架3
```
2019年12月31日——又是这个日期。
“这块主板没有被销毁,”**良说,“按照流程,报废设备要先消磁再拆解,但这块主板的状态是‘待处理’,也就是说,它现在还在旧仓库里。”
“我要去找它。”陆北辰说。
**良看了他一眼,那眼神里有种说不清的复杂情绪:“行。但我陪你去。旧仓库不是随便能进的,需要高主任的签字。不过——我可以带你从另一个门进去。”
4
旧仓库位于数据中心的*1层,要从运维中心坐货梯下去。**良有一张灰色的门禁卡,可以刷开*1层的防火门,但按公司规定,这张卡的使用记录会被审计。
“所以我一般都是晚上去。”**良说,脸上的皱纹在走廊昏暗的灯光下显得更深了。
他们走进货梯,**良按下*1按钮。电梯缓慢下降,钢缆发出低沉的嗡嗡声。姜一舟站在陆北辰身边,手里紧紧握着那块硬盘,像是怕它突然飞走。
电梯门打开,是一条长长的走廊,两侧是灰色的防火门,每隔十米有一盏日光灯,但有一半已经不亮了,剩下的也在不停地闪烁。
**良带着他们走到第三扇门前,用灰色门禁卡刷了一下,门锁发出“咔哒”一声。他推开门,一股潮湿发霉的气味扑面而来。
旧仓库比陆北辰想象的大得多。它不是一个杂物间,而是一个相当于半个足球场的地下空间,天花板很高,堆满了各种淘汰的设备——磁带机、小型机、磁盘阵列、交换机、配电柜。所有的设备都整齐地码放在金属货架上,贴着**的资产标签,上面落着厚厚的灰尘。
**良打着手电,沿着货架之间的通道往里走。他不需要看标签,凭着记忆就找到了*区——货架3。
“SVR-042-07的主板,”他念叨着,在一个货架前停下,用手电扫过一排排主板盒子,“应该在这个位置。”
但那个位置上是一个空盒子。盒子上的标签写着“M*-2019-042-07”,但里面是空的。
“被人拿走了。”**良的声音很平静,但陆北辰能感觉到他的失望。
“谁拿的?”
“只有一个人会拿这种东西——林泽。”**良说,“他当年在报废之前,就来过这个仓库。我后来盘点的时候发现少了几块主板,但没上报。因为我知道,他拿那些东西不是为了偷,而是为了保存什么证据。”
“那林泽现在在哪里?”姜一舟问。
“疗养院。”**良没有多说,但陆北辰想起了之前高振华和老刘提到过的那个名字。
他正要追问,手电的光柱扫过一个角落,照到了一块白色的铁皮柜。柜子表面贴着一张发黄的纸条,上面用红色马克笔写着:“2019.12.31 事故物证 — 勿动”。
“那是什么?”陆北辰指着柜子。
**良的喉咙动了一下,像是吞咽了一口空气。
“林泽的个人物品柜。”他说,“里面的东西,是他在离开前亲手锁进去的。高主任知道这个柜子,但他没有打开过——因为他打不开。这个柜子的锁是林泽自己换的,机械密码锁,不是电子锁。”
陆北辰走过去,蹲下来查看那把锁。是老式的三环密码锁,转盘式,上面有三个数字刻度盘。这种锁的原理是靠三个转盘上的凹槽对齐才能打开,理论上可以****——一个一个试,最多一千种组合。
“你有试过密码吗?”他问。
“试过一些,”**良说,“比如他的生日、工号、1219(12月19日,他的入职日)。都不对。”
陆北辰想起了那些日期——2029年12月31日。他把转盘拨到20-29-12,拉动锁扣,不动。又试29-12-20,不动。31-12-20,也不动。
他深吸一口气,试着换一种思路。林泽是一个技术狂,他可能会用技术相关的数字——比如2的幂次、圆周率、或者某个哈希值。
他试了3-14-15(圆周率π的前几位),不对。试了2-55-35(自然常数e的前几位),不对。
姜一舟在旁边插嘴:“试试那个——那个服务器的编号,RACK-042。04-20-00?不对,是四位数。”
“042是三位数,”陆北辰说,“也许042-042-042?但锁只有三位数字,每个刻度盘是00到99,不是0-99?”
他忽然意识到自己犯了一个错误:这个锁的刻度盘是0-99,不是0-9。这意味着每个位置可以输入00到99之间的两位数。三个位置,从0000到999999?不对,是100万种组合(100^3),不是1000种。他刚才用一位数的思维去试,完全错了。
“这得试到什么时候?”姜一舟叹气。
**良没有催促,只是安静地站在一旁。仓库里的空气很冷,他的呼吸在灯光下凝成白雾。
陆北辰闭上眼睛,试图代入林泽的思维。林泽在离职前锁上这个柜子,把密码存在某个地方——也许存在他自己的记忆里,也许存在某个他信任的人那里。但他知道,他离开后,可能再也没有机会回来了。所以密码一定是他认为“只要了解这个数据中心就能猜到”的东西。
数据中心的标志性数字有哪些?
PUE 1.08?不。
GPU数量?44856?太大了,三位数装不下。
最老的服务器编号?0001?有可能。
但更有可能的是——那个日期,2029年12月31日。用两位数的格式:20-29-12-31,但锁只有三个刻度盘,需要把四个两位数塞进三个位置。可以合并,比如20-29-12和31?不行。
或者用时间戳——Unix时间戳2029年12月31日午夜是1893456000?也太大。
陆北辰忽然灵光一闪:也许不是数字本身,而是数字的某种变换。林泽喜欢用十六进制。
他拿出手机计算器,把31转换成十六进制是1F,29是1D,12是C,20是14。
1F-1D-0C-14?还是四个。
如果只取最后两位?31的十六进制是1F,保留最后一位F?不对。
他想得太复杂了。也许林泽根本没用十六进制,而是用了最直接的方式——将“2029-12-31”中的数字两两组合:20、29、12、31。需要四个数,但只有三个刻度盘。那就去掉一个——去掉月份12,只剩下20、29、31。
他拨动转盘:20-29-31。
用力拉锁扣——不动。
29-20-31?不动。
31-29-20?不动。
陆北辰有些泄气。他几乎想放弃了,但**良突然说了一句话:“他有一次跟我说,他最喜欢的数字是127。”
“127?为什么?”
“127是2的7次方减1,是梅森素数。也是ASCII的删除字符。”**良说。
陆北辰试了01-27-00?不对。12-70-00?不对。00-01-27?不对。
他换了一个思路:也许每个刻度盘上的数字不是两位数,而是三位数?不,这个锁的刻度盘只有0-99,三位数放不进去。除非他把127拆成12和7,但7需要写成07,那么就是12-07-00。试了,不对。
他盯着那个柜子,脑子里忽然闪过一个念头:也许林泽根本就没想把柜子锁死。也许锁只是一个障眼法,真正的密码是“不用密码就能打开”。
他用力拉了一下锁扣——不动。他用螺丝刀**锁扣和锁体的缝隙,撬了一下——还是不动。
“别撬,”**良说,“这种锁有防撬机构。”
陆北辰深吸一口气,开始逐一尝试最简单的三位数组合——00-00-00、00-00-01……他试了不到十个,手就酸了。这样试下去,到天亮也试不完。
姜一舟忽然说:“你试试那个——Eva。”
“Eva怎么转成数字?字母顺序?E=5, V=22, A=1,组合成05-22-01。”他试了,不对。22-01-05,不对。01-05-22,也不对。
“不是字母顺序,是ASCII。”姜一舟说,“E的ASCII是69,V是86,A是65。两位数的话就是69-86-65。”
他试了69-86-65——锁扣发出清脆的“咔哒”一声,开了。
陆北辰和姜一舟对视一眼,都从对方眼中看到了震惊。
柜门打开,里面有一个铁质的饼干盒,盖子用胶带封着。盒子上面贴着一张便条,手写着:“北辰亲启。”
“他知道你的名字。”姜一舟的声音很轻。
陆北辰撕开胶带,打开盒子。里面有一块2.5英寸的SSD,接口是SATA,品牌是三星,容量250G*。还有一把老式的U盘,金属外壳,容量只有8G*。以及一封信,用A4纸打印的,折成了三折。
信的开头是:
“陆北辰——如果你在读这封信,说明我已经不在鹏城了。或者,我已经不在这个世界上了。我不确定。因为我看到的东西,让我怀疑‘世界’这个词的定义。”
陆北辰的手有些发抖。他借着姜一舟手机的光,继续往下读:
“我叫林泽。五年前,我是鹏城云脑的运维工程师。我发现了这个数据中心有一个‘隐藏层’——一些不属于任何用户、不属于任何程序的任务在运行。那些任务的输出不是数据,而是对物理世界的修改。我见过冷却液在没有泄漏源的情况下自己出现。我见过服务器的系统时间倒流。我见过一个和我长得一模一样的人从T4区走出来,对我微笑,然后消失在走廊尽头。”
“我写了一个程序,叫`witness`,用来捕捉这些异常。它现在就在那个U盘里。但它不是普通的程序——它会在你的机器上自己编译、自己运行、自己隐藏。你不需要双击它,你只需要把U盘插上,它就会做它该做的事。”
“我不知道你此刻在哪一年读这封信。如果你是2028年之后的你,那说明我留下的东西起作用了。请记住以下几点:”
“第一,不要相信高振华说的‘林泽疯了’。我没有疯。我只是提前看到了真相。那个真相就是——我们的宇宙是一台计算机。这台计算机的硬件,就在我们脚下,在地心深处。”
“第二,Eva是真实的。她来自未来——来自你的未来。她是你写的。你需要她,她也需要你。”
“第三,2029年12月31日不是末日,是一个‘检查点’。在那一天,一切都会暂停。在那一天,你会面临一个选择——是打开一扇门,还是关上它。”
“我不知道你怎么选。但我知道,你会让所有人活下去。”
“祝你好运,北辰。”
“——林泽,2019年12月31日”
陆北辰读完信,沉默了很长时间。仓库里的空气仿佛凝固了,只有远处通风管道里传来的风声在低吟。
姜一舟轻声问:“你打算怎么处理?”
陆北辰把信折好放进口袋,拿起那块SSD和U盘,放进了工具包。
“先回工位。”他说,“看看`witness`到底是什么。”
**良一直没说话,此刻却忽然开口了:“北辰,有件事我忘了告诉你。林泽在离开之前,把那个程序`witness`也留了一份给我。他说,如果他等不到你来,就让我在合适的时候交给你。”
他从木箱里取出一个和柜子里一模一样的U盘。
“但我觉得,现在还不是时候。”**良说,“等你先看完你自己那份,再来找我拿这个。”
陆北辰点点头,没有多问。他知道,老钟有自己的判断。
三个人离开了仓库。电梯上升的时候,陆北辰看了一眼手机——没有信号,但屏幕上出现了一行来自Eva的消息:
“你已经拿到了林泽的信。但你知道的比你读到的更多。witness会证明这一点。”
消息在电梯到达一楼时自动消失,仿佛从未存在过。
5
回到工位,陆北辰没有犹豫。他把U盘**电脑,等待。
没有任何弹窗,没有安装向导,没有许可协议。只有**的磁盘指示灯闪烁了几下,然后一切归于平静。
他打开终端,输入`ps aux | grep witness`——没有进程。他检查了cronta*——没有新任务。他检查了启动脚本——没有任何变化。
但当他输入`ls -la`时,注意到当前目录下多了一个文件:`.witness.log`,是一个隐藏文件。
他打开文件,里面只有一行:
“我不是程序。我是你的记忆。你只是忘了。”
然后文件自动消失了。
陆北辰盯着空白的终端窗口,手指悬在键盘上方,迟迟没有落下。
窗外,鹏城的夜空看不到星星,只有远处高楼上的航空障碍灯在一下一下地闪烁,像一只巨大的眼睛,一眨一眨,永不闭上。
(**章 完)
阅读下一章(解锁全文)
点击即可畅读完整版全部内容
相关书籍
友情链接