密碼學(xué)有著深刻的數(shù)學(xué)背景,看似一門高高在上的貴族知識體系。能夠吧啦吧啦一些密碼學(xué)的名詞術(shù)語,有助于迅速建立滿滿的逼格。

因此,在這套筆記的第一部分,匯總一些基本的密碼學(xué)概念:
1)密碼
2)單向散列
3)消息認(rèn)證碼
4)數(shù)字簽名
5)數(shù)字證書
6)偽隨機數(shù)生成器
7)密碼學(xué)工具箱
8)隱寫術(shù)
9)正確認(rèn)知信息安全
為了方便理解,定義幾個角色,后面會時不時的進(jìn)行引用。其實,他(她)們都是經(jīng)典密碼學(xué)著作中約定俗成的著名人物。
- Alice:漂亮姑娘
- Bob:帥氣小伙
- Eve:偷窺癖,熱衷于竊聽通信內(nèi)容
- Mallory:破壞王,喜歡偽造信息,妨礙正常通信
- Trent:可信的第三方
- Victor:驗證者
基本概念一:密碼
Alice 和 Bob 正在熱戀中,難免發(fā)送一些肉麻的消息。消息會在多臺通信設(shè)備間中轉(zhuǎn),很有可能被 Eve 偷看。于是 Alice 和 Bob 對消息進(jìn)行了加密處理,即使被 Eve 竊聽,其獲取的也是密文,無法得知具體的消息內(nèi)容。也就是說,密碼保證了信息的 機密性 。
從明文生成密文的步驟,稱為 加密算法 ,將密文還原為明文的步驟,稱為 解密算法 ,加密算法和解密算法統(tǒng)稱為 密碼算法 。
密碼算法由兩個重要的部分組成,一個是計算步驟,一個是密鑰,基本原理如下圖所示:

在現(xiàn)代密碼算法思想中,密碼算法應(yīng)該可以公開,但密鑰必須嚴(yán)格保密。這就好比門鎖制造商會用相同方法批量生產(chǎn)門鎖,但每個門鎖都配套獨有的鑰匙,一旦鑰匙丟失,級別再強的門鎖也可以被輕易打開。
密碼算法分為 對稱密碼算法 和 非對稱密碼算法 ,后者也常常稱為 公鑰密碼算法 ,二者的本質(zhì)區(qū)別是 加密與解密過程是否使用相同的密鑰。
對稱密碼算法:加密和解密時采用同一密鑰,如下圖所示:

非對稱密碼算法:加密和解密時采用不同密鑰,如下圖所示:

