卡维纳大学天文台坐落在校园西北角一座低矮的山丘上,白色的穹顶在夜色中像一颗被遗忘在人间的满月。通往山顶的石阶长满了青苔,两旁的路灯早就坏了,只有天文台圆顶下方一圈蓝色的环形灯带还在亮着,在雾气中晕开一圈朦胧的光环。顾夜白爬到山顶时,穹顶的观测窗正完全敞开着,巨大的天文望远镜斜指向东南方的夜空,镜筒在月光下泛着冷白的金属光泽。
圆顶内部是一个挑高超过十米的半球形空间,墙壁上涂满了消光黑漆,地面上铺着一层已经磨损的橡胶垫。各种老旧的星图和天文照片用图钉潦草地钉在软木公告板上,有些照片已经翘了角,在穿堂风里轻轻摆动。一架铸铁螺旋梯通向观测平台,平台上站着一个穿黑色连帽衫的人,背对着门口,正透过望远镜的目镜看向夜空。
“满分杀手。”顾夜白站在螺旋梯底部,手按在腰间的枪套上。
那人从目镜前抬起头,但没有转身。他穿着一件洗得发灰的黑色连帽衫,帽子没有戴,露出后脑勺修剪整齐的短发。左手扶着望远镜的微调旋钮,无名指上空空荡荡,没有戒指。
“以前从来没有人这么叫过我。这个名字是我给自己的编号,但我从来没有亲口对任何人说过。”他的声音比加密电话里要低沉一些,去掉了金属变声器的过滤之后,露出了一种被长期压抑之后才会有的沙哑质地,“秦铮告诉我,他觉得满分杀手这个名字太中二了。我说没办法,取名字是文学创作的一部分。”
他转过身。
那是一张大约二十五六岁的脸,比顾夜白想象中年轻得多。五官端正但不出众,属于那种走在人群里不会引起任何注意的长相。眼眶下有长期睡眠不足留下的青灰色阴影,嘴角微微上扬,笑意没有到达眼睛。他穿着一件卡维纳大学研究生院的文化衫,胸口印着“计算机科学系”几个字,字体已经洗得褪了色。
“我叫沈夜白。”他说。
顾夜白愣了一下。沈夜白。夜白。和他的名字只差一个姓。
“我知道你在想什么。不是巧合。”沈夜白从螺旋梯上缓步走下来,每一步都踩得很稳,“三年前我在考试院内部档案里查到了你的资料,发现你和我同年同月参加统考,同年被警校录取。你的分数是五百七十九,我的分数是五百九十一。差十二分。那十二分里差出一个重案组刑警,和一个连环杀手。”
“你不是连环杀手。方礼人是先生下令杀的,秦望山也是。你承认过的。”
“方礼人是我杀的。”沈夜白说这句话的时候语气很平,像是在陈述一个已经复核过多遍的实验数据,“电梯里的裁纸刀,卡片上的字,密室状态的伪造——全是我做的。我模仿了《人性的证明》,因为方礼人这辈子都在用人性的弱点做生意。他贩卖恐惧,我让他死在恐惧里。至于秦望山,我没杀他,但我利用了他的死亡。魏宗岳下毒之后,我第一时间拿到了秦望山的手机,把那条短信和《罗杰疑案》的线索放到了他的床头柜上。我不能阻止所有人被杀,但我能让每一桩死亡都指向同一个方向——真相。”
“林墨呢?林墨也是你杀的?”
沈夜白沉默了片刻。天文台的穹顶里只有望远镜自动跟踪系统的马达在发出细微的嗡鸣声,像一只昆虫在夜空中扇动着看不见的翅膀。
“林墨的死不是任何人的预谋。他是在发现自己的分数被篡改之后,去考试院申诉了五次,五次都被驳回。他给媒体投了七份材料,七份全部石沉大海。他最后的选择是把自己反锁在房间里,点了一把火。”沈夜白的声音缓慢地沉下去,“他没有死在任何人的刀刃下。他死在自己对这个世界的信任崩塌之后。但我确实在利用他的死——他的死是整个计划的起点。因为他是满分,真正的满分。他是我见过的最干净的数字,却被一个系统当成了可以被擦掉的铅笔痕迹。从我知道他的名字那天起,我就决定要让这个系统付出代价。”
“你是从什么时候开始计划的?”
“三年前。准确地说,是许辞在考试院公开论坛上发布他的第一篇漏洞分析文章那天。那篇文章分析了全国统考数据库可能存在的后门类型和权限漏洞,写得极其专业。我当时是计算机科学系的研究生,正好在研究教育系统的数据安全问题。我顺着他的文章摸到了后台的一个测试接口,发现那个接口真的能通进去。”沈夜白的眼睛里第一次出现了某种非理性的东西——不是疯狂,而是一种沉浸在技术世界里太久的人谈到某个重大发现时才会有的光亮,“那天晚上我在实验室里坐了整整一夜。我看着屏幕上那些可以被任意修改的数据,忽然意识到一个问题:如果我能看到这些漏洞,那在我之前一定有人已经在使用它们了。我不是第一个发现漏洞的人,我是第一个想要把漏洞堵上的人。但堵上之前,我要先证明这些漏洞存在过。”
“所以你不是在惩罚罪犯。你是在用犯罪的方式证明犯罪的存在。”
沈夜白轻轻地笑了一下。那笑声很短,短到几乎可以忽略不计,但里面的苦涩却足以填满整个天文台的空旷。
“你用了‘用犯罪的方式’这个说法。很准确。我杀了方礼人。我非法侵入了考试院的核心数据库。我窃取了魏宗岳的内部通讯记录。我操纵了至少三个犯罪现场的物证。我做的事情,按照梅达刑法的任何一条来判,都够我在监狱里过完下半辈子。”他把两手摊开,掌心朝上,“所以我从来没有打算在一切结束之后逃跑。我只是想在结束之前,把该做完的事情做完。”
“什么事?”
“三件事。”沈夜白竖起一根手指,“第一,把魏仁系统的所有证据链拼接完整。硬盘日志、原始报名表、分布图、何崇山的笔记、魏仁的手稿——五条线索在你手里,但你没有手稿。手稿在我这里。”
他竖起第二根手指。
“第二,让许辞的区块链校验协议正式上线。这件事他一个人做不了,因为上线需要最高法院的司法授权,而司法授权需要你手里的证据链做支撑。他是技术执行者,你是法律执行者。你们两个缺一不可。”
第三根手指。
“第三,让你亲手抓住我。”
天文台里忽然变得非常安静。连望远镜的马达声都停了,像是这台机器也在屏住呼吸等待下一句话。
“你抓住我,才能让这个案子有一个合法的结尾。满分杀手的身份被公开,作案动机被公开,所有证据链经过庭审质证之后进入公开的司法档案。到那时候,魏仁就算再会躲,也无法阻止庭审记录被全网传播。因为他无法让整个互联网都闭嘴。”沈夜白把手放下来,表情平静得像在讲解一道数学公式,“你抓不到魏仁,但你抓到了满分杀手。公众需要一个看得见的罪人。我愿意当那个罪人。”
“然后呢?你在监狱里看着魏仁在外面逍遥?”
“魏仁在外面逍遥不了的。”沈夜白从连帽衫口袋里掏出一只银色U盘,放在工作台上,“他的原始手稿在这里。里面有他二十年前写的分数分配公式、后门程序的设计原理、三十七人网络的通讯规则、以及一个他从未公开过的私人加密区块链钱包的密钥——那个钱包里存放着过去二十年他向所有戴戒指的人分发操作费的完整账目。这份手稿一旦公开,每一个收过他钱的人都会被曝光,包括那些现在还在卡维纳教育系统里担任要职的人。他会失去所有的保护伞,变成一个没有盔甲的影子。”
顾夜白看着那只U盘。月光从穹顶的观测窗洒下来,在U盘的金属壳上投出一道狭长的光斑。
“你什么时候拿到这份手稿的?”
“前天。魏宗岳在决定交名单之前,先把他能拿到的最高价值的材料复制了一份,寄给了秦铮。秦铮转给了我。”沈夜白说,“魏宗岳不信任警方,不信任检察院,甚至不信任他自己的律师。但他信秦铮。因为秦铮没杀他儿子。秦铮选择了举报魏明楼而不是杀他,这个行为让魏宗岳在最后关头选择了交出自己的底牌。你看,善意有时候真的有用。”
“所以这是一场接力。魏宗岳交名单,张朴交硬盘,何崇山交分布图和笔记,许辞交技术方案。最后你把手稿交给警方,然后把自己也交出来。每一个人都在交出自己拥有的东西。”
“不是每一个人。魏仁什么都没交,他选择了消失。”沈夜白把U盘推近了几厘米,“但他消失的前提,是我完成这最后一步。他今天凌晨劫走魏宗岳时留下了一张纸条:你不会在法庭上见到他。他不是在威胁你,他是在告诉你——规则变了。从现在开始,这场游戏里已经没有法庭了。只有你和我。你选哪一边?”
顾夜白没有立刻回答。他走到观测窗前,透过那道敞开的缝隙看向山下的卡维纳。城市的灯光在夜色中像一片被冻结了的星海,每一点光都是一扇窗户,窗户后面都有人在做着自己的梦。天亮之后,这片光海里的许多人会打开手机看到新闻,看到“满分杀手”落网的消息。他们会如释重负地点点头,说正义终究没有缺席,然后继续埋头去上班、上学、挤公车、交房贷。但那个真正需要被追捕的人——那个用二十年时间把四万三千人的命运当小数点一样微调的人——此刻正坐在某个无人知晓的角落里,看着同一片夜色,等待着这场游戏的下一个回合。
“我有一个条件。”顾夜白转过身。
“什么条件?”
“手稿不用公开全部内容。公式和后门设计原理交给许辞做系统修复的参考,但不作为公开庭审的展品。你刚才也说过——这份手稿是操作手册。一旦公开,任何有基础编程能力的人都可以照着它再建一个魏仁系统。我不想用消灭一个恶魔的方式,让这个恶魔的后代在每一个大学毕业生的机房里重新孵化出来。”
沈夜白盯着他看了几秒钟,然后笑了。这一次,笑意到达了眼睛。
“许辞说你会这么想的。他说,顾夜白这个人,最大的弱点是不愿意成为第二个魏仁。我当时觉得这是他的一厢情愿。现在我觉得他说得对。”他把U盘推到桌沿,“手稿给你,怎么用,你决定。我的第二件事已经做完了,第三件事随时可以开始。但在此之前,我还欠你一个答案。”
“什么答案?”
“你刚才在天文台外面犹豫了至少五分钟才决定走进来。你犹豫的事情和我要问你的问题有关——如果你拿到了手稿,你是公开它,还是销毁它?现在你已经回答了:部分公开,部分封存。那我接着问下一个问题。”
沈夜白走到工作台对面,用一支记号笔在软木公告板上钉着的一张空白星图上写下了两行字。字迹和那些卡片上的一模一样,黑色墨水,工整而冷峻。
“第一个问题:如果修复系统的代价是放过魏仁,你放不放?”他停顿了一下,“第二个问题:如果放过魏仁的代价是让我离开,你让不让?”
月光偏移了一个微小的角度,将他写在星图上的字迹笼在了一片银色的光晕里。
“你不用现在回答。天亮之前,你还有时间。”沈夜白把记号笔放回桌上,“但你做决定的时候要记住一件事:你正在面对的不是两个选择,是一组方程。方程的一边是正义,另一边是公平。而正义和公平,从来都不是同义词。”


暂无评论,来抢沙发吧!