凌晨六点四十一分,人口系统弹出一条荒唐的提醒。
“今生人数:5(高危名单)。”
技术大厅里没人说话,所有人盯着屏幕最上方那行红字。五个名字同时亮起,像有人在城市脊椎上按了五个发光点。
周秉德。
唐照临。
顾玄照。
陆怀先。
以及一个还活着的人:楼百明。
邱夜清先反应过来:“这五个不是同一天生。”
“本来不是。”沈策把井中火控制台导出的`city_blackout_clock.csv`拖到另一屏,和人口库生字段并排,“但现在他们在系统里被改成了同一、同一时辰,精确到秒。”
技术员把字段放大,声音发:“不是只改主表。户籍主库、医院出生档、老学籍镜像、民政备份,四套里至少两套都被改了。每个人都有两种生,一真一假,假值统一指向今天。”
沈策盯着那串假值,心里一沉。时间不是随便填的,全部卡在03:17:30附近,和昨夜井中火第一轮稳定喷火秒值一致。
“这不是掩盖身份。”他说,“这是在给节点上时间戳。”
邱夜清问:“把人的生当节点时间戳,有什么用?”
“在司辰这套系统里,‘生辰’不是命理词,是索引键。”沈策指着五个名字,“你把五个关键人改成同一时辰,系统就会把他们归入同一批次校验。然后把停电表秒值、井火秒值和这批人绑定,等于给整城联动写了一个‘合法理由’。维护系统看见的是数据一致,不会报警。”
邱夜清骂了一句:“拿死人当数据库字段。”
“活人也一样。”沈策看了眼楼百明,“只要还在系统里,都能被拿来当键。”
专案临时会议十分钟后在数据中心开。网安、刑侦、法检、人口管理四线同时入场,桌上摆着三份打印表:人口生差异表、井火点火表、停电表跳秒表。三张表像三层透明片,叠在一起几乎完全重合。
人口管理处主任脸色很难看:“我们昨晚已经封了写权限,怎么还会有增量写入?”
网安组长回答:“写入不是从主库进的,是从历史镜像回灌。夜里五点五十八分,系统做了自动校时式同步,写入包带合法签章,接口优先级高于人工封锁。”
“谁能签这种包?”
“理论上只有历史库维护管理员和特批专线。”
沈策把话接过去:“查‘特批专线’,别查个人账号。对方一直在避开单点身份,走的是流程权限。”
会议结束前,沈策提了三个动作:
1. 把五名目标的全部历史档案拉平,不看当前值,只看每次改写轨迹。
2. 从医院纸档和老户籍纸档交叉验证,找出第一处错位发生时间。
3. 立即封存公安历史库离线备份,不允许自动清理任务再跑一轮。
邱夜清补了一条:“任何人不得单独接触备份介质,两人同行,全程录像。”
七点二十,市公安档案大楼地下二层。
这里温度常年十六度,灯光发白,走廊尽头摆着成排旧磁带柜。值班员罗大年五十多岁,戴着老花镜,看到专案证件后下意识往后退了一步。
“调什么?”
“近十年人口历史库的全量冷备,尤其是2016和2019两次迁移窗口。”邱夜清说。
罗大年嘴唇动了动:“那两次迁移是大工程,资料很杂,得走审批。”
“审批已经签了。”邱夜清把特批单拍在台上,“现在开柜。”
罗大年看了眼签字,手指明显抖了下,还是去拿钥匙。柜门打开,里面是编号整齐的LTO磁带。沈策没有立刻拿带,而是先看柜内灰尘。前排灰均匀,后排第三格有一道新划痕,像最近有人抽过又塞回去。
“这格最近谁动过?”沈策问。
罗大年愣了一下:“上周系统例检,技术科来过。”
“几个人?”
“两个。一个年轻,一个戴口罩,右手一直揣兜里。”
又是右手。
沈策没再问,直接点出编号:“拿HIS-2016-09到HIS-2016-12,再拿HIS-2019-03。”
磁带送进离线读取机,进度条爬得很慢。等待的二十分钟里,沈策让技术员先做纸档对照。结果很快回传:五名目标在纸档上的出生信息彼此不同,且无冲突;错位只出现在电子历史链,第一次批量错位发生在2016年9月14凌晨。
2016年9月14。
沈策看着期,觉得眼熟。他翻开第八章缴获的《庚字三库夜巡表》影印件,表头第一条建档期也是2016年9月。
“同一个起点。”他低声说。
读取机“滴”一声,第一段志解析完成。屏幕滚出SQL任务名:`birth_reindex_yb04.sql`。任务说明写得很冠冕:历史数据规范化、消除异构误差。可任务实际执行语句不是纠错,而是将指定名单的`birth_time`覆写为外部参数,并将原值写入“影子表”隐藏字段。
邱夜清盯着那行语句:“这叫规范化?”
“这叫洗白。”沈策说,“把假值写主表,把真值藏影子。平时没人查影子表,就永远看不见原始生辰。”
网安组长继续往下拉,看到调用来源字段时停住了:
`source_node = PS_HIS_MIRROR_03`
“PS是公安系统前缀。”他说,“HIS_MIRROR_03是历史库主镜像三号节点。”
沈策问:“这个节点在哪?”
“理论位置在主楼机房B区,但……”
“但什么?”
“我们去年资产盘点时,B区这台机器被标注‘停用迁移’,实体去向记录为空。”
空气一下冷下来。也就是说,系统里显示停用的节点,仍在对城市核心数据做写入。
邱夜清当场下令:“封主楼机房B区,所有维护人员原地待命。”
八点五十,公安主楼机房B区。
门开时,里面只有低频风扇声。表面看确实是一排停用机柜,贴着封条,灰也积得厚。可沈策刚走进去就闻到熟悉的味道:淡淡松脂和旧纸粉,和庚字三库门缝里一模一样。
他蹲到第三排机柜后侧,手电照到地面,有一条新铺的网线压痕,从“停用机柜”底部一直延伸到墙角穿线孔。穿线孔外侧涂了新漆,颜色和旧墙不一致。
“这里有暗线。”他说。
技术员拆开机柜后板,里面不是空架,藏着一台无标识1U服务器,指示灯微弱闪烁。服务器网口分了两路,一路接公安内网,一路接外部专线。外部专线标签被刮掉,只剩半个字母:D。
邱夜清看见那个字母,第一反应就是“道箓司”。
技术员把内存镜像拉出,志里第一条可读记录时间是今天05:58,任务名:`clock_sync_birth_batch`。参数列表写着五名目标ID和一个全局秒值:03:17:30。
“就是井中火秒值。”网安组长说。
沈策点头:“它先校时,再改生辰。生辰改完,系统就认同这个秒值是‘自然数据’。”
“那停电表怎么进来的?”
“看第二个任务。”
屏幕下滑,第二任务名是`blackout_anchor_write`,写入表名正是`city_blackout_clock`。也就是说,井中火和停电表联动数据不是现场孤例,而是从这里分发出去的。
邱夜清当场拍板:“整机封存,走电子取证链,不断电,直接镜像。”
就在技术员连接取证机时,服务器突然弹出自毁脚本窗口,倒计时30秒。有人在远端触发了销毁。
“断网!”邱夜清喊。
“断网会触发本地擦除!”技术员回吼。
沈策盯着倒计时,直接扯下服务器外部专线,再把一只便携信号阻断器贴到网口。倒计时从30跳到12,又卡在12不动。
“继续镜像。”他低声说,“它靠外部握手确认销毁,握手断了就会卡死。”
二十秒后,镜像进度开始走。全场没人再说话,只听见硬盘转动的细响。
镜像完成后,技术员从缓存区恢复出一段被标红的配置文件。文件第一行:
`upstream = ps_his_master_archive`
第二行:
`relay = daolu_oldnet_tunnel`
第三行:
`mode = history_first`
“history_first”意味着历史库优先。哪怕主库封锁,只要历史节点发合法包,系统仍会接受回灌。
邱夜清看着这三行,脸色比机房灯还白:“我们封的是门,他们走的是地下室。”
沈策把文件导出,顺手打开另一份“名单映射表”。映射表里五名目标不是随机挑的,而是对应五个基础设施域:
周秉德 → 水务
陆怀先 → 授时
唐照临 → 义庄/殡运
顾玄照 → 道观/符码
楼百明 → 纸扎/运输
每个人后面都挂着一个字段:`birth_offset_ready = 1`
这是“生辰错位”完成标记。
“他们已经把五域钥匙配齐了。”沈策说。
邱夜清问:“下一步会怎样?”
“五域同秒后,系统会尝试并线。”沈策把视线落在文件底部,“并线条件还差一个:全城停电表统一校时成功三次。”
“井中火刚完成第三次。”
“对。”
机房外,天光彻底亮起,主楼大厅传来上班人群的脚步和电梯叮声。地上世界的常正在开始,地下逻辑却已经被改写。
九点三十,专案会临时加开。沈策把证据按链路排在屏幕上:井中火志、停电表对秒、生辰批量改写、历史镜像暗节点、道箓旧网隧道。每条证据单看都像技术故障,串起来就是完整作案架构。
会议室安静了很久,最后是局长先开口:“能不能一句话说清他们在什么?”
沈策回答很直接:
“他们在用‘生辰’把人变成合法参数,用‘停电表’把故障变成合法时钟,再用‘历史库’把伪造写成历史。等历史变成事实,整个城市会按他们的节律运行。”
“我们能阻止吗?”
“能,但要快。”沈策说,“第一,立即切断历史库优先回灌;第二,冻结所有与出生字段相关的自动任务;第三,追到最上游节点,也就是PS_HIS_MASTER_ARCHIVE。”
网安组长补充:“这个上游节点按资产表属于‘公安历史库主镜像’,理论上在封存区,不对业务开放。”
邱夜清冷笑一声:“理论上。”
会后,沈策独自去了法检楼顶抽了支没点燃的烟。他并不想抽,只是需要一个让手停下来的动作。手机振动,是技术组刚发来的最终溯源报告。
报告第一页只有一句话:
“首条生辰篡改写入源:公安历史库主镜像(PS_HIS_MASTER_ARCHIVE)。”
他把报告转给邱夜清。邱夜清很快回了四个字:
“不是内鬼,是内核。”
沈策盯着那行字,脑子里只剩一件事清楚起来:
他们一直追的是执行层的手。
现在,终于摸到了写历史的人。