非對稱密碼算法體系是20世紀(jì)70年代出現(xiàn)的,而現(xiàn)代計算機和互聯(lián)網(wǎng)安全體系,很大程度是基于非對稱密碼算法體系構(gòu)建起來的。當(dāng)然,現(xiàn)代安全體系往往會結(jié)合非對稱密碼算法和對稱密碼算法的優(yōu)勢,形成了混合密碼算法體系。
基本概念二:單項散列
如果你仔細(xì)觀察,在一些提供軟件下載的網(wǎng)站中,除了提供二進(jìn)制的目標(biāo)文件,還往往聲明一個MD5或SHA字符串。這說明軟件發(fā)布者具備安全意識,擔(dān)心有人篡改其發(fā)布的軟件,在其中植入一些惡意程序。這個字符串就是用單項散列函數(shù)計算出來的散列值,散列值也被形象的稱為 “數(shù)據(jù)指紋” 。
現(xiàn)實生活中,偵查員通過將犯罪現(xiàn)場遺留的指紋與嫌疑人的指紋進(jìn)行比對來確定是否存在關(guān)聯(lián),而計算機也可以利用數(shù)據(jù)指紋來確認(rèn)兩段二進(jìn)制數(shù)據(jù)是否完全一致。我們不需要一一對比二進(jìn)制數(shù)據(jù),只需要一一比對其數(shù)據(jù)指紋即可。單項散列函數(shù)能夠保證不同的二進(jìn)制序列產(chǎn)生不同的數(shù)據(jù)指紋 。
總結(jié)成一句話:單項散列函數(shù)保證的不是數(shù)據(jù)的機密性,而是數(shù)據(jù)的完整性,或者說不可篡改性。
基本概念三:消息認(rèn)證碼
消息認(rèn)證碼(MAC,Message Authentication Code)是一種能夠保證數(shù)據(jù)完整性和提供認(rèn)證的密碼技術(shù),其主要作用是在保證數(shù)據(jù)完整性之外,確認(rèn) 消息是否來自期望的通信對象 。
基本概念四:數(shù)字簽名
在通信的過程中,保證了數(shù)據(jù)完整性,對通信對象進(jìn)行了認(rèn)證還不夠,通信雙方還可能對發(fā)送的消息進(jìn)行 “否認(rèn)” 。比如 Alice 向 Bob 寫了一封信,但后來又有點后悔,謊稱“當(dāng)初根本沒有寫過這封信”,這種行為就稱為“否認(rèn)”。
能夠確保完整性、提供認(rèn)證并防止否認(rèn)的技術(shù),就是 “數(shù)字簽名” 。顧名思義,就是對自己發(fā)送的內(nèi)容進(jìn)行簽字,只不過采用的是密碼技術(shù)。Alice 在信的內(nèi)容之后簽上自己的名字發(fā)給 Bob,Bob 收到后對改簽名進(jìn)行 簽名驗證 ,驗證通過后,就代表契約生效,Alice 事后也無法進(jìn)行否認(rèn)。
我之前參考大牛阮一峰的Blog,寫過一篇關(guān)于數(shù)字簽名和數(shù)字證書的筆記,文章鏈接為:《數(shù)字簽名與數(shù)字證書》
- Bob 有兩把鑰匙,一把叫做公鑰,一把叫做私鑰。

- Bob 把公鑰給了他的朋友們,Pat、Doug、Susan 每人都有一把。

- Susan 想給 Bob 寫一封密信,用 Bob 的公鑰進(jìn)行加密即可。而 Bob 用私鑰進(jìn)行解密。只要 Bob 的私鑰不泄漏,別人就無法打開 Susan 的這封密信。

- Bob 給 Susan 回信,為了說明這封信就是自己寫的,需要給這封信加蓋一個印記,好比皇帝下的圣旨必須加印玉璽是一個道理:
- 第一步,Bob 對回信內(nèi)容進(jìn)行 Hash 計算,生成 Digest(摘要)。這里要說明一下,一旦有人篡改了信件內(nèi)容,Hash 算法保證了摘要一定會發(fā)生變化,而且也不可能通過摘要推算信件內(nèi)容。

- 第二步,Bob 用私鑰對這個摘要進(jìn)行加密,生成了數(shù)字簽名。

- 第三步,Bob 把數(shù)字簽名添加到信件上,好比增加一句 “此致,XXX敬上”。

第四步,Bob 把簽了名的信件發(fā)送給 Susan。
第五步,Susan 收到信件后,用 Bob 的公鑰解密數(shù)字簽名,得到信件摘要 A,同時也對信件內(nèi)容再進(jìn)行 Hash 計算得到一份摘要 B,對比兩份摘要,如果內(nèi)容完全一致,證明信件內(nèi)容沒有被篡改過,而且確實由 Bob 發(fā)出。

