晋江文学城
下一章 上一章  目录  设置

7、凌晨一点十四分 一次失控的 ...

  •   陆星迟的邮件在凌晨一点十四分到达。

      收件人只有沈砺川,主题没有寒灯、没有A401,也没有任何会触发学院系统过滤的词,只写着:关于你今天的报名错误。

      沈砺川看到时已经躺下。他没有点开附件,先把邮件转发给许砚知,随后发了一条消息:醒着吗?

      许砚知三分钟后回复:邮件原始头发我,不要下载附件。

      沈砺川盯着“不要下载”四个字,手指在屏幕上停了一会儿。过去的他大概会先点开,确认有没有危险,再把已经处理过的结果告诉别人。现在他把手机放到桌上,起身开电脑,只导出邮件头和服务器签名信息。

      许砚知很快打来语音:“发件域名不是学校邮箱。”

      “陆星迟毕业后没用过学校邮箱。”

      “你怎么确认是他?”

      “我认得地址。”

      “地址能伪造。”

      “我也认得他写主题的习惯。”

      “习惯不是身份校验。”

      沈砺川靠在椅背上,意外地没有烦:“那按你的方法。”

      “明早找贺承远做挑战验证。今晚别回。”

      “如果他等不到呢?”

      “真是陆星迟,他会理解谨慎。如果不是,更不能回。”

      语音另一端有翻书声。沈砺川问:“你本来就在查资料?”

      “在补今天的协作台账。”

      “你给生活也写记录?”

      “现在先睡。”

      “许队命令?”

      “协作建议。”

      沈砺川笑了一下,把邮件标成未读。关机前,他又看了一眼附件名:b3_key_fingerprint.txt。

      第二天复杂度分析课,老师用一整块黑板讲最坏情况。程序在平均输入下跑得很快,不代表它面对刻意构造的数据仍然可靠;复杂度不是一串漂亮符号,而是系统在压力最大时会不会失控。

      沈砺川坐在最后一排,难得没走神。他的邮箱里躺着一个未经验证的附件,竞赛系统昨晚又有来自A401楼层的管理查询。每一件事单独看都不算致命,叠在一起却像有人在逐步测试他们的反应。

      许砚知把老师给的例题算完,推过来一张便签:上午十点,A307,贺承远在。

      沈砺川在下面写:我没点。

      许砚知看了一眼,写:第三次关键操作,通过。

      “这么容易?”沈砺川用气声问。

      “你做了以前不会做的事。”

      这句话让他安静了几秒。老师恰好回头,点沈砺川回答:“为什么平均复杂度不能替代最坏复杂度?”

      沈砺川站起来:“因为系统不会承诺只给你友善输入。尤其有人知道你靠什么判断时,他可以专门挑你最容易犯错的情况。”

      老师点头:“很好。坐。”

      许砚知没有评价答案,只在讲义边上记下了一行:对方可能在测试边界。

      A307的验证没有直接打开附件。贺承远先让沈砺川写下只有他和陆星迟知道、却不涉及隐私的问题:寒灯停项前最后一次内部测试,陆星迟把哪台设备的标签贴反了?

      沈砺川想了想,写:机柜二层的交换机和路由器标签对调,周闻因此查错半小时。

      贺承远通过一次性网页发送问题,要求对方在十五分钟内回答,并用邮件附件中的密钥签名。八分钟后,对方回复:不是周闻查错,是你先把线插错,周闻替你背了半小时。签名验证通过。

      沈砺川看到那句话,先闭了下眼,再说:“是他。”

      “为什么?”林疏月问。

      “因为只有他会连纠正都纠正得这么完整。”

      验证通过后,贺承远在隔离环境里打开附件。文件里是一组SSH公钥指纹和三条日期。最旧的一条属于陆星迟,三年前失效;第二条属于SLC临时令牌,事故后第二天吊销;第三条没有姓名,签发时间是上周四,权限范围包含B3远程唤醒和A401只读挂载。

      邮件正文终于显示出来:

      “不要直接去B3。那台机器没有按报废流程销毁,至少在上周四被重新唤醒过。我无法确认第三把钥匙是谁的。你们若要查,只能走正式授权。另:admin_view是角色,不是人。它可以被多把钥匙调用。”

      沈砺川读完第一反应是问:“他为什么现在才说?”

      许砚知问得不同:“他怎么知道上周四的唤醒记录?”

      贺承远将问题发回去。陆星迟的回答半小时后到达:他仍订阅旧系统的硬件告警邮件,因为当年没人完成解绑。上周四凌晨,他收到B3风扇转速异常告警;他尝试登录查看,旧密钥已被拒绝。

      “所以昨晚查我们报名页的,不一定是赵嵩本人。”林疏月说。

      “也不能排除他。”陈以宁补充,“角色账号、服务账号、人的密钥要分开。”

      许砚知把三种实体写在白板上:admin_view,ROOT-LAB,未知公钥。三条线目前有交集,却不能互相替代。

      沈砺川站在白板前,看了很久:“我以前一直把账号当人。”

      “很多系统都诱导用户这么想。”贺承远说,“一个名字显示在日志里,看起来像责任已经清楚。可共享账号正好把责任变模糊。”

      “寒灯当年为什么允许共享?”许砚知问。

      “赶进度。学生、助教、合作方临时共用。每个人都觉得先跑起来再补审计,最后没人能补。”

      沈砺川没有反驳。他把视线从白板移开,主动提交B3正式检查申请,附件列明目的、只读范围、在场人员和回滚方案。贺承远让他再加一条:不得利用检查环境部署追踪程序。

      “你怎么知道我想过?”沈砺川问。

      “因为我也想过。”贺承远说,“想过不等于可以做。”

      B3申请没有立刻通过。学院系统先退回一次,理由是“目的描述过宽”。沈砺川原文写的是“查明寒灯旧案相关账号的实际操作者”,这句话把四十分钟的设备检查写成了调查终点,也默认B3能给出人的答案。

      陆行简恰好到A307看本科生开放项目。贺承远把退回页面给他看,没有替他们求情,只问:“如果是你,会怎么缩范围?”

      陆行简没有看沈砺川,先问许砚知:“你们进入B3以后,哪一个结果会证明当前猜测错了?”

      许砚知答:“如果上周没有唤醒记录,陆星迟告警可能来自别的设备;如果新公钥不在B3出现,A401审批节点与B3无直接关系;如果ROOT-LAB没有导出记录,0719文件可能通过其他路径进入竞赛平台。”

      “很好。”陆行简说,“把这三项写成目的。调查不是写‘我要找真相’,而是写你准备验证什么、什么结果会改变判断。”

      沈砺川重新填写申请:核验B3上周唤醒事实;核验未知公钥是否登录;核验ROOT-LAB是否执行身份队列导出。每一项后面都附上停止条件。

      陆行简看完,只在最后加了一句:“学生不接触设备,所有命令由管理员执行。”

      “我们连键盘都不能碰?”沈砺川问。

      “不能。”

      “那很多细节管理员未必熟悉。”

      “你可以口述。无法在约束下说明白的技术判断,本来也不适合当场执行。”

      沈砺川把反驳咽回去。许砚知注意到陆行简没有用怀疑他的口气,只是把权限写得清楚。沈砺川对明确边界的抵触远小于对含糊否定的抵触,这一点以后也许比任何安慰都更有用。

      陆行简临走前,又问:“你们为什么非要参加程序赛?现在旧案已经够占时间。”

      沈砺川说:“因为不能让查旧案变成我们大学生活的全部。”

      许砚知停了一下:“也需要验证合作在没有危机的时候是否成立。”

      陆行简看了他们一眼:“那就别让危机替你们完成所有分工。”

      这句话没有被写进申请,却改变了下午训练的安排。他们把旧案材料全部锁进柜子,只留竞赛题和计时器。沈砺川负责实现时,许砚知不再逐行盯着;许砚知设计测试时,沈砺川也没有提前修改。两人分别工作十分钟,再交换结果。

      第一轮交换就暴露问题。沈砺川的程序快,却把空输入当成合法数据;许砚知的测试完整,却花了太多时间构造几乎不可能出现的极端字符串。

      “你在防宇宙射线?”沈砺川问。

      “题目没写长度至少一。”

      “比赛数据不至于——”

      许砚知抬头。

      沈砺川把后半句收回:“行,补空输入。你也删掉那个两百万位数字,数据范围只有十万。”

      他们各退一步,第二轮通过时间比第一轮快了七分钟。

      申请在这时再次提交。十五分钟后,状态从“形式审查”变为“安全评估”。

      申请发出后,下午训练照常进行。新生程序赛离正式开赛只剩四天,梁老师给所有队伍开放了第二轮模拟环境。校验失败队登录后,系统自动下发六道题。前五道正常,第六道没有题面,只显示一个输入文件,文件名是hidden_case_0719。

      0719正是SLC恢复手机记录里的尾号。

      沈砺川的鼠标停在下载按钮上。

      “先截图。”许砚知说。

      “已经截了。”

      “检查其他队有没有同样文件。”

      林疏月在竞赛群里问了一圈,十分钟内收到九支队伍回复:没有第六题,也没有0719文件。

      梁老师赶到机房,把他们的机器从网络中隔离。竞赛平台后台显示,第六题由管理员在十四点零三分定向分发,目标队伍只有校验失败。操作者仍是admin_view。

      “有人在逗你们?”梁老师脸色很差。

      “或者在测试我们会不会打开。”许砚知说。

      沈砺川已经把手从鼠标上移开。他问:“可以在隔离环境里读取元数据吗?”

      梁老师看向贺承远。贺承远点头:“只做文件哈希和类型识别,不执行。”

      文件不是题目数据,而是一段压缩后的文本。解压后只有十三行,每行是一个旧项目成员缩写和一串整数。许砚知不懂它的用途,沈砺川一眼认出:“寒灯当年的推荐队列。”

      “为什么放到竞赛平台?”

      “可能不是为了题。”沈砺川指着最后一行。那里写着XZ,后面跟着一个不存在于其他行的负数。

      林疏月问:“负数代表什么?”

      “旧系统里,负值意味着从推荐池排除。”

      许砚知在入学前就被写进了一份旧队列,而且被标记为排除。

      许砚知盯着那一行XZ,最先出现的并不是害怕,而是强烈的冒犯感。一个他从未见过的旧系统,在他入学前替他生成路径,又在新导出的队列里决定他不该被推荐。它甚至不需要知道他是谁,只要把缩写、学号和规则拼在一起,就能产出一个看似合理的结论。

      他把手从桌面收回:“我出去两分钟。”

      沈砺川问:“需要我一起吗?”

      “不需要。”

      “我在门口等,可以吗?”

      许砚知看了他一眼,点头。

      楼梯间比机房安静。许砚知走到半层平台,打开窗户,却没有风。他不是想透气,只是不想让一整间机房的人看着自己成为文件中的对象。

      沈砺川停在上一阶,没有靠近:“我不解释XZ。”

      “你也解释不了。”

      “我想说的是,你不用现在表现得没事。”

      许砚知握住窗把:“我不是没事。我很生气。”

      沈砺川没想到他会直接说出来,脸上出现短暂的空白。

      “不是因为负数。”许砚知说,“是因为有人可以用一个简写替我决定是否值得进入某个队列。那次门禁记录是这样,今天也是。只要系统输出足够像事实,旁观者就会先问我做过什么,而不是它凭什么这样写。”

      “我知道。”

      “你知道,所以你每次都想比系统快一步。”

      沈砺川靠在栏杆另一侧:“是。”

      “但你快一步以后,也可能成为另一个替别人决定的人。”

      这句话很重。沈砺川没有躲:“所以你拦我。”

      “我不能一直负责拦。”

      “我会学。”

      “不要用以后证明现在。”许砚知说,“现在回去,先把文件来源查清。你不要因为它写了XZ就改变流程。”

      沈砺川站直:“收到。”

      两人重新进入机房时,没有人追问刚才发生了什么。林疏月只把许砚知的椅子拉回原位,陈以宁把异常文件的哈希值递给他。许砚知坐下,先在记录顶部写:本人为潜在受影响对象,后续判断由陈以宁复核。

      他主动声明利益相关,让自己不必假装完全中立,也不必因此退出。

      机房里短暂地乱了起来。梁老师打电话联系平台维护,贺承远要求冻结后台账号,陈以宁检查文件时间。沈砺川站在许砚知旁边,没有说“别怕”之类的话。他问:“你要先离开机房吗?”

      “为什么?”

      “现在所有人都在看你。”

      许砚知抬头,的确有几支队伍透过玻璃往这边看。他不喜欢被围观,也不喜欢自己的缩写出现在不属于自己的旧文件里,但离开会让别人替他决定这件事该怎样解释。

      “不走。”他说,“先确认XZ是否仍是同名映射。”

      沈砺川点头,把椅子往旁边挪开,给他留出能直接看到屏幕的位置。

      他们比较文件创建时间、编码和旧索引结构。结果显示,这份队列并非三年前原件,而是上周四从旧数据库导出的新文件。导出脚本使用ROOT-LAB服务账号,分发动作使用admin_view,目标队伍则来自昨晚刚生成的竞赛账号。

      三条线第一次在同一件现行操作中闭合。

      梁老师当场暂停模拟赛,并承诺保留后台证据。许砚知没有要求公开解释,只提出两点:其他队伍不应被暗示他们作弊;这份文件不能继续留在普通竞赛服务器。

      沈砺川补了一点:“冻结不是删。请保留原始镜像。”

      贺承远看了他一眼:“这次没抢着追人?”

      “人在正式申请后面。”沈砺川说,“我先把最坏情况控制住。”

      异常文件被转移后,沈砺川提出一个技术方案:在他们的竞赛资料里放入一段不会影响运行、却能在被读取时生成告警的标记,用来确认admin_view是否继续访问。

      他说完便把方案窗口关掉,没有执行。贺承远问:“为什么关?”

      “因为这是主动追踪,超出竞赛环境用途。”

      “如果只放在你们自己的文件里呢?”林疏月问。

      许砚知说:“对方一旦访问,告警可能记录IP和身份信息,也可能改变后台行为。必须先确认权限。”

      沈砺川把方案写成一页说明,列出最小标记内容、可能收集的数据和停止条件。贺承远没有直接批准,而是带他们去信息中心找安全老师。

      安全老师看完后否决了实时回传,只允许使用静态唯一字符串:若它以后出现在不该出现的日志或文件中,可以证明资料被复制,却不会主动收集访问者信息。

      “这和钓鱼有什么区别?”沈砺川问。

      “区别在于你不诱导对方执行,不收集额外数据,也不改变系统。”安全老师说,“你只是给自己的文件做水印。”

      他们生成一串随机标记,分别放入竞赛说明和寒灯证据索引,两个标记不同。许砚知把生成过程和存放位置交由陈以宁单独保管,连沈砺川也只知道存在,不知道完整字符串。

      “为什么防我?”沈砺川问。

      “不是防你。减少知道的人,标记出现时才有解释力。”

      “那你知道?”

      “我也只知道前四位。完整值由陈以宁保管。”

      沈砺川看向陈以宁:“你忽然权力很大。”

      陈以宁把纸封进信封:“放心,我对你们之间那点弯弯绕没有兴趣,只对口径有兴趣。”

      这一套安排没有立刻抓到任何人,却让他们第一次把“想追踪”转化成了不越界、可复核的方案。沈砺川离开信息中心时说:“原来停下来不是放弃动作,是把动作换成能留下的版本。”

      许砚知答:“这次可以写进观察记录。”

      傍晚,B3检查申请获批,时间定在第二天下午。授权书限制四十分钟,必须由贺承远和实验中心管理员共同在场。

      B3授权下来后,许砚知把检查清单打印了三份。一份给贺承远,一份给实验中心管理员,一份由他们自己保管。清单没有写“寻找幕后操作者”,只写设备状态、唤醒记录、公钥指纹、ROOT-LAB执行历史和停止条件。

      沈砺川在“停止条件”下面加了一条:若发现个人医疗、家庭或与调查无关的隐私数据,立即停止读取并交管理员处理。

      “陆星迟的旧记录可能在里面。”他说,“我不想为了证明他被伤害,再把他的全部东西翻出来。”

      许砚知把这条保留。随后他在同行分工里写:沈砺川只提供命令建议,不操作;许砚知只记录,不解释账号归属;陈以宁核对时间;林疏月记录现场可见事实。

      “你把自己也限制了。”沈砺川说。

      “我现在出现在导出队列里,属于潜在影响对象。”

      “你会被换出检查组吗?”

      “贺承远认为可以旁观,但我不能单独判断XZ相关记录。”

      沈砺川把清单拿过去,在许砚知名字后面补了一句:涉及XZ时由陈以宁复核。

      许砚知看了他一眼:“这次没有直接让我退出。”

      “我在学习提供替代方案。”

      清单最后一栏是“现场情绪风险”。这是林疏月坚持加的。她写:若沈砺川因旧场景出现明显冲动,由本人先口头说明;若无法说明,贺承远决定是否暂停。若许砚知因本人数据出现而过度承担记录任务,由陈以宁接管。

      两名当事人都觉得这栏难看,却都签了字。难看不等于不需要。

      离开机房时,沈砺川手机震动。陆星迟发来第二封邮件,只有一句话:

      “第三把钥匙不是旧钥匙复用,它由学院证书中心上周新签发。申请者栏被清空,但审批节点在A401。”

      邮件下方附着签名。沈砺川把屏幕递给许砚知,等他看完才问:“明天下去吗?”

      许砚知没有回答“当然”,也没有说“你别去”。他打开B3授权书,在同行人员栏确认两个人的名字都在。

      “按名单去。”他说。

      沈砺川把授权书截图存进共享目录,又单独给陆星迟回信:检查已获批,不会私自登录;若发现与他有关的个人文件,将停止读取。陆星迟只回了一个“好”。

      这个字没有提供新线索,却确认他们没有把一个离开旧系统的人重新拖回无法选择的位置。许砚知看见回信后,把“当事人知情”加进明日检查清单。
note 作者有话说
第7章 凌晨一点十四分

  • 昵称:
  • 评分: 2分|鲜花一捧 1分|一朵小花 0分|交流灌水 0分|别字捉虫 -1分|一块小砖 -2分|砖头一堆
  • 内容:
  •             注:1.评论时输入br/即可换行分段。
  •                 2.发布负分评论消耗的月石并不会给作者。
  •             查看评论规则>>