14. 审判

天亮前的最后一个小时,顾夜白回到了地下机房。

许辞还在原来的位置,三台显示器上的进度条已经跑到了百分之九十七。他听见脚步声,没有回头,只是用手指敲了敲屏幕右上角一个不断跳动的数字——那是已经完成比对并生成证据链的记录条数,数字正在以每秒钟几十条的速度向上翻滚。

“沈夜白是不是把U盘给你了?”许辞问。

顾夜白把银色U盘放在工作台上。许辞拿起来接入电脑,屏幕上弹出一个加密卷的密码输入框。他输入了一串字符——NEMOMEIMPUNELACESSIT,全大写,无空格。密码正确。文件夹展开,里面是十七个PDF文档和一份纯文本文件。纯文本文件的标题是《全国统一考试电子化数据管理系统底层架构设计说明书(梅达历四十七年第一版)》,作者署名魏仁。

“这就是原始手稿。”许辞快速滚动着页面,眼镜片上倒映着飞速掠过的代码和公式,“里面写了所有东西。后门程序的设计逻辑、分数分配公式的算法框架、三十七人网络的权限分级规则——连每个人对应的操作节点编号都列得清清楚楚。这份文档如果全部公开,任何一个有中级编程能力的人都能照着它复刻一套一模一样的系统。”

“所以不能全部公开。”顾夜白说。

许辞的手指停下来。他转过身看着顾夜白,眼神里没有意外,只有一种被验证了某种判断之后的平静。

“沈夜白说你不会全部公开。我说你会的,因为你是一个警察,警察的职责是把所有证据原封不动地提交给法庭。他说你不只是一个警察。”许辞摘下眼镜放在键盘旁边,“现在看来他说得对。”

“公式和设计原理交给你做系统修复的参考。权限分级规则和节点编号交给专案组做刑事追查。但后门程序的具体实现代码——那些可以直接复制粘贴运行的部分——不能公开。这是我和沈夜白达成的条件。”

“沈夜白还跟你达成了什么条件?”

“他让我选。第一,要不要放过魏仁。第二,要不要放过他。”

许辞沉默了一会儿。进度条跳到百分之九十八,机房里响起一声短促的提示音,像某种倒计时走到最后一段时发出的警告。

“你知道沈夜白为什么要选择天文台跟你见面吗?”许辞站起来,走到墙上那张手绘网络拓扑图前面,手指点在顶部的一个红圈上,“天文台的望远镜是他读研期间参与建设的最后一个项目。那个项目叫‘梅达暗物质巡天计划’,任务是用广角望远镜扫描南天区的暗物质分布。他在项目里负责数据管线——把望远镜每晚产生的几百TB观测数据实时传输到地面处理中心。他做的数据管线后来被评为了当年的优秀毕业论文。答辩那天,他的导师问他:你做这个课题的意义是什么?”

“他怎么回答?”

“他说,在几百TB的噪声里找到一个信号,和在几十万份试卷里找到一个被篡改的数字,本质上是同一个问题。都是海量数据里隐藏的异常点检测。他的导师以为他在做纯技术。他其实一直在研究考试系统的数据漏洞。毕业之后他没有去天文台工作,也没有去任何科技公司,而是一头扎进了卡维纳城中村,租了一间没有窗户的地下室,开始搜集考试院的所有公开数据。他用了整整两年时间,把二十年里所有公开版本的统考成绩统计公报全部下载、清洗、比对,然后他发现了那条曲线。”

“何崇山笔记里的微调曲线?”

“对。但他不是从内部看到的,他是从外部反推出来的。他用的是一个天文学家处理观测误差的方法——把二十年所有公开的分数分布直方图叠在一起,发现每一年的分布曲线都会在放榜后大约三周发生一次微弱的偏移,偏移的方向永远是从低分区向高分区移动,幅度逐年递增。这种偏移在统计学上不可能是自然误差,只能是人工干预。”许辞的语气里带着一种技术人特有的敬佩,像是在描述一个极具美感的算法,“他没有内部权限,没有内部线人,没有碰过任何一份非法数据,仅凭公开的统计公报就把魏仁的微调操作反推了出来。然后他把这份分析报告匿名寄给了考试院纪委。纪委没有回复。他又寄了一份给教育部监察局。依然没有回复。第三份他寄给了梅达共和国最高检察院,附上了全部的推导过程和数学证明。检察院给他回了一封信,只有一句话:感谢您的举报,我们会依法处理。”