基本概念五:數(shù)字證書
通過數(shù)字證書,能夠證實信件來源于可信的一方,然而,如果 Doug 想假冒 Bob 和 Susan 進(jìn)行通信怎么辦?繼續(xù)沿用上一節(jié)的例子:
Doug 可能會偷偷使用 Susan 的電腦,將 Bob 的公鑰換成自己的公鑰。而 Susan 沒有發(fā)覺使用的公鑰已經(jīng)是 Doug 的了,而 Doug 就用自己的私鑰進(jìn)行上述的數(shù)字簽名過程,偽裝 Bob 與 Susan 進(jìn)行通信。
而 Susan 終于發(fā)現(xiàn)事情不對勁,感覺自己使用的公鑰有問題,于是她想到一個辦法,希望 Bob 能夠到一個權(quán)威機構(gòu)對自己的公鑰進(jìn)行公證,這個權(quán)威結(jié)構(gòu)也就是 “證書中心(Certificate Authority,簡稱CA)” 。證書中心于是用自己的私鑰,對 Bob 的公鑰和一些相關(guān)信息一起加密,生成 "數(shù)字證書"(Digital Certificate)。

- Bob 拿到數(shù)字證書以后,就可以放心了。以后再給蘇珊寫信,只要在簽名的同時,再附上數(shù)字證書就行了。而 Susan 收到信件后,也先用 CA 的公鑰解開數(shù)字證書,拿到經(jīng)過認(rèn)證的公鑰,再用這個公鑰去驗證數(shù)字簽名,以此來確認(rèn)是否真的來自 Bob。
這就是數(shù)字證書作用。數(shù)字證書好比駕照,駕照上記錄了駕駛員的姓名、年齡、出生日期等信息,并由交管部門在上面蓋章,以示經(jīng)過權(quán)威部門鑒定,可以信任。同理,數(shù)字證書也同樣記錄了姓名、組織、電子郵箱、以及屬于此人的 公鑰 ,并由權(quán)威的 認(rèn)證機構(gòu)(Certification Authority,CA) 施加數(shù)字簽名,也就是說,權(quán)威認(rèn)證機構(gòu)認(rèn)定該公鑰的確屬于證書上記錄的人或組織。
實際情況中,往往對數(shù)字證書申請者身份的認(rèn)證,會由一個專門的 注冊機構(gòu)(Registration Authority,RA) 進(jìn)行處理,以便讓 CA 能專注于數(shù)字證書的制發(fā)和維護(hù)。RA 通過與金融機構(gòu),如信用報告機構(gòu)進(jìn)行合作,對申請人提供的業(yè)務(wù)和身份信息進(jìn)行核實,核實通過后通知 CA 頒發(fā)相應(yīng)的證書。

基本概念六:偽隨機數(shù)生成器
偽隨機數(shù)生成器(Pseudo Random Number Generator,PRNG)是一種能夠模擬產(chǎn)生隨機數(shù)序列的算法。隨機數(shù)是密碼算法的重要技術(shù)基礎(chǔ),承擔(dān)著 生成密鑰 的重要指責(zé)。如果偽隨機數(shù)生成算法不好,就容易被竊聽者推測出來,對通信的機密性產(chǎn)生威脅。
基本概念七:密碼學(xué)工具箱
“密碼學(xué)家的工具箱” 這個比喻出自布魯斯.施奈爾寫作的《網(wǎng)絡(luò)信息安全的真相》一書。如下圖所示,密碼學(xué)的幾項技術(shù)在信息安全中發(fā)揮著至關(guān)重要的作用,解決了不同維度的威脅問題,讓我們再羅列一下這些技術(shù):
- 對稱密碼
- 非對稱密碼
- 單項散列函數(shù)
- 消息認(rèn)證碼
- 數(shù)字簽名

