下一章 上一章 目录 设置
8、林哲
...
-
米线吃完的时候,苏鹤年已经换了第三根记号笔。时间是5月29日午后。
白板上多了几张新图——网格计划的人员分组、投注站分布热力图、资金流转的节点链路。他的字迹越来越小,越来越密,像是要把整个方案塞进那两平方米的白色区域里。周临渊注意到一个细节:苏鹤年在写每一个名字的时候,都会在后面画一个括号,标注这个人的“安全等级”——A、B、C。A级是核心,知道全部信息;B级知道部分信息;C级只知道自己要买什么号码,连在帮谁买都不知道。
“外围人员全部用C级,”苏鹤年用笔帽敲了敲白板,“他们每个人只参与一次。买完就退出。给现金。不留联系方式。最好选那些和你们没有任何社会关系的人——不是亲戚,不是同事,不是邻居。菜市场的摊贩、工地上的临时工、网吧里打游戏的年轻人。只要他们能识字、能填号码、能守住嘴。”
“怎么找到这些人?”何明问。
“不需要找。有一个现成的渠道。”苏鹤年从抽屉里拿出一个老旧的手机,非智能的,屏幕上只有电话和短信两个功能。“我以前在星洲做□□安全的时候认识一个人,叫‘林哲’。他在国内做灰产技术支持的——不犯大法,专门帮人解决一些身份验证、账户注册、地址生成之类的问题。他手里有大量的临时身份和三方支付账户,可以用来做彩票购买的资金中转。”
“灰产?”周临渊皱眉。
“灰产不是黑产。”苏鹤年说,“他不碰毒品、不碰枪支、不碰洗钱。他的客户大部分是微商、跨境电商、和一些想避开实名认证的普通人。他提供的服务在灰色地带——不合法,但不害人。而且他的技术非常好。逆向工程出身,在通信巨头做过三年的嵌入式系统开发,后来离职自己单干。他破解过市面上至少六种摇奖机的底层控制系统——不是为了操控结果,是为了证明它们可以被操控。”
“他人在哪里?”
“不知道。”苏鹤年把老手机放在桌上,“他不用智能手机,不上社交媒体,不参加任何线下聚会。想找他只能通过这个手机里存的号码打过去。而且接不接要看他的心情。他从来不和同一个人合作两次以上——除非他觉得你有趣。”
苏鹤年按下了免提键。拨号音在安静的安全屋里响了七声,然后断了。
“没人接。”何明说。
“正常。”苏鹤年没有挂断,而是重新拨了一遍。这次响了五声,然后被掐断。再拨。三声。掐断。再拨。一声。接通了。
电话那头没有说“喂”。只有呼吸声——很轻,很均匀,和背景里某种电子设备散热风扇的嗡嗡声混在一起。周临渊能听到那头的键盘声,极快,不是打字的速度,是跑代码的速度。回车键每隔几秒敲一下,节奏稳定得像节拍器。
“是我。”苏鹤年说。
“你怎么换号了?”对面的声音比周临渊预想的年轻——三十岁左右,带着一点南方口音。声音很平,没有情绪,像是注意力只有一半在电话上,另一半还在屏幕上。
“原来的号不安全。”
“你现在做的事不安全——不是号码的问题。”对面停顿了一下,键盘声停了。“你要多少人?”
“三十个。外围。只用一次。”
“三十个C级身份,三十二个三方账户,外加一个可以扛住三级预警的投注分布方案。”林哲报出需求的时候没有犹豫,像是在心里已经替苏鹤年算好了。“七万。不走银行。虚拟币支付。”
“可以。”
“还有一件事。”林哲说,键盘声又响起来了,但这次慢了很多——像是在查什么东西。“你上次发给我的那组相位数据,我跑了一遍底层校验。你是不是用了陈远山的模型?”
苏鹤年看了陈远山一眼。陈远山坐在桌子对角,正在喝一碗凉掉的米线汤,听到自己的名字,抬起了头。
“是。”苏鹤年说。
“他的模型有两个问题。”林哲的语气从谈生意变成了技术评估,语速加快了一点,但依然很平。“第一个问题——相位偏移量是基于历史数据拟合的,精度会随时间衰减。如果底层算法有版本迭代,哪怕只是改一个哈希函数的盐值,偏移量就会全部作废。第二个问题——他的模型只能预测序列,不能追溯序列的生成逻辑。也就是说,他知道彩票号码不是随机的,但他不知道这些号码是怎么从算法里‘长’出来的。”
陈远山放下碗,走到电话旁边。“我是陈远山。”
电话那头沉默了几秒。
“你的相位解调做得很好,”林哲说,没有任何寒暄,像是直接从分析报告里切了一段结论出来,“但你没有逆向过摇奖机的底层控制系统。你看到了数据的表面规律,没看到硬件的底层逻辑。彩票系统的随机数生成是在一台专用硬件安全模块里完成的——HSM,硬件安全模块。这台机器和外部网络物理隔离,理论上不可篡改。但我在四年前拆过一台退役的同型号HSM,发现它的伪随机数生成器初始化种子不是来自物理噪声源——是来自一个外部注入的十六进制序列。序列的格式,和你发现的相位周期完全一致。”
陈远山的手指在桌面上停住了。“你是说——种子是外部写入的?”
“对。种子不是机器自己生成的。是被人从外部注入的。注入的时间节点、注入的序列内容、注入的频率——全部是预设的。这意味着你的相位周期不是算法的数学特性。它是被人为设定的。就像一个定时程序,每隔七点一三天,自动注入一组预设种子。你的模型只是在反向拟合那个定时程序的工作表。”
陈远山没有说话。他的手指重新开始敲桌面——但这次不是平时那种有节奏的轻敲,是混乱的,没有规律的,像是在脑子里重组所有的逻辑链条。过了很久,他开口了。
“你能逆向出那个定时程序的源码吗?”
“能。但需要一台在线的HSM。”
“哪里有?”
“彩票中心机房的物理隔离区里,每一台正在运行的摇奖终端里都有一台。”林哲的声音依然是平的,像是在说一件很普通的事。“但物理隔离意味着你必须进入机房才能接触到它。而进入机房需要三样东西——门禁卡、生物识别、和一个在系统里登记过的维护工单。这三样东西,我都没有。”
安全屋里又安静了。何明的手指悬在键盘上方,忘了敲下去。周德民坐在行军床上,听不懂这些技术名词,但他听懂了一个词——机房。那是一个有门禁的地方,一个有人看守的地方,一个不是用U盘和加密软件就能进去的地方。
“如果拿到一个在线的HSM,”陈远山慢慢地说,“你多久能逆向出源码?”
“三天。也许两天。取决于它的固件版本有没有上过我见过的反逆向保护。”林哲停了停,“但这不是重点。重点是你进了机房之后会发现——HSM里的定时程序只是整个链路的一小段。真正的算法核在更底层——不在彩票中心,不在任何民用服务器上。那些HSM的种子序列,本身就是从另一个系统里转发过来的。”
“天枢。”周临渊说。
电话那头沉默了。然后林哲的声音第一次出现了情绪的波动——不是惊讶,是警觉。
“刚才说话的是谁?”
“周临渊。”周临渊说。
“你知道‘天枢’?”
“知道的不多。只知道它是这套算法的源头——一个横跨军事、金融、气象的通用随机数模拟系统。彩票只是它的测试场。”
林哲沉默了很久。键盘声完全停了。只听到那边散热风扇的嗡嗡声,和偶尔从更远处传来的、像是服务器机柜发出的低沉的轰鸣。
“你们现在做的事,”林哲终于开口,声音比刚才低了很多,“比我想的要严重得多。我之前以为你们只是一群想薅彩票羊毛的数学爱好者——那种人我见过很多,算几期中了就跑,不会惹上真正的大麻烦。但你们在查天枢。”
“你知道天枢?”
“不知道。但我知道这个名字意味着什么。”林哲说,“四年前,我接过一个活儿。有人出高价让我破解一个退役军用通信设备的固件。那个设备是九十年代的产品,外壳上没有任何标识,只有一块铭牌,上面刻着四个字——‘天枢·零’。”
“你破解了吗?”
“破解了一半。固件里有一段加密代码,用的不是任何已知的商用加密算法——是军用的。我没法完全逆向,但我从代码结构里提取出了一个逻辑框架。那个框架和你发给我的相位数据在底层结构上高度一致。我当时不知道这意味着什么,只是把结果发给了客户。客户付了钱,我就没再管。”林哲顿了顿,“第二天,我的住处被人翻过。手法非常专业——不是你那种忘了锁门被人顺手牵羊的翻法。他们把所有电子设备都拆开过,硬盘被镜像了,U盘被复制了,连墙上的电路图都被拍了照。但他们什么都没拿走。他们是来找东西的——找那段固件代码的逆向分析报告。”
“你报警了吗?”
“没有。因为我做的是灰产。报警等于自首。”林哲的声音里第一次出现了一丝冷笑的意味,“而且就算报警也没用。能出动那种级别的人来翻一个地下室的——不会是普通角色。”
周临渊看了苏鹤年一眼。苏鹤年的表情没有变化,但他握着记号笔的手指节发白。
“林哲,”周临渊说,“你现在安全吗?”
“不算安全。但也不算危险。我换了城市,换了身份,换了所有设备。上次被人找到是因为客户的交易记录被追溯了。现在我自己不接活了——只帮几个信得过的人做技术支持。你们是其中之一。”他停了停,“苏鹤年,你爸的事我听你说过。如果你现在做的事和那个有关——算我一份。不要钱。”
“你不是不和同一个人合作两次以上吗?”苏鹤年说。
“这次不一样。”林哲说,“上次他们翻了我的东西。我这个人很记仇。”
周临渊忽然觉得这个从未谋面的年轻人比他在视频会议里看到的任何人都更真实——不掩饰自己的动机,不包装自己的目的,直白到近乎冷酷。他说“很记仇”,就像在说一种可以被计算的变量。不是情绪,是逻辑。你动了我的东西,我就让你付出代价。
“你在哪里?”周临渊问,“不是具体地址——城市就行。”
电话那头沉默了一阵。键盘声重新响起来,很快,像是林哲在跑一个快速搜索。
“瑞城。西南边境。这里的网络监管比内地松,方便做事。”
“安全吗?”
“目前安全。但我的习惯是每两周换一次地点,所以你们如果要我做什么事,最好在两周之内。”林哲说,“另外,苏鹤年——你上次让我查的那个加密频道,我追溯到了。”
苏鹤年身体微微前倾。“什么结果?”
“那个频道的底层协议不是民用通信——是一个退役军用卫星的备用信道。信道代码JYT-0723。最后一条有记录的通信是昨天下午四点三十八分——从云岭市发往燕京西郊的一个IP段。那个IP段登记在一家名为‘世观系统科技’的企业名下。法定代表人——顾世安。”
安全屋里的空气像是被抽掉了一层。何明的手彻底停在键盘上,一动不动。陈远山靠在椅背上,手指不再敲了。周德民虽然没听懂所有细节,但他注意到所有人都在听到“顾世安”三个字时僵住了。
“昨天下午四点三十八分,”周临渊重复了一遍,“那天晚上三点,我父亲家被人踩点。时间对得上——他们不是临时起意。是在确认了我父亲的位置之后,才开始行动。”
“对。”林哲说,“而且那个信道上还有另一组信号——不是往外发的,是往里收的。有人在通过同一个军用信道向云岭省方向传输加密数据。传输量很小,每次只有几KB——大概是一段文本或者几个坐标。我破不了那个加密,但我可以告诉你接收端的物理位置。”
“在哪里?”
“三个地点。第一个在云岭市,城西开发区——废弃计量站的坐标。第二个在靖安城——你父亲住的小区,周临渊。第三个——”林哲停了一下,键盘声变得很轻,像是在翻找什么,“——在你们现在所在位置的半径三公里之内。”
所有人都下意识地看了一眼房间的墙壁——那几面用砖封死的窗户,隔音棉覆盖的墙面。安全屋是屏蔽了所有无线信号的,只有一根光纤从地下走,连到外面。但半径三公里——这个距离太近了。近到如果对方有定位设备,他们可能已经在一个更大的圈子里被标注了。
“你能把那个接收端的位置再精确一点吗?”苏鹤年问。
“不行。信号被中继过,我只能追溯到最近的一个地面基站,精度就到三公里。如果你想知道更精确的位置,需要有人在那个接收端附近放置一个信号嗅探器——我可以远程操作。”
苏鹤年看了周临渊一眼。周临渊知道他在想什么——如果接收端就在三公里之内,意味着顾世安的人已经在安全屋周围布了监视点。他们不是没被发现。他们是被故意留着的。就像苏国良在磁带里说的——“最危险的地方最安全。”顾世安也许在用同样的逻辑:让这群人自己聚在一起,自投罗网。
“先不动。”苏鹤年说,“他们要是在监视,就让他们监视。我们按计划走——网格方案后天开始第一次验证。所有的外围人员用林哲提供的身份和账户。投注地点全部分散在云岭市外——安宁镇、呈贡区、晋宁镇、富民镇。不在主城区做。”
“我可以帮你们做一件事。”林哲在电话那头说,键盘声忽然密集起来,像是在同时操作好几台机器。“我可以用之前逆向过的HSM固件片段,模拟一个假的种子注入信号。如果顾世安的人在监控信道上看到了这个信号,他们会以为有人正在重启周期的窗口期进行远程写入。这会分散他们的注意力——至少可以把一部分人引到假坐标去。”
“你有把握?”
“技术上没问题。但代价是——我一发出这个信号,对方就会反向追溯到我这里。瑞城的这个藏身处就废了。我需要提前转移。”
“那就提前转移。”苏鹤年说,“你现在开始准备。我让老李开车去瑞城接你。你把地址发到这个号码上——老手机,不联网,安全的。”
“不用接。”林哲说,“我有自己的转移路线。你们只需要告诉我下一站的安全屋位置,我自己会到。”
“云岭市。西山脚下。到了发信号。”
“收到。”林哲说,“还有最后一件事——苏鹤年,你爸的备份磁带里有没有提到HSM的固件版本号?”
苏鹤年想了想。他记得磁带的每一个字——苏国良在录音里用那种低沉而有条理的声音,一页一页地口述着技术文档。“有。他说HSM的固件最后一次更新是在2001年11月。版本号TQ-0723。”
电话那头安静了。
然后林哲的声音变了——不是平的,是冷的,像一把刚从冰箱里拿出来的手术刀。“JYT-0723。那个军用信道的代码——就是HSM固件版本号的倒序。TQ倒过来是QT,JYT是三个字母往前推一位。这不是巧合。这是零号的命名习惯。他把每一个组件的信息都编码进了上一级系统的标识符里——就像他留后门的逻辑一样。不藏。告诉你。只要你能找到。”
“这意味着什么?”
“意味着如果我们能拿到JYT-0723信道的完整通信记录,我们就能反向推导出整个天枢系统的节点拓扑——每一台HSM的位置、每一个信道的频率、每一个终端的标识符。零号把所有东西都明码标好了。他在等一个能看懂他的命名规则的人。”
电话挂断了。
安全屋里只剩下通风口的嗡嗡声和何明键盘上偶尔的敲击声。苏鹤年站在白板前,看着自己画的那些流程图和名单,手里的记号笔悬在半空中。陈远山坐在角落里,把他那碗彻底凉掉的米线汤端起来喝了一口,然后放下,手指又开始在桌面上敲——但这次是有节奏的。规律。三下快,两下慢。像一个人在算一道他已经知道答案了的题目。
“JYT-0723。”他自言自语,“TQ-0723。零号把固件版本号倒序之后往前推一位,生成了军用信道的代码。他把每一个线索都藏在最显眼的地方——不是怕人找到,是怕人找不到。就像一个建筑师在设计迷宫的时候,在每一面墙上都刻了出口的方向,只是没有人低头看。”
他忽然站起来,走到何明旁边,“你把林哲刚才提到的那几个坐标打出来——废弃计量站、靖安城小区、还有我们现在这个位置半径三公里的范围。快。”
何明的手指在键盘上飞快地跳动。屏幕上的地图逐渐缩放,三个红点在一片灰蓝色的地形图上亮起来。陈远山盯着那三个红点看了很久,然后在何明的键盘上按了Ctrl+P。打印机嗡嗡地响起来,吐出一张地图。
他拿起记号笔,在三个红点之间画了两条线。一个在云岭市西郊的废弃计量站,一个在靖安城老城区的周德民住处,一个在他们现在的安全屋附近。三条线连起来,形成一个不规则的三角形。他盯着这个三角形看了很久,然后在那张地图的空白处写了一行字——
“三个接收端的位置。如果它们不是随机分布的——如果它们和相位周期一样,也是被预设的——那这个三角形的形心,就是下一个节点。”
他在三角形的形心位置画了一个圈。
圈落在云岭市区的一个地点——盘龙江与金汁河交汇处,靠近一条老街道。街道的名字叫“宝善街”。
“宝善街,”周临渊走过来,看着那个圈,“省彩票中心。”
安全屋里又安静了。这次不是因为恐惧——是因为验证。所有的线索,从不同的方向延伸出去,绕了一大圈,又回到了同一个地方。
彩票中心。那个每天有上万人买彩票、每天有人中奖每天有人失望的地方。那个摇奖机转动时全国人民盯着屏幕看的地方。那个被所有人认为是“公平”的最后象征的地方。
就是天枢的地面零号节点。
“何明。”苏鹤年打破了沉默。
“在。”
“把宝善街周边五公里的所有投注站位置调出来。网格方案的外围投注点全部避开这片区域。”
“为什么?”
“因为如果省彩票中心是地面节点,”苏鹤年说,“那周边的所有投注站的风控等级都比别处高。在节点附近投注,等于在派出所门口放烟花。”
何明立刻开始调数据。苏鹤年走到周临渊面前。
“老周。”
“嗯。”
“你爸的饼干盒子里,有没有宝善街附近的彩票?”
周临渊转头看向角落里的父亲。周德民一直在安静地听着,手里抱着那个铁皮盒子。听到苏鹤年的问题,他低下头,打开盒子,一张一张地翻起来。动作很慢,但很仔细。那些泛黄的彩票在他的指间沙沙作响,每一张的投注站编号他都看得很认真。
翻到一半的时候,他停下了。
“有。2002年9月14号——就是那期被换号的前一期。宝善街投注站。老刘的店。”
他把那张彩票举起来。在安全屋惨白的日光灯下,那张泛黄的纸片上的印刷字已经模糊了,但还能辨认出投注站的地址——盘龙区宝善街17号。
“老刘的店,现在还在。”周德民说,“我去年路过的时候看到过。招牌换过,但位置没变。就在彩票中心对面,隔一条街。”
苏鹤年接过那张彩票,仔细看了看,然后把它放在白板的磁吸条下,和那张组织结构图、网格方案、三角形的形心图并排贴在一起。一张2002年的旧彩票,在一堆流程图和坐标之间显得格格不入。但每个人都知道——这张彩票,是整张图里最老的一个节点。
“宝善街17号,”苏鹤年说,“下次去的时候,带我去看看老刘。”
周德民点了点头。
窗外没有阳光——安全屋没有窗户。但通风口里隐约传来远处山间的鸟叫声,和城市方向隐约的车流声。云岭市初夏的傍晚已经开始变长,外面的世界还在正常运转——人们在下班、在买菜、在排队买彩票。没有人知道,在西山脚下这栋灰色小楼里,几个人刚刚拨通了一个边境城市的电话,接通了一个从未露面的人,然后在地图上画了一个圈。
那个圈落在宝善街。宝善街上有省彩票中心。省彩票中心的机房里,有一台正在运行的HSM。HSM里的种子序列每隔七点一三天自动注入一次——下一次注入的时间,正在一天一天地逼近。
而那个给HSM注入种子的人,二十八年前把所有线索编成一套命名规则,藏在每一个版本的固件号、每一条信道的代码、每一个节点的坐标里。他等的人,正在地图上画圈。