水滸「密碼學」:梁山神運算元算天機,江州黃通判通地孤

話說當年宋江在江州潯陽樓題了反詩,被江州知府蔡九關押在死牢。蔡九依黃文炳之計,寫家書給父親蔡京,以炫耀「抓獲反賊」之功,並讓蔡京指點如何處置宋江。

豈料戴宗中途被朱貴藥酒迷倒,被同家書一併遞與梁山。晁天王聽完宋江在牢中心急火燎,定是要帶著頭領們打入死牢解救宋江,軍師吳用卻阻攔道:哥哥莫急,此事不可力敵,只能智取—— 我等將計就計,寫一封假回書,讓戴院長帶回去,書上只說教把犯人宋江解赴東京再處決示眾,待他來此間經過我們奪了便是。

晁蓋道:好是好,只是沒人會蔡京筆跡,又沒蔡京圖章。吳用說有聖手書生蕭讓可寫蔡京字跡,玉臂匠金大堅可刻圖章。諸位好漢無不稱妙之時,忽聞一聲且慢,原來是神運算元蔣敬,蔣敬上前道:軍師且慢,請細看此家書封底。

眾人湊近細看,發現有兩行蠅頭小字,上書「七四八六九零八八七二三一九三」,下書「四六七三二九七五三」。

晁蓋吳用不解,問道:先生這是何意?

蔣敬道:此乃「數章」,用以驗明書者正身,文未篡改。

吳用道:寥寥二十餘字如何驗得,還請先生賜教。

蔣敬在地上畫道:此書有兩百餘字,取首字「今」,得其筆數為四,記於紙上,次字為「有」,其筆數為六,四六得二四,取第二四字,得其筆數為七,記於紙上,七再乘第二五字筆數,再記所的字筆數,若超總字數,則從首再計,如此往複九循,可得「散列」,又名「土法哈希」,若此數無異,可保文未篡改。

吳用嘆服之餘,又道:今先生既已得「土法哈希」之術,我等效之算出「散列」,書與家書封后,豈不萬全?

蔣敬道:軍師且聽我言,這兩行字上面是「數簽」,下面則是「數密」。古人云,數若三,七,十三,十七,十九者,除以非一之數,皆無窮盡,謂曰「孤數」。蔡九藏一孤數,名天孤,蔡京寫信前新取一孤數,名地孤。天孤乘地孤之積,為數密,又名「土法阿愛斯愛」。蔡京以地孤乘「散列」,可得「數簽」,「數簽」、「數密」記於家書封底,待蔡九收到時以「數密」除以天孤,可得地孤,以驗「數簽」,可知此書真假。蔡九回書,亦是如此。

晁蓋忙道:如今我等既知「數密」,令梁山數百識得數的兄弟分頭去算,不過半日,豈不得天孤地孤?

蔣敬嘆氣道:哥哥所不知啊,由天孤地孤得數密只需三個時辰,可要從數密得天地孤,用盡天下算籌算到黃天更替也不一定算出來啊。

晁蓋林沖等一幫頭領頓足嘆氣時,吳用道:我有一計,可破此「數簽」,令鼓上騷時遷去蔡九府上,盜一封舊家書,假回書只要字數一致,關鍵字照用舊家書的字,其他內容遣詞填補,更替語義,便可不知天地孤亦能造假。

晁蓋蔣敬拍手稱秒:軍師不愧為智多星!當下吩咐首領們去做。

話說戴宗扣著日期,回了江州,當廳下了回書,蔡九見戴宗如期歸來,好生歡喜,令下人算了地孤,驗了數簽,心裡踏實了。過了兩日,臨要押送宋江出發時,門子來報「無為軍黃通判前來特探」,蔡九將回書給黃文炳看了一番,黃文炳看行文古怪,心有疑慮,又親自算了一遍地孤和數簽。卷過來一看,又見封面新鮮,搖頭道:這份回書是假的。

知府到:通判差矣,此是家尊親筆手跡,又有數簽可證,怎會是假的。

黃文炳道:我方才又算,得地孤是「六一五一九」,蔡權相府上選地孤,幾月便選幾開頭的地孤,如今九月,此地回書必定是盜用舊文書偽造而成,此乃「時密不符「。

蔡九一驚,急忙喚回戴宗,盤問之下,戴宗不能對答。隨即將戴宗一併打入死牢,等候處斬。

---

註解

- 數章:數字簽名,數字簽名通過摘要和加密演算法來保證原文的真實性。文中的數字簽名(數章)分成了兩部分,第一行是加密後的摘要內容(數簽),第二行是加密採用的公鑰(數密)。

- 土法哈希:Hash,散列函數。實際散列函數計算方式很複雜,文中所寫的通過筆畫和字的位置算摘要的方法非常簡陋,只能保證確定性,卻不具備唯一性,很容易出現散列衝突(或者叫哈希碰撞),文中吳用在後面發現了這個特性,並利用哈希碰撞一定程度上破解了這個演算法。我們常見的MD5和SHA1等都屬於Hash演算法,MD5和SHA實際上也存在哈希碰撞(Collision)的可能,王小雲教授破解MD5正是利用了這個原理。

- 土法阿愛斯愛:RSA,目前最著名的非對稱加密演算法,RSA演算法的核心是極大整數的因數分解和歐拉定律。文中的加密方法只是單純的利用了大整數難以分解因數的特性,實際上RSA的計算過程和密鑰長度都複雜很多。

- 孤數:素數/質數,中國古代數學其實並沒有素數這個概念。

- 天孤:用來當私鑰的大素數。

- 地孤:用來實際和哈希值參與計算的素數。

- 時密不符:時間戳不匹配。在數字簽名里加上時間戳可以防止重放攻擊,保證信息的時效性。文中蔡京指定發信月份和素數首位匹配,能簡單的保證信件時效性,也彌補了哈希演算法過於簡單導致的被碰撞的漏洞。黃文炳最終靠這一點發現了信件是偽造的。

這篇故事新編是我幾個月前某晚一時興開腦洞,在沒有強大計算力的古代,怎麼用密碼學來設計一個比筆跡和印章更為可靠的憑證呢?然後在朋友圈發了這篇文章。

同時也是想換個更輕鬆的角度給大家科普一下加密,但為了故事氛圍和易於理解,文章將概念都簡化了,到底還是戲說。各位有興趣可以去網上再找資料進一步了解。

感謝@劉巍然-學酥 巍然兄指教。之後還會寫一篇故事,戲說塊加密和流加密。歡迎留言討論!


推薦閱讀:

那些給寵物做絕育的主人,是真愛么?
病毒可以被馴化嗎?怎樣嘗試和一枚病毒交流?
食物用塑料袋在微波爐加熱危險不?
美洲骨頂:想鳩佔鵲巢?不可能!
六分鐘了解特斯拉的一生

TAG:科普 | 信息安全 | 密码学 |