基本概念八:隱寫術(shù)
為了安全的進(jìn)行通信,人們進(jìn)行了很多的發(fā)明,而密碼學(xué)的本質(zhì)是一種讓信息變得無法解讀的技術(shù)。還有一種叫做隱寫術(shù)的技術(shù),則走的是另外一個路徑,它不是讓消息內(nèi)容變得無法解讀,而是將真正的消息巧妙的進(jìn)行隱藏,是信息技術(shù)的“障眼法”。
舉一個小例子(抄自《圖解密碼技術(shù)》,結(jié)城浩):
我 -- 我們先準(zhǔn)備一段話
很 -- 很容易看懂的就可以
喜 -- 喜聞樂見的當(dāng)然更好
歡 -- 歡迎你嘗試將另一句話嵌在這段話中
你 -- 你會發(fā)現(xiàn)這其實就是一段隱寫術(shù)
隱寫術(shù)是一門古老的藝術(shù),遠(yuǎn)不是上面寫的這么簡單,是一個非常有意思的領(lǐng)域。將隱寫術(shù)與密碼技術(shù)相結(jié)合,揚長避短,能夠為帶來更強大的信息安全保障,后面有機會我再更深入的學(xué)習(xí)下。
基本概念九:正確認(rèn)知信息安全
這里寫的一些內(nèi)容可能會有悖于常識,但細(xì)細(xì)品味后,更會覺得密碼學(xué)是一個有趣的領(lǐng)域。
第一、不要使用保密的密碼算法
關(guān)于秘密,歷史和生活告訴我們,越少的人知道,就越安全。然而,這個經(jīng)驗用在密碼學(xué)中卻不適用,主要有兩個原因:
- 密碼的算法早晚會公諸于世,一旦到了那一天,依靠對密碼算法本身保密而建立的安全體系將土崩瓦解,而那些公開密碼算法從一開始就沒想著要保密,因此算法的暴露根本不影響其安全強度。這其實是一種思想,現(xiàn)代密碼體系正是基于這個思想構(gòu)建的。
- 依靠個人或某個組織開發(fā)高強度的密碼算法是非常困難的。世界上公認(rèn)的高強度密碼算法,幾乎都是經(jīng)過密碼破譯者長期嘗試破解未果而生存帶來的。因此,如果自認(rèn)為偷偷搞出來的一套“不為人知”的密碼算法具有更高的安全性,其實是有點自不量力了。
第二,使用低強度的密碼比不進(jìn)行任何加密更危險
這觀點更讓人懵逼了。其實這還是在講述一個思想,那就是人們?nèi)菀淄ㄟ^“密碼”這個詞獲得一種”錯誤的安全感”,我們必須清醒的認(rèn)識到 信息被加密 != 安全強度高 這個道理。使用低強度的密碼,自以為獲得了安全級別,在處理機密信息時,意識深處會放棄警惕性,這是最危險的。
第三,任何密碼總有一天會被破解
如果有人向你推銷一種不可能被破解的密碼體系時,你一定要打起精神,不要被其欺騙。當(dāng)然,嚴(yán)格來說,一次性密碼本 是絕對不會被破解的(原因在后面的文章中講述),然而這種密碼技術(shù)是不具備實際用途的;還有一種可能會實現(xiàn)理想的途徑 -- 量子密碼,只是現(xiàn)在還為時過早。不要忘記,擁有了量子武器的盾牌,面臨的也將是被量子武裝的長矛,輸贏還是未知。
第四,密碼只是信息安全的一部分
水流的聰明之處在于,它會巧妙的繞開石頭。攻擊者面對密碼技術(shù)時,也未必就會選擇正面強攻。也許繞道攻擊信息持有者的電腦,直接獲取加密前或解密后的文件更簡單。比起“騙子”,再強大的CPU也會顯得很傻。結(jié)城浩在《圖解密碼技術(shù)中》說的很棒:
要保證良好的安全性,就需要理解“系統(tǒng)”這一概念本身的性質(zhì)。復(fù)雜的系統(tǒng)就像一根由無數(shù)環(huán)節(jié)相連組成的鏈條,如果用力拉,鏈條就會從其中最脆弱的環(huán)節(jié)斷開。因此,系統(tǒng)的強度取決于其中最脆弱的環(huán)節(jié)的強度。
最錯弱的環(huán)節(jié)并不是密碼,而是人。
以上,就是密碼學(xué)的基本概念。