“后来呢?”

“没有后来。那封信之后,一切照旧。下一年的统考放榜,分数分布曲线依然按照魏仁设计的方向偏移,幅度甚至比前一年更大。沈夜白等了整整一年,等到了一个结论——这个系统里的所有内部纠错机制都已经失效了。不是不存在,是失效。每一个应该负责监督的环节都被同一种力量关掉了。他想从内部修好它,但内部已经没有可以修理它的工具了。”

进度条跳到百分之九十九。屏幕上的提示音再次响起。

“然后他选择了从外部拆掉它。”顾夜白说。

“对。他说如果一个系统已经无法从内部修正,那就必须在外部制造足够大的压力,让整个社会被迫面对它。杀方礼人不是为了杀一个人,是要制造一个让所有人都无法再假装看不见的现场。用文学经典当犯罪签名,不是为了炫耀,是为了让媒体无法拒绝报道——媒体可以不报道一个普通命案,但无法拒绝报道一个模仿推理小说的连环杀手。秦望山死后,他把那张《罗杰疑案》的卡片放进现场,就是要让警方和媒体同时意识到这不是个案,是系列。每一步都是为了把舆论压力一步步加到这个已经僵死的系统上,直到它扛不住。”许辞把眼镜重新戴上,看着屏幕上那个已经跳到百分之百的进度条,“现在压力已经到了。”

进度条消失了。屏幕上弹出一个新的窗口,标题写着“全量证据链生成完毕”,下面是一行数字:共完成比对42891条,确认篡改记录42891条,生成区块链校验值已同步至主网。

“证据链已经上链了。”许辞敲了一下回车,屏幕上出现一个巨大的二维码,“任何人扫描这个二维码,都可以在区块链浏览器上查看到全部证据的哈希值。哈希值是无法伪造的数据指纹,一旦生成就不能篡改。从现在开始,这份证据链在法律上已经固定了。”

“可以提交法院了?”

“不。”许辞转过身,表情在服务器蓝光里显得异常严肃,“在提交法院之前,我需要你帮我一个忙。把沈夜白在天文台跟你说的那几句话——关于方程的那几句——原封不动地告诉我。”

顾夜白复述了一遍:“正义和公平从来都不是同义词。”

许辞听完以后沉默了很长时间。他用手指在桌面上慢慢画了一个等号,又在旁边画了一个不等号,像是在演算某个极复杂的数学题。

“他说得对。正义是过程,公平是结果。你抓了魏仁,正义实现了,但那些被篡改的分数并不会因为抓了魏仁就自动复原。抓他是惩罚,不是修复。真正的公平是把每一分都还给每一个考生。但这件事靠抓一个人做不到,要靠系统更新。”他停顿了一下,“系统更新的技术方案我已经准备好了,所有代码都写在里面。你拿给最高检察院的时候,可以把这份方案一起提交。但是技术方案需要最高法院的司法授权才能上线。而司法授权需要理由。理由就是这份证据链。”

“也就是说,技术方案和证据链是互为前提的。没有证据链,法院不会批准上线新系统。没有新系统,证据链只能用来抓人,不能用来修复分数。”

“你理解得很准确。”

顾夜白拉过一把椅子坐下。机房里的蓝光在他脸上跳动,像一层永不凝固的冰。他想起槐树街十九号的红砖楼,想起何崇山在《复活》书页间夹着的铅笔字,想起秦铮摘下戒指放在张朴桌面的那个动作,想起魏仁站在露台上背对着他说“你刚才放弃的不是逮捕我的机会,而是成为英雄的机会”。所有的碎片在这一刻忽然拼接成了一个完整的画面——每一个人都在用自己的方式回答同一个问题:当法律无法抵达某些地方的时候,你用什么来填补法律的空白?

“我今天上午会去最高检察院。”顾夜白站起来,“你把证据链的副本、技术方案、还有一份案件进度说明全部打包好。在正式提交之前,我不会告诉任何人沈夜白在哪里。但提交之后,逮捕他的程序会启动,我没有权力阻止。”

