水滸「密碼學」:梁山神運算元算天機,江州黃通判通地孤
話說當年宋江在江州潯陽樓題了反詩,被江州知府蔡九關押在死牢。蔡九依黃文炳之計,寫家書給父親蔡京,以炫耀「抓獲反賊」之功,並讓蔡京指點如何處置宋江。
豈料戴宗中途被朱貴藥酒迷倒,被同家書一併遞與梁山。晁天王聽完宋江在牢中心急火燎,定是要帶著頭領們打入死牢解救宋江,軍師吳用卻阻攔道:哥哥莫急,此事不可力敵,只能智取—— 我等將計就計,寫一封假回書,讓戴院長帶回去,書上只說教把犯人宋江解赴東京再處決示眾,待他來此間經過我們奪了便是。
晁蓋道:好是好,只是沒人會蔡京筆跡,又沒蔡京圖章。吳用說有聖手書生蕭讓可寫蔡京字跡,玉臂匠金大堅可刻圖章。諸位好漢無不稱妙之時,忽聞一聲且慢,原來是神運算元蔣敬,蔣敬上前道:軍師且慢,請細看此家書封底。
眾人湊近細看,發現有兩行蠅頭小字,上書「七四八六九零八八七二三一九三」,下書「四六七三二九七五三」。
晁蓋吳用不解,問道:先生這是何意?
蔣敬道:此乃「數章」,用以驗明書者正身,文未篡改。
吳用道:寥寥二十餘字如何驗得,還請先生賜教。
蔣敬在地上畫道:此書有兩百餘字,取首字「今」,得其筆數為四,記於紙上,次字為「有」,其筆數為六,四六得二四,取第二四字,得其筆數為七,記於紙上,七再乘第二五字筆數,再記所的字筆數,若超總字數,則從首再計,如此往複九循,可得「散列」,又名「土法哈希」,若此數無異,可保文未篡改。
吳用嘆服之餘,又道:今先生既已得「土法哈希」之術,我等效之算出「散列」,書與家書封后,豈不萬全?
蔣敬道:軍師且聽我言,這兩行字上面是「數簽」,下面則是「數密」。古人云,數若三,七,十三,十七,十九者,除以非一之數,皆無窮盡,謂曰「孤數」。蔡九藏一孤數,名天孤,蔡京寫信前新取一孤數,名地孤。天孤乘地孤之積,為數密,又名「土法阿愛斯愛」。蔡京以地孤乘「散列」,可得「數簽」,「數簽」、「數密」記於家書封底,待蔡九收到時以「數密」除以天孤,可得地孤,以驗「數簽」,可知此書真假。蔡九回書,亦是如此。
晁蓋忙道:如今我等既知「數密」,令梁山數百識得數的兄弟分頭去算,不過半日,豈不得天孤地孤?
蔣敬嘆氣道:哥哥所不知啊,由天孤地孤得數密只需三個時辰,可要從數密得天地孤,用盡天下算籌算到黃天更替也不一定算出來啊。
晁蓋林沖等一幫頭領頓足嘆氣時,吳用道:我有一計,可破此「數簽」,令鼓上騷時遷去蔡九府上,盜一封舊家書,假回書只要字數一致,關鍵字照用舊家書的字,其他內容遣詞填補,更替語義,便可不知天地孤亦能造假。
晁蓋蔣敬拍手稱秒:軍師不愧為智多星!當下吩咐首領們去做。
話說戴宗扣著日期,回了江州,當廳下了回書,蔡九見戴宗如期歸來,好生歡喜,令下人算了地孤,驗了數簽,心裡踏實了。過了兩日,臨要押送宋江出發時,門子來報「無為軍黃通判前來特探」,蔡九將回書給黃文炳看了一番,黃文炳看行文古怪,心有疑慮,又親自算了一遍地孤和數簽。卷過來一看,又見封面新鮮,搖頭道:這份回書是假的。
知府到:通判差矣,此是家尊親筆手跡,又有數簽可證,怎會是假的。
黃文炳道:我方才又算,得地孤是「六一五一九」,蔡權相府上選地孤,幾月便選幾開頭的地孤,如今九月,此地回書必定是盜用舊文書偽造而成,此乃「時密不符「。
蔡九一驚,急忙喚回戴宗,盤問之下,戴宗不能對答。隨即將戴宗一併打入死牢,等候處斬。
---
註解
- 數章:數字簽名,數字簽名通過摘要和加密演算法來保證原文的真實性。文中的數字簽名(數章)分成了兩部分,第一行是加密後的摘要內容(數簽),第二行是加密採用的公鑰(數密)。
- 土法哈希:Hash,散列函數。實際散列函數計算方式很複雜,文中所寫的通過筆畫和字的位置算摘要的方法非常簡陋,只能保證確定性,卻不具備唯一性,很容易出現散列衝突(或者叫哈希碰撞),文中吳用在後面發現了這個特性,並利用哈希碰撞一定程度上破解了這個演算法。我們常見的MD5和SHA1等都屬於Hash演算法,MD5和SHA實際上也存在哈希碰撞(Collision)的可能,王小雲教授破解MD5正是利用了這個原理。
- 土法阿愛斯愛:RSA,目前最著名的非對稱加密演算法,RSA演算法的核心是極大整數的因數分解和歐拉定律。文中的加密方法只是單純的利用了大整數難以分解因數的特性,實際上RSA的計算過程和密鑰長度都複雜很多。
- 孤數:素數/質數,中國古代數學其實並沒有素數這個概念。
- 天孤:用來當私鑰的大素數。
- 地孤:用來實際和哈希值參與計算的素數。
- 時密不符:時間戳不匹配。在數字簽名里加上時間戳可以防止重放攻擊,保證信息的時效性。文中蔡京指定發信月份和素數首位匹配,能簡單的保證信件時效性,也彌補了哈希演算法過於簡單導致的被碰撞的漏洞。黃文炳最終靠這一點發現了信件是偽造的。
這篇故事新編是我幾個月前某晚一時興開腦洞,在沒有強大計算力的古代,怎麼用密碼學來設計一個比筆跡和印章更為可靠的憑證呢?然後在朋友圈發了這篇文章。
同時也是想換個更輕鬆的角度給大家科普一下加密,但為了故事氛圍和易於理解,文章將概念都簡化了,到底還是戲說。各位有興趣可以去網上再找資料進一步了解。
感謝@劉巍然-學酥 巍然兄指教。之後還會寫一篇故事,戲說塊加密和流加密。歡迎留言討論!
推薦閱讀:
※那些給寵物做絕育的主人,是真愛么?
※病毒可以被馴化嗎?怎樣嘗試和一枚病毒交流?
※食物用塑料袋在微波爐加熱危險不?
※美洲骨頂:想鳩佔鵲巢?不可能!
※六分鐘了解特斯拉的一生