江寒用Python设计了一个程序,将“弹性碰撞”算法实现了出来。
所谓“弹性碰撞”,通俗的说法就是“碰瓷儿”。
首先准备一个种子函数,然后让算法随机修改函数的参数和结构,衍生出各种各样的函数。
在极其罕见的情况下,有的函数可能与81个核心方程中的某一个,在某些特征上表现出足够的相似度。
当搜索到了这样的函数,就将其替换到“苹果核”上去。
众所周知,两个同阶微分方程,如果结构、系数等方面,并不完全相同,那么通常来说,就是两个完全不同的方程,理论上来说,是不能互相替换的。
但在计算机中,有的时候这样做却是可行的。
这是因为,任何计算机的精度都是有限的,只能近似地体现出方程或函数的部分特征,而非全部。
所以,如果两个函数或方程,在某些方面可以重合,尤其是上下文中需要体现的那部分特征,只要没有出现任何出入,那么就可以在计算机内部,将两者等同看待。
当然,单靠人力计算,想要进行这样的碰瓷儿,几乎是不可能的。
但现在嘛……
有了“弹性碰撞”算法,就为机器求解提供了实施的途径。
相比于穷举法,“弹性碰撞”的优点是可以节省大量时间,缺点就是可能存在漏解。
而且,这是一种碰运气的算法,可能一秒钟就能找到答案,也可能一辈子都找不到。
那么,如何提高碰瓷成功的概率,缩短等待的时间呢?
答案很简单,可以采用并行计算。
好吧,说实话,这个时候,江寒就深刻地认识到量子计算机的优越性了。
而在只有经典计算机的当下,解决这种大规模计算,只能靠人多力量大……
江寒将“弹性碰撞”程序上传到了自己布置在车库中的IBM服务器和五台工作站中,让它们同步运行了起来。
随后,他就拿出一本《密码学算法》,看了起来。
每隔大约1个小时,江寒就通过笔记本电脑,远程检查一下服务器和各个工作站,看看“弹性碰撞”的运行情况。
事实证明,他今天的运气还真不错。
仅仅在第3次例行巡查中,江寒就欣喜地发现,居然有三台工作站,找到了可用数据。
碰瓷成功!
接下来,就比较简单了。
将这3条数据中的任意一条,替换到“苹果核”上去,都会让原本完美无瑕的坏苹果,产生一条细微的裂隙。
如果将3条数据全部换上去……
江寒这样做完之后,欣赏着遍体鳞伤的“苹果核”,不禁满意地一笑。
随后他就开始抽丝剥茧,手工拆解“苹果核”。
这个过程异常繁琐,持续了足足10个小时。
晚上8点左右,夏如虹回来了。
江寒就捧着笔记本,回到了自己的房间,然后继续操作。
直到天色蒙蒙亮,他才终于将苹果核中,那些冗余的方程和参数,全部手工合并、排除掉。
现在只剩下了一条高阶微分方程,只是经过多次变形,看起来已经十分丑陋,且臃肿不堪……
接下来,就是设计一个穷举算法,为这个方程求出一组近似解,再以这组数值解为核心,打造出一把“削皮刀”,给“坏苹果”脱壳……
凌晨5点,被彻底洗白白,焕然一新的“坏苹果”,终于再次出现在了江寒的眼前。
先将其写入坏苹果基板,试着运行了一下。
结果十分令人欣喜,程序运行完全正常。
这说明在脱壳的过程中,原始数据并没有任何损坏。
接下来,江寒又用Python编写了一个小工具,对比了一下脱壳前后的ROM。
对比结果显示,加密后再次洗白的“坏苹果”,比原始文件多出了大约11%的垃圾数据。
江寒看到这个结果,忍不住叹了口气。
数据终究还是被污染了一点点。
这说明自己的解密步骤,并没有臻至十全十美,仍有可优化的地方。
不过,这些垃圾数据虽然没什么用处,但一般来说,也不会产生任何危害。
就算放着不管,也完全没关系。
接下来,江寒再次登录了KAGGLE官网,进入锦标赛页面,将焕然一新的坏苹果传了上去。
一切搞定,已经凌晨6点多,江寒洗了把脸,直接下楼。