“他知道。”

“他还知道什么?”

许辞从口袋掏出一张叠好的纸,展开。上面是沈夜白的笔迹,只有两行字。

“顾夜白会在提交检察院之后来抓我。他来抓我的时候,就是我该走的时候。请告诉他,不用来了。”

顾夜白盯着那行字看了很久。天快亮了,地下机房里没有窗户,看不见外面的光线变化。但他能感觉到时间正在一分一秒地流逝,像机房地板下某根水管里渗出的水流,无声而不可逆转。

“他说他该走的时候——走去哪里?”

“他没有说。”许辞把纸重新叠好,“但我认识他三年了。三年里他从来没有在任何地方停留超过三个月。他把自己设计成了一个不可追踪的信号源,永远在移动,永远不留下固定的坐标。他之所以这次在卡维纳留到现在,是因为故事还没有结束。现在故事要结束了,他也要消失了。”

顾夜白沉默了片刻。

“他有没有告诉过你,他的真名为什么叫沈夜白?”

“告诉过。他出生在一个叫青石沟的村子。”许辞的声音忽然变得很轻,“父亲在煤矿工作,母亲在家种地。他十六岁那年参加中考,成绩是全县第一。但那年县里最好的高中只有一个名额,他的名额被县教育局一个副局长的儿子顶了。他父亲去县里讨说法,被保安打了一顿,回来以后没吭声。第二年春天死在矿下。他母亲把他送到镇上读了一所普通高中,高考那年他考了全县第三,但已经不敢填太好的学校了。最后他填了卡维纳大学,因为卡维纳大学有一个政策——农村贫困生可以免学费。”

机房里的服务器忽然发出了一阵散热风扇全速运转的嗡鸣,像一声被压得很低的叹息。

“青石沟。”顾夜白重复了一遍这个名字。孟长河的家乡。方礼人的家乡。他忽然意识到,这两个被同一场考试推向不同方向的人,来自同一个村。而那个用公开数据反推出整个作弊系统、却无人理会的年轻人,也来自同一个村。一片偏僻的山沟,孕育了三个被分数决定了命运的人——一个成了系统的设计者之一,一个成了系统的受害者,一个成了系统的埋葬者。

“他走之前留了一件东西给你。”许辞弯下腰从工作台底下拿出一本书,推到顾夜白面前。

书的封面是深蓝色的,烫金书名已经有些模糊了——《审判》,弗兰兹·卡夫卡。扉页上夹着一张卡片。

“这一本是下一桩命案的道具。但他不打算用这一本了。他说,在所有的文学经典里,只有《审判》没有写完结尾。卡夫卡死之前没来得及告诉读者,约瑟夫·K最后到底有没有走出那座法庭。他说这个结尾该留给你来写。”

顾夜白翻开书,看到扉页上有一段手写的字迹。

“顾警官,我没办法用自己的命去换魏仁的归案,因为我的命不够值钱。但我可以把自己变成一个所有人都看得见的罪人,让这个国家的每一个人都不得不思考一个问题:为什么有人宁愿成为罪犯,也不愿意再相信法律?如果有一天他们想通了这个问题,那我的所有罪行,就都有了意义。这十二场死亡里,我亲手做过的那一场,我愿意承担全部的法律责任。其余的,交给历史。”

签名不再是“满分杀手”,而是一个工工整整的真名——沈夜白。

顾夜白合上书,把卡片收进口袋。机房的蓝光在他身后闪烁了一下,然后稳定下来。天应该已经亮了,地面上,这座城市正在醒来。学生们背着书包走向学校,职员们挤进地铁,无数块手机屏幕同时亮起,推送着同一条新闻——全国统一考试数据篡改案证据链已提交最高检察院,区块链校验值正式生效。

“许辞,沈夜白走的时候,戴戒指了吗?”

“他从来不戴。他说没有人能在他伤害过的人面前全身而退。他没有伤害过的人,也不需要一个戒指来证明。”

本章评论(0)

暂无评论,来抢沙发吧!

我来评论

您的邮箱地址不会被公开。 必填项已用 * 标注