话说当年宋江在江州浔阳楼题了反诗,被江州知府蔡九关押在死牢。蔡九依黄文炳之计,写家书给父亲蔡京,以炫耀“抓获反贼”之功,并让蔡京指点如何处置宋江。

岂料戴宗中途被朱贵药酒迷倒,被同家书一并递与梁山。晁天王听完宋江在牢中心急火燎,定是要带着头领们打入死牢解救宋江,军师吴用却阻拦道:哥哥莫急,此事不可力敌,只能智取—— 我等将计就计,写一封假回书,让戴院长带回去,书上只说教把犯人宋江解赴东京再处决示众,待他来此间经过我们夺了便是。

晁盖道:好是好,只是没人会蔡京笔迹,又没蔡京图章。吴用说有圣手书生萧让可写蔡京字迹,玉臂匠金大坚可刻图章。诸位好汉无不称妙之时,忽闻一声且慢,原来是神算子蒋敬,蒋敬上前道:军师且慢,请细看此家书封底。

众人凑近细看,发现有两行蝇头小字,上书“七四八六九零八八七二三一九三”,下书“四六七三二九七五三”。

晁盖吴用不解,问道:先生这是何意?

蒋敬道:此乃“数章”,用以验明书者正身,文未篡改。

吴用道:寥寥二十余字如何验得,还请先生赐教。

蒋敬在地上画道:此书有两百余字,取首字“今”,得其笔数为四,记于纸上,次字为“有”,其笔数为六,四六得二四,取第二四字,得其笔数为七,记于纸上,七再乘第二五字笔数,再记所的字笔数,若超总字数,则从首再计,如此往复九循,可得“散列”,又名“土法哈希”,若此数无异,可保文未篡改。

吴用叹服之余,又道:今先生既已得“土法哈希”之术,我等效之算出“散列”,书与家书封后,岂不万全?

蒋敬道:军师且听我言,这两行字上面是“数签”,下面则是“数密”。古人云,数若三,七,十三,十七,十九者,除以非一之数,皆无穷尽,谓曰“孤数”。蔡九藏一孤数,名天孤,蔡京写信前新取一孤数,名地孤。天孤乘地孤之积,为数密,又名“土法土法阿爱斯爱”。蔡京以地孤乘“散列”,可得“数签”,“数签”、“数密”记于家书封底,待蔡九收到时以“数密”除以天孤,可得地孤,以验“数签”,可知此书真假。蔡九回书,亦是如此。

晁盖忙道:如今我等既知“数密”,令梁山数百识得数的兄弟分头去算,不过半日,岂不得天孤地孤?

蒋敬叹气道:哥哥所不知啊,由天孤地孤得数密只需三个时辰,可要从数密得天地孤,用尽天下算筹算到黄天更替也不一定算出来啊。
晁盖林冲等一帮头领顿足叹气时,吴用道:我有一计,可破此“数签”,令鼓上骚时迁去蔡九府上,盗一封旧家书,假回书只要字数一致,关键字照用旧家书的字,其他内容遣词填补,更替语义,便可不知天地孤亦能造假。
晁盖蒋敬拍手称秒:军师不愧为智多星!当下吩咐首领们去做。

话说戴宗扣着日期,回了江州,当厅下了回书,蔡九见戴宗如期归来,好生欢喜,令下人算了地孤,验了数签,心里踏实了。过了两日,临要押送宋江出发时,门子来报“无为军黄通判前来特探”,蔡九将回书给黄文炳看了一番,黄文炳看行文古怪,心有疑虑,又亲自算了一遍地孤和数签。卷过来一看,又见封面新鲜,摇头道:这份回书是假的。

知府到:通判差矣,此是家尊亲笔手迹,又有数签可证,怎会是假的。
黄文炳道:我方才又算,得地孤是“六一五一九”,蔡权相府上选地孤,几月便选几开头的地孤,如今九月,此地回书必定是盗用旧文书伪造而成,此乃“时密不符“。

蔡九一惊,急忙唤回戴宗,盘问之下,戴宗不能对答。随即将戴宗一并打入死牢,等候处斩。


注解

  • 数章:数字签名,数字签名通过摘要和加密算法来保证原文的真实性。文中的数字签名(数章)分成了两部分,第一行是加密后的摘要内容(数签),第二行是加密采用的公钥(数密)。
  • 土法哈希:Hash,散列函数。实际散列函数计算方式很复杂,文中所写的通过笔画和字的位置算摘要的方法非常简陋,只能保证确定性,却不具备唯一性,很容易出现散列冲突(或者叫哈希碰撞),文中吴用在后面发现了这个特性,并利用哈希碰撞一定程度上破解了这个算法。我们常见的MD5和SHA1等都属于Hash算法,MD5和SHA实际上也存在哈希碰撞(Collision)的可能,王小云教授破解MD5正是利用了这个原理。
  • 土法阿爱斯爱:RSA,目前最著名的非对称加密算法,RSA算法的核心是极大整数的因数分解和欧拉定律。文中的加密方法只是单纯的利用了大整数难以分解因数的特性,实际上RSA的计算过程和秘钥长度都复杂很多。
  • 孤数:素数/质数,中国古代数学其实并没有素数这个概念。
  • 天孤:用来当私钥的大素数。
  • 地孤:用来实际和哈希值参与计算的素数。
  • 时密不符:时间戳不匹配。在数字签名里加上时间戳可以防止重放攻击,保证信息的时效性。文中蔡京指定发信月份和素数首位匹配,能简单的保证信件时效性,也弥补了哈希算法过于简单导致的被碰撞的漏洞。黄文炳最终靠这一点发现了信件是伪造的。

这篇故事新编是我几个月前某天晚上一时兴起发在朋友圈里的,换了种方式给大家科普加密算法。
但为了故事氛围和易于理解,将概念都简化了,到底还是戏说。各位有兴趣可以去网上再找资料进一步了解。