陳凱
上期文章提到一種叫“ROT-13”的文字游戲,按字母表的順序往右移13位,將字母明文替換為密文,如“seeyoulater”會(huì)變成“frrlbhyngre”,不過(guò)若總是移動(dòng)13位,那么密碼很容易被破解,為了讓密碼更安全,可以每一次移位替換掉一個(gè)字母后,就變動(dòng)一下移動(dòng)的次數(shù),于是“ROT-13”就成了“ROT-n”。例如,密碼的發(fā)送方和接收方使用“14159265358”當(dāng)作ROT-n的移動(dòng)次數(shù),對(duì)明文“seeyoulater”加密后“s”變成“t”,“e”變成“i”,而再后一個(gè)字母“e”則變成了“f”。其中“14159265358”這串?dāng)?shù)字被稱為密鑰。如圖1借助MS Excel里的函數(shù),可以讓替換工作變得更輕松。
為ROT-n換鑰匙
如果密碼的發(fā)送方和接收方總是用“14159265358”當(dāng)作ROT-n的移動(dòng)次數(shù),那么每經(jīng)過(guò)11次移動(dòng)操作后,就只能按原有的模式再重復(fù)做移動(dòng)操作,有經(jīng)驗(yàn)的密碼破解者就可利用這個(gè)漏洞來(lái)猜解密碼,所以文本的發(fā)送者就要定期更換“鑰匙”。不過(guò)問(wèn)題是發(fā)送和接收雙方如何知道“鑰匙”究竟是什么數(shù)字呢?假設(shè)這樣的情況:發(fā)送方和接收方身處異地,而加密后的密文與鑰匙只能交由某第三方傳達(dá)——這簡(jiǎn)直就是考驗(yàn)第三方的“誘惑耐受值”。借助一些簡(jiǎn)單的數(shù)學(xué)工具可以找到一些簡(jiǎn)單的解決方法。
⑴發(fā)送和接收雙方預(yù)先找到某一個(gè)很大的素?cái)?shù)A。有許多網(wǎng)絡(luò)工具可以找大素?cái)?shù),www.numberempire.com網(wǎng)站就提供了搜尋大素?cái)?shù)的功能,如圖2先輸入某個(gè)很大的數(shù)字如“11221123321123443211234554321”,然后選中“Findnext”,再點(diǎn)“Compute”
找到最接近的素?cái)?shù)為“112211233211234
43211234554373”,發(fā)送接收雙方在分手前預(yù)先保存好這個(gè)素?cái)?shù)。
⑵每次在傳送信息前,接收方都要再找一個(gè)大素?cái)?shù)B當(dāng)作鑰匙,如“1415926535897932384633”,將大素?cái)?shù)A和大素?cái)?shù)B相乘,得到大合數(shù)C,這里仍然可以借助網(wǎng)絡(luò)工具,如defuse.ca/big-number-calculator.htm對(duì)大數(shù)字做乘法。結(jié)果得到的合數(shù)C是“15888286272961819275349957628854586099036988150109”。然后將C交由第三方傳達(dá)給發(fā)送方。將一個(gè)很大的合式作因式分解,需很長(zhǎng)的時(shí)間,所以即便第三方對(duì)這串?dāng)?shù)字很感興趣,在相當(dāng)長(zhǎng)一段時(shí)間內(nèi),也無(wú)法知道素?cái)?shù)A和B究竟是什么。
⑶發(fā)送方收到大合數(shù)C,因?yàn)槭孪戎来笏財(cái)?shù)A,所以用簡(jiǎn)單的除法得到B,然后將大素?cái)?shù)B“14159265358979323
84633”作為密鑰,按字母表順序移動(dòng)替換進(jìn)行ROT-n加密,然后將密文經(jīng)由第三方傳送給接收方,接收方用B作為鑰匙逆向移位解碼即可。
⑷下次又有發(fā)送信息需要的時(shí)候,接收方再重新找一個(gè)大素?cái)?shù)B當(dāng)作鑰匙,將其與素?cái)?shù)A相乘傳給發(fā)送方即可。
上面的例子可以用來(lái)展示加密技術(shù)原理,不過(guò)現(xiàn)實(shí)世界中使用的各種加密技術(shù)要復(fù)雜得多,數(shù)學(xué)中關(guān)于素?cái)?shù)的許多研究都被用于加密技術(shù),有興趣的朋友可以深入研究一下。
打造永遠(yuǎn)安全的ROT-n鑰匙
世界上有沒(méi)有絕對(duì)無(wú)法破解的密碼?理論上絕對(duì)安全的密碼是“一次一密”,假如所使用的密鑰與發(fā)送信息等長(zhǎng)且沒(méi)有任何規(guī)律,那么破解者就無(wú)從下手,可是發(fā)送接收雙方如何才能記住那沒(méi)有規(guī)律的密鑰呢?其實(shí)方法也不難,以ROT-n為例,雙方先約定好某套百科全書(shū),然后加密方按順序依次讀該書(shū)上的任何字母,每個(gè)字母都代表特定的字母表移動(dòng)次數(shù),如“a”代表移動(dòng)1次,“b”代表移動(dòng)2次,這么一來(lái)整部百科全書(shū)就成了密鑰。當(dāng)然,前提條件是雙方都要有這么一套百科全書(shū)。盡管這個(gè)密鑰長(zhǎng)度仍然有限,但在相當(dāng)長(zhǎng)的一段時(shí)間里也夠用了?!耙淮我幻堋比秉c(diǎn)也很明顯,一是密鑰必須隨時(shí)帶著(諜戰(zhàn)影片里特工常會(huì)隨身帶著一本書(shū)當(dāng)密鑰),二是如果發(fā)送方發(fā)送了很長(zhǎng)的信息而接收方?jīng)]有收到,雙方使用的密鑰就無(wú)法同步了,所以還需要另外引入同步密鑰的機(jī)制。