本書以通俗、直觀的方式清晰闡述了現(xiàn)代密碼學的基礎(chǔ)知識,包括用來實現(xiàn)通信隱私性/機密性的保密算法(協(xié)議)及保證消息正確性、完整性、來源可靠性的數(shù)字簽名協(xié)議,提供了一個易讀、易學的關(guān)于現(xiàn)代密碼學基本原理和數(shù)學知識的導(dǎo)引,通過淺顯的例子和生動的語言讓讀者繞過晦澀的專業(yè)術(shù)語而直接看到密碼技術(shù)的本質(zhì)。
A Cryptography Primer: Secrets and Promises作為一個數(shù)論專家與和平主義者,G. H. Hardy在其自傳《一個數(shù)學家的致歉》中寫道:……令高斯以及少數(shù)數(shù)學家們欣慰的是,至少還有一種科學“數(shù)論”……能夠遠離人們的日;顒,它應(yīng)當保持純粹和優(yōu)雅。
Hardy的這本書于1940年出版,他當時正面臨著職業(yè)生涯的結(jié)束。如果他能夠延后30年再做出論斷的話,或許他會得出截然不同的結(jié)論,因為數(shù)論成為一項與戰(zhàn)爭相關(guān)的重要技術(shù)(密碼學——研究秘密編碼的應(yīng)用學科)的基礎(chǔ)。
密碼學的應(yīng)用至少有數(shù)千年的歷史。在印度圣經(jīng)中,密碼學被列為64項女人的技藝之一。其中一個著名的初等密碼系統(tǒng)要歸功于尤里烏斯·凱撒。許多逸聞趣事證實了多年以來密碼學和密碼分析學(即編碼破解)在戰(zhàn)爭和外交博弈中的重要作用。例如,英國人曾截獲并破譯了由德國外交部發(fā)給墨西哥政府(經(jīng)由大使)的齊默曼電報,在電報中德國許諾將得克薩斯州、新墨西哥州以及亞利桑那州劃歸給墨西哥作為其幫助對抗美國的回報,這促進了美國加入第一次世界大戰(zhàn)的進程。密碼分析學同時也在不那么重大的事件中發(fā)揮著作用,以下文字摘自Casanova(1757)的自傳:
五六周之后,她問我是否已經(jīng)解密了這些手稿……我告訴她是的。
“先生,恕我冒昧。沒有密鑰,這怎么可能呢?”
“希望我告訴你密鑰嗎,夫人?”“如果這樣的話告訴我吧。”
我告訴她密鑰,這個密鑰并不屬于任何語言,然后看到她吃驚的表情。她告訴我說這是不可能的,因為她堅信她自己是唯一掌握這些密鑰的人,她僅僅將這些密鑰記在腦海中,從來沒有寫下來。
我本可以告訴她真相的——已被我掌握的與解密手稿同樣的計算已經(jīng)讓我知道了密鑰——但是一個邪惡的想法閃過心頭,阻止我告訴她這一真相。我保持神秘使她深深地被我俘獲,那天我主導(dǎo)了她的靈魂,肆意地散發(fā)著我的力量。
然而在信息時代,或許密碼學最大的貢獻還是在商業(yè)領(lǐng)域。一直以來,銀行用密碼學來保障電子傳輸?shù)陌踩,分布在不同地域的公司用密碼學來保證他們之間的通信不被工業(yè)諜報人員竊聽。但是,或許最令人興奮的應(yīng)用在于,讓素未謀面并因此無法提前協(xié)商密鑰的雙方也能夠安全地通信。隨著互聯(lián)網(wǎng)上的商業(yè)活動日漸繁榮,這種應(yīng)用變得更加普及。幸運的是,現(xiàn)今的指數(shù)密鑰交換協(xié)議和公鑰密碼學能夠使這類應(yīng)用成為現(xiàn)實。
Diffie和Hellman在1976年提出了公鑰密碼學,其思想在于:有兩個不同密鑰,公開密鑰用來加密消息,而私有密鑰則用于解密;由一方秘密地生成這對密鑰,他可以將加密密鑰公開而不暴露用于解密的密鑰。因而任何人都可以給密鑰生成者發(fā)送加密的消息,而只有密鑰生成者能夠解密這一消息。Rivest、Shamir和 Adleman于1978年最先實現(xiàn)了這一思想。至于他們的方案有多么聞名于世,我們來看看下面這段摘自滑稽喜劇《山河之旅》中的對白吧:
“杰伊,我不太熟悉計算機,對此知之甚少。我了解到這個密碼是兩個差不多100位的大素數(shù)相乘得到的,對吧?”
“是的,很對。這被稱為RSA密碼系統(tǒng)!
“好吧,這一名字來源于MIT的Rivest、Shamir和 Adleman。我只知道這么多。我也知道即使是使用先進的計算機來破解,也需要花費無窮無盡的時間,”她回憶著,“兩個100位的素數(shù)相乘得到的密鑰差不多需要38億年的時間來破解,對吧?”“完全正確。很明顯,所有被竊取的信息都來自于從公司辦公室到你家的電話線路上發(fā)生的竊聽。假設(shè)只有麥克掌握解密密鑰,如果他不將這一密鑰分發(fā)給別人,那么是沒人能夠解密這一編碼的。但是這一說法在邏輯上還有一點不嚴謹之處,”他邊說邊松了松深綠色的絲織領(lǐng)帶,“Vee,這里比我想象的熱好多啊,你介意我脫掉外套嗎?”
“當然不,你太客氣了。”她說道……我們的女主角Vee說道,RSA的安全性是基于分解兩個素數(shù)乘積的困難性,因此,它使得Hardy最喜歡的“純”數(shù)學領(lǐng)域(數(shù)論)有了用武之地。這一密碼系統(tǒng)(同大多數(shù)密碼系統(tǒng)一樣)的根基在于簡單與困難的區(qū)別。生成一個公鑰/私鑰對就如同選擇兩個100位的素數(shù)并將它們相乘那么容易,而正如Vee所言,攻破這一系統(tǒng)(利用當前已知的方法)則需要大量的時間才能完成;這似乎需要用兩個素數(shù)的乘積來確定這兩個素數(shù)分別是什么,這一問題稱為整數(shù)分解。盡管針對這一問題的研究有著持續(xù)的進展,但是無論如何,已知的算法的速度都還沒有快到足以威脅RSA安全性的程度。下面引用一個更了解市場營銷手段而不精通數(shù)論的人的一句話:
由于數(shù)字貨幣系統(tǒng)的隱私性和安全性都依賴于密碼學,因此任何能夠攻破密碼系統(tǒng)的數(shù)學或計算機科學的突破都會是一場災(zāi)難。而在數(shù)學方面最為顯而易見的突破或許就是構(gòu)建一個能夠快速分解大整(素)數(shù)的方法!葼枴どw茨,《未來之路》第一版,265頁(大整數(shù)分解是這樣的問題,即已知一個數(shù),求這個數(shù)是由哪些素數(shù)相乘得到的,如果這個數(shù)是一個素數(shù),那么分解的結(jié)果就是它本身。)但是RSA不僅僅用于加密。正如Diffie和Hellman意識到的那樣,公鑰密碼學的另一個方面在于數(shù)字簽名。使用類似于RSA的方式,公私密鑰對的生成者可以用私鑰對文檔產(chǎn)生一個簽名。這是一個由文檔產(chǎn)生的數(shù)字,擁有公鑰的人都可以驗證這一簽名與文檔是一致的(滿足某種數(shù)學關(guān)系),而且只有擁有私鑰的人才能夠為文檔產(chǎn)生合法的簽名。因此一個文檔的合法簽名可以作為密鑰生成者需要為此負責這一事實的強有力的證據(jù)。如果有人篡改了文檔,那么篡改后的文檔和簽名不會再有相同的數(shù)學關(guān)系了,因此這一文檔將會被視作無效。于是,數(shù)字簽名可以用于互聯(lián)網(wǎng)中傳輸?shù)南⒌恼J證,以此來防止?jié)撛诘南⒋鄹暮蛡卧。它們可以用于?chuàng)建不可偽造的證書,如電子版的信用卡或護照。它們也可以用于檢測對計算機程序未經(jīng)授權(quán)的篡改,如病毒的侵入等。
與此同時,其他保障計算機安全的技術(shù)也被陸續(xù)提出,包括對身份的安全認證(這與在電話中詢問某電話號碼、信用卡號碼等信息以確認對方身份類似),對一個文檔內(nèi)容承諾但不泄露其信息的方法(對一個密封的信封的模擬),為一個文檔打上時間標記的方法(對給自己郵寄一封信以得到帶有時間的郵戳這一方法的模擬)。
計算科學對計算簡單問題與計算困難問題進行了分類,而密碼學技術(shù)正是構(gòu)建于計算科學這一理論之上:在你擁有密鑰的情況下,解密編碼是容易的;而如果你沒有密鑰則不然。密碼學正是對這種智慧追求的具體實現(xiàn)。
為了讓更為廣大的讀者都能接觸到這一饒有趣味的、令人興奮的而且越來越重要的充滿智力挑戰(zhàn)性的領(lǐng)域,我開設(shè)了課程“秘密與承諾:數(shù)字安全導(dǎo)論”。我為這門課撰寫了這本書作為教材。題目中“秘密”這個詞表示用密碼學的方法來實現(xiàn)私密通信;“承諾”這個詞表示用數(shù)字簽名來保證消息、文檔或程序的有效性與完整性。本書旨在對現(xiàn)代密碼學的基本理論和其所依賴的數(shù)學基礎(chǔ)給出一個簡介,而并非一部面向?qū)嵺`的、教你如何做的教材,即這本書不會指導(dǎo)讀者如何用現(xiàn)代計算機程序(如網(wǎng)頁瀏覽器和電子郵件系統(tǒng))來實現(xiàn)數(shù)字安全。這些程序一直在更新?lián)Q代,而且如果想在市場上占有一席之地,必須做到讓它們的使用者無須了解這些軟件所依賴的安全技術(shù)便可輕松使用。在本書中,我們要透過現(xiàn)象看到問題的本質(zhì),研究安全技術(shù),探尋其之所以安全的原因。
對于一些基本的密碼學方案,如DES和SHA,其細節(jié)并沒有啟發(fā)作用,因而在本書中我們省略對其細節(jié)的討論。其他一些基于初等數(shù)論的方案也能發(fā)揮與之相同的功能,盡管這些基于數(shù)論的方案效率低下難以實用,但是它們被認為是安全的,而且適合在這門課中講解。因此為了最大限度地做到可讀性與一致性,我們在實用性方面做出一定的犧牲與權(quán)衡,對于急切想了解DES細節(jié)的讀者可以在其他教材中輕易地找到這些知識。
致謝非常感謝Sarah Finney、Peter Galea、Kevin Ingersoll和Mark Weaver幫助我完成基于該書的課程。同樣感謝國家科學基金對該課程建設(shè)的資助,感謝Michael Yanagisawa幫助書稿的校對,最后還要感謝Alice、Bob、Eve以及其他頻繁出現(xiàn)在現(xiàn)代密碼學文獻中的角色。
譯者序A Cryptography Primer: Secrets and Promises計算機信息網(wǎng)絡(luò)已經(jīng)成為人們社會生活的基礎(chǔ)設(shè)施,人們對網(wǎng)絡(luò)的依賴已經(jīng)可以和水、電等基本生活必需品比肩,大量的生活信息、工作信息和社會信息在網(wǎng)絡(luò)中高速傳送、處理和應(yīng)用,多維度地支撐著人們家庭及社會生活的方方面面,形成了人們生活的另一個“空間”,財產(chǎn)、身份、學歷甚至整個社會關(guān)系都變成了信息網(wǎng)絡(luò)空間中的一條條“記錄”。但是,人們對信息網(wǎng)絡(luò)的強烈依賴,也產(chǎn)生了另一方面的問題。存儲于網(wǎng)絡(luò)空間中的數(shù)據(jù)便于傳輸、處理、共享但可控性差。網(wǎng)絡(luò)空間給人們帶來便利的同時也帶來了隱私信息泄露、商業(yè)信息泄密以及消息被篡改、不當使用、身份被假冒等多重風險,如果不能對信息進行很好的保護,將會造成不可估量的損失。
密碼學是一門古老的學科,甚至可追溯到古埃及的法老時代。當然,最初的密碼應(yīng)用環(huán)境非常簡單,是一種主要用于保證通信安全的技術(shù)或技巧,直到20世紀40年代香農(nóng)創(chuàng)立信息論并以此研究保密系統(tǒng)開始,密碼的設(shè)計和分析開始變?yōu)橐环N有理論基礎(chǔ)、有科學方法的“科學”。而目前信息網(wǎng)絡(luò)應(yīng)用的普遍性和其中信息安全問題的廣泛性,使得密碼學不再是軍事、外交、國防領(lǐng)域的專寵,而成為人們社會生活中時時處處依賴的信息安全保障必備工具,這也是從20世紀70年代以來密碼學迅速發(fā)展的原因。密碼學已經(jīng)成為當今社會不可或缺的應(yīng)用學科。
為了使網(wǎng)絡(luò)使用者對密碼學有一個初步了解,我們翻譯了美國布朗大學Philip N.Klein教授編著的《A Cryptography Primer:Secrets and Promises》一書。與普通的密碼學教程不同,這本書不以密碼學的研究和應(yīng)用為目的,而注重密碼知識的普及。閱讀該書幾乎不需要任何專門知識,書中從最初步的概念、最易理解的例子、最簡單的應(yīng)用開始,深入淺出,層層遞進,一直到密碼學思想的實質(zhì)。本書不追求表達的嚴謹性和方法的通用性,力求讓讀者理解密碼學最本質(zhì)的原理,是一本極具特色的入門書,通俗易懂而又極其深刻。譯者在翻譯該書的過程中深感獲益,希望該書中文版的出版能夠給希望了解密碼學的中文讀者帶來幫助。
對該書的編著者Philip NKlein表示敬意。
譯者2016年7月27日
A Cryptography Primer: Secrets and Promises
出版者的話
譯者序
前言
第1章引論
1.1加密與解密
1.2信道、安全與不安全
1.2.1互聯(lián)網(wǎng)
1.2.2局域網(wǎng)
1.2.3移動電話
1.3隱匿式安全
1.4另一種選擇:柯克霍夫原則
1.5密碼學分類
1.6對密碼系統(tǒng)的攻擊
1.7思考題
第2章模算術(shù)
2.1凱撒密碼
2.2整數(shù)“圈
2.3日常生活中的模算術(shù)
2.4同余
2.4.1模7同余
2.5另一個例子:模10同余
2.6同余代換
2.6.1使用代換簡化多個數(shù)相加
2.6.2使用代換簡化多個數(shù)相乘
2.6.3舍九法
2.7代表元與余數(shù)
2.7.1商和余數(shù)
2.7.2利用rem檢查兩個數(shù)是否同余
2.7.3使用rem簡化模同余式
2.7.4利用rem簡化涉及rem計算的等式
2.7.5負整數(shù)的代表元
2.8思考題
第3章加法密碼:一個不安全的分組密碼
3.1加法密碼
3.2分組密碼
3.3對加法密碼的攻擊
3.3.1已知明文攻擊
3.3.2唯密文攻擊
3.4對使用ECB模式的分組密碼的攻擊
3.5思考題
第4章函數(shù)
4.1基礎(chǔ)知識
4.2可逆性
4.2.1一對一和映上
4.3模算術(shù)函數(shù)
4.3.1模加和加法逆元
4.3.2計算模m加法逆元
4.3.3模乘和乘法逆元
4.3.4計算模7乘法逆元的簡單方法
4.3.5乘法逆元不總是存在
4.4函數(shù)符號
4.5函數(shù)的使用
4.6一個兩輸入函數(shù):一般化凱撒密碼的加密函數(shù)
4.7特殊化:將兩輸入函數(shù)轉(zhuǎn)化為單輸入函數(shù)
4.8思考題
第5章概率論
5.1實驗結(jié)果
5.2結(jié)果的概率
5.3繪制概率分布圖
5.4實驗結(jié)果集合的概率
5.5小結(jié)
5.6均勻分布
5.7隨機變量
5.7.1基于另一個隨機變量定義隨機變量
5.7.2隨機變量的形式化數(shù)學定義
5.7.3隨機變量的均勻分布
5.8思考題
第6章完美保密與完美安全的密碼系統(tǒng)
6.1竊聽者能夠從密文中獲得什么
6.2密碼系統(tǒng)的評估
6.3完美保密與唯一解密性
6.4完美保密簡史
6.4.1弗納姆機器
6.4.2一次性密碼本
6.5完美保密密碼系統(tǒng)的缺點
6.6思考題
第7章數(shù)論
7.1整除
7.2互素
7.3素數(shù)
7.4素因子分解
7.5歐拉函數(shù)(x)
7.6乘冪
7.6.1冪指數(shù)相加法則
7.6.2冪指數(shù)相乘法則
7.7歐拉定理
7.8思考題
第8章歐幾里得算法
8.1測量謎題
8.1.1一個更復(fù)雜的例子
8.2通過解決測量謎題求模乘法逆元
8.3歐幾里得算法
8.3.1歐幾里得算法計算什么
8.3.2前向計算
8.4歐幾里得算法的后向部分
8.5歐幾里得卡片
8.6歐幾里得算法教會我們什么
8.7思考題
第9章完美保密的某些應(yīng)用
9.1秘密分享與完美保密
9.2門限秘密分享
9.3消息認證碼
9.4思考題
第10章計算問題:易解和難解
10.1計算問題
10.2算法
10.2.1模冪運算的重復(fù)平方算法
10.3預(yù)測一個算法需要的計算機執(zhí)行步數(shù)
10.4快速算法和慢速算法:容易問題和困難問題
10.4.1計算問題和密碼學
10.5思考題
第11章模乘冪、模對數(shù)和單向函數(shù)
11.1單向函數(shù)在口令安全中的應(yīng)用
11.1.1針對使用單向函數(shù)的口令文件的字典攻擊
11.1.2為口令文件 “摻鹽
11.2單向函數(shù)在登錄中的應(yīng)用:s/key
11.3單向函數(shù)在承諾中的應(yīng)用/誤用
11.3.1不隱藏
11.3.2不綁定
11.4思考題
第12章DiffieHellman指數(shù)密鑰協(xié)商協(xié)議
12.1動機
12.2背景
12.3協(xié)議
12.4安全
12.5中間人攻擊
12.6思考題
第13章計算安全的單鑰密碼系統(tǒng)
13.1現(xiàn)實世界中安全的分組密碼
13.2密文分組鏈
13.3指數(shù)密碼
13.4如何尋找大素數(shù)
13.5思考題
第14章公鑰密碼系統(tǒng)和數(shù)字簽名
14.1公鑰密碼系統(tǒng)
14.2El Gamal 密碼系統(tǒng)
14.3關(guān)于El Gamal密碼系統(tǒng)的更多說明
14.4實踐中的公鑰密碼
14.5簽名
14.6陷門單向函數(shù)及其在公鑰加密和數(shù)字簽名中的應(yīng)用
14.7RSA陷門單向函數(shù)
14.8RSA公鑰密碼系統(tǒng)
14.9RSA數(shù)字簽名方案
14.10消息摘要函數(shù)
14.11消息摘要函數(shù)在承諾中的應(yīng)用
14.12思考題
延伸閱讀
索引