IT技(ji)術互動(dong)交流平台

分分pk10官网

作者︰佚名  發布日期︰2020-02-20 16:11:16

前一(yi)篇文章總結了密碼(ma)部分的(de)na)諶藎 kuo)一(yi)次性密碼(ma)本、對(dui)稱密碼(ma)、公(gong)鑰密碼(ma)、混合密碼(ma)系統等。這些密碼(ma)在一(yi)定(ding)程(cheng)度(du)上能夠保證(zheng)消(xiao)息(xi)的(de)機密性,即可以(yi)防止被竊听導致秘密泄露ding)5 次薹 烙畔xi)被篡改(gai),也無法確(que)定(ding)消(xiao)息(xi)的(de)來源是(shi)否就是(shi)真實的(de)發送者而不是(shi)來自偽裝者,也防止不了發送者事後(hou)否認自己(ji)先前做過的(de)行為。關于這些問題,在本文總結的(de)密碼(ma)技(ji)術中(zhong)就可以(yi)找到解決方案。
本文是(shi)關于《圖(tu)解密碼(ma)技(ji)術》第二部分的(de)na)諶葑芙幔 kuo)單向散列函數、消(xiao)息(xi)認證(zheng)碼(ma)、數字簽名、證(zheng)書。
單向散列函數
使用(yong)單向散列函數可以(yi)獲取消(xiao)息(xi)的(de)“指紋”,通過對(dui)比“指紋”,就能夠知道兩(liang)條消(xiao)息(xi)是(shi)否一(yi)致。這種一(yi)致性,也稱為完(wan)整(zheng)性,可以(yi)識別出消(xiao)息(xi)是(shi)否被篡改(gai)。
單向散列函數(one-way hash function)有(you)一(yi)個輸入和(he)一(yi)個輸出,其中(zhong)輸入稱為 消(xiao)息(xi) (message),輸出稱為 散列值 (hash value)。散列值也稱為 消(xiao)息(xi)摘要 (message digest)或者 指紋 (fingerprint)。單向散列函數可以(yi)根據消(xiao)息(xi)的(de)na)諶菁撲慍鏨 兄擔  兄稻涂梢yi)用(yong)來檢查(cha)消(xiao)息(xi)的(de)完(wan)整(zheng)性。
單向散列函數的(de)性質
根據任意長度(du)的(de)消(xiao)息(xi)計算出固定(ding)長度(du)的(de)散列值
首先,單向散列函數的(de)輸入必須能夠是(shi)任意長度(du)的(de)消(xiao)息(xi)。其次,無論輸入多長的(de)消(xiao)息(xi),必須都能夠生成(cheng)很短(duan)的(de)散列值。如(ru)果消(xiao)息(xi)越長生成(cheng)的(de)散列值也越長的(de)話就不好用(yong)了,而且為了方便使用(yong),散列值的(de)長度(du)最(zui)好是(shi)短(duan)且固定(ding)的(de)。不管(guan)消(xiao)息(xi)是(shi)1比特,還是(shi)100M,甚至(zhi)是(shi)100G,單向散列函數都會計算出固定(ding)長度(du)的(de)散列值。比如(ru),SHA-1計算出的(de)散列值固定(ding)為160比特(20字節(jie))。
能夠快速計算出散列值
計算散列值所花費的(de)時間(jian)必須要短(duan)。盡管(guan)消(xiao)息(xi)越長,計算散列值的(de)時間(jian)也會越長,但如(ru)果不能在現實的(de)時間(jian)內完(wan)成(cheng)計算就沒有(you)意義了。
具備單向性
單向散列函數必須具備單向性。單向性是(shi)指無法通過散列值反(fan)算出消(xiao)息(xi)的(de)性質。就如(ru)同將(jiang)玻璃砸得(de)粉碎很容易(yi),但卻無法將(jiang)碎片還原(yuan)成(cheng)完(wan)整(zheng)的(de)玻璃一(yi)樣,根據消(xiao)息(xi)計算出散列值很容易(yi),但根據散列值卻無法反(fan)算出消(xiao)息(xi)。
消(xiao)息(xi)不同散列值也不同
為了能夠確(que)認完(wan)整(zheng)性,消(xiao)息(xi)中(zhong)哪(na)怕只有(you) 1 比特的(de)改(gai)變(bian),也必須有(you)很高的(de)概率產生不同的(de)散列值。為什麼說有(you)很高的(de)概率呢?這是(shi)因為消(xiao)息(xi)很長,而散列值很短(duan),那就肯定(ding)會存在不同消(xiao)息(xi)產生相同散列值的(de)情況(kuang),這種情況(kuang)稱為 踫(peng)撞 (collision)。因此,單向散列函數沒法完(wan)全避免(mian)踫(peng)撞,只能減低踫(peng)撞發生的(de)概率。而且,更重要的(de)是(shi),要避免(mian)被人為地(di)發現踫(peng)撞。難(nan)以(yi)發現踫(peng)撞的(de)性質稱為 抗(kang)踫(peng)撞性 (collision resistance)。單向散列函數必須具備抗(kang)踫(peng)撞性。另外(wai),抗(kang)踫(peng)撞性還分為兩(liang)種︰弱抗(kang)踫(peng)撞性和(he)強kao)kang)踫(peng)撞性。 弱抗(kang)踫(peng)撞性*是(shi)指要找到和(he)給定(ding)的(de)消(xiao)息(xi)具有(you)相同散列值的(de)另外(wai)一(yi)條消(xiao)息(xi)是(shi)非qian)@ nan)的(de)。 強kao)kang)踫(peng)撞性**則是(shi)指要找到散列值相同的(de)兩(liang)條不同的(de)消(xiao)息(xi)是(shi)非qian)@ nan)的(de)。單向散列函數必須既具備弱抗(kang)踫(peng)撞性,也必須具備gai)靠(kao)kang)踫(peng)撞性。
單向散列函數的(de)例子
單向散列函數有(you)很多種,MD4、MD5、SHA-1、SHA-256、SHA-384、SHA-512、SHA-3等等。
MD4是(shi)由Rivest于1990年(nian)設計pin)de),MD是(shi)消(xiao)息(xi)摘要(message digest)的(de)縮寫(xie),兩(liang)者都能夠產生128比特的(de)散列值。不過,第二年(nian),即1991年(nian),就已經有(you)人提出了MD4的(de)漏洞,很容易(yi)就尋找到了MD4散列踫(peng)撞的(de)方法。因此,Rivest又設計了更為成(cheng)熟的(de)MD5。MD5到現在依然有(you)著廣泛的(de)應(ying)用(yong),例如(ru)很多網站jing)he)應(ying)用(yong)的(de)登錄密碼(ma)都使用(yong)了MD5。但MD5的(de)強kao)kang)踫(peng)撞性已經被攻破(po),也就是(shi)說,現在已經能夠產生具備相同散列值的(de)兩(liang)條不同的(de)消(xiao)息(xi)。所以(yi),其實MD5已經不安全了。
SHA是(shi)NSA(美國(guo)國(guo)家安全局)設計,NIST(美國(guo)國(guo)家標準jia)爰ji)術研(yan)究院)發布的(de)一(yi)系列單向散列函數。SHA是(shi)以(yi)MD4和(he)MD5類(lei)似pin)de)原(yuan)理為基礎來設計pin)de)。SHA-1能夠產生160比特的(de)散列值,不過消(xiao)息(xi)長度(du)是(shi)有(you)上限的(de),上限為2^64比特(準備地(di)說是(shi)2^64-1)。當然這個數已經非qian)>藪螅 yi)在實際應(ying)用(yong)中(zhong)沒有(you)問題。不過,SHA-1的(de)強kao)kang)踫(peng)撞性已yan)005年(nian)被攻破(po)。所以(yi),SHA-1也和(he)MD5一(yi)樣沒那麼安全了。不過,貌似SHA-1依然是(shi)目(mu)前使用(yong)最(zui)廣泛的(de)單向散列函數。
SHA-256、SHA-384和(he)SHA-512的(de)散列值長度(du)que)直鷂56比特、384比特和(he)512比特。它們(men)的(de)消(xiao)息(xi)長度(du)也存在上限,SHA-256的(de)上限和(he)SHA-1一(yi)樣,而SHA-384和(he)SHA-512的(de)消(xiao)息(xi)上限則為2^128比特(確(que)切(qie)值為2^128-1)。這些單向散列函數合起來稱為SHA-2。目(mu)前,SHA-2還沒有(you)被攻破(po)。
在2005年(nian)SHA-1被攻破(po)的(de)背(bei)景下,促(chun)進(jin)了SHA-3的(de)產生。SHA-3與AES一(yi)樣采(cai)用(yong)了公(gong)開競(jing)賽(sai)的(de)方式進(jin)行標準化(hua),最(zui)後(hou)勝(sheng)出的(de)是(shi)Keccak算法。
單向散列函數SHA-1
SHA-1作為一(yi)個具有(you)代表性的(de)單向散列函數,讓我們(men)看看它的(de)算法流程(cheng)是(shi)怎(zen)樣的(de)。整(zheng)體流程(cheng)如(ru)下圖(tu)︰

可以(yi)分為四個步驟︰
填充
對(dui)消(xiao)息(xi)進(jin)行填充處理,使其長度(du)為512比特的(de)整(zheng)數。這里的(de)512比特稱為一(yi)個輸入分組。具體填充的(de)步驟也分為三步︰第一(yi)步在消(xiao)息(xi)末尾添(tian)加(jia)一(yi)個1比特的(de)數值“1”;第二步在添(tian)加(jia)了“1”之後(hou)的(de)消(xiao)息(xi)末尾不斷(duan)添(tian)加(jia)0,直到消(xiao)息(xi)的(de)長度(du)達(da)到512比特的(de)整(zheng)數倍,但最(zui)後(hou)一(yi)個分組的(de)最(zui)後(hou)64比特需要空出來;第三步將(jiang)消(xiao)息(xi)的(de)長度(du)換(huan)成(cheng)二進(jin)制後(hou)添(tian)加(jia)到上一(yi)步空出來的(de)最(zui)後(hou)一(yi)個分組的(de)最(zui)後(hou)64比特中(zhong)。
計算 W0 ~ W79
對(dui)每一(yi)個輸入分組分別計算80個32比特的(de)值,這80個值將(jiang)用(yong)于“單步處理“中(zhong)。計算流程(cheng)如(ru)下圖(tu)︰

首先,將(jiang)輸入分組的(de)512比特分成(cheng)16組,每組32比特。然後(hou),剩下的(de) W16 ~ W79 使用(yong)如(ru)下的(de)公(gong)式進(jin)行計算bei)br />
分組處理
接下來,對(dui)輸入分組進(jin)行80個步驟的(de)處理,目(mu)的(de)是(shi)根據輸入分組的(de)信息(xi)來改(gai)變(bian)內部狀(zhuang)態。流程(cheng)如(ru)下圖(tu),其中(zhong),160比特的(de)na)誆孔zhuang)態是(shi)通過名為A~E的(de)5個32比特的(de)緩沖區來表示的(de)︰


將(jiang)5個緩沖區的(de)值與輸入分組的(de)信息(xi)進(jin)行混合,然後(hou)再執行80個步驟的(de)處理。從(cong)結果來看,這80個步驟所完(wan)成(cheng)的(de)操作,就是(shi)將(jiang)輸入分組的(de)512比特的(de)數據,也SHA-1所保持的(de)160比特的(de)na)誆孔zhuang)態(5個緩沖區)進(jin)行混合。通過80個步驟的(de)反(fan)復(fu)執行xiao)HA-1就能夠將(jiang)已經過填充的(de)消(xiao)息(xi)全部混入這160比特的(de)na)誆孔zhuang)態中(zhong),而SHA-1所輸出的(de)散列值,就是(shi)所有(you)處理結束之後(hou)最(zui)終的(de)na)誆孔zhuang)態(160比特)。
單步處理
單步處理是(shi)指gan)廈嫻de)80個步驟中(zhong)的(de)每一(yi)步的(de)處理,處理過程(cheng)如(ru)下圖(tu)︰

在一(yi)個步驟完(wan)成(cheng)之後(hou),緩沖區A、B、C、D的(de)na)諶蓴岊環直鷥fu)制pin)、C、D、E中(zhong)(其中(zhong)B要循環左移30比特之後(hou)再復(fu)制),而緩沖區 E 的(de)na)諶菰蚧嵊肫淥撼邇de)na)諶菀yi)及Wt、Kt相加(jia)之後(hou)再被復(fu)制pin)交撼邇中(zhong)。
由于上述處理要循環80個步驟,因此輸入分組中(zhong) 1 比特的(de)變(bian)化(hua),就會影響(xiang)到散列值中(zhong)幾乎所有(you)的(de)比特,通過這樣的(de)方式,就能夠實現單向散列函數所應(ying)具備的(de)性質。
對(dui)單向散列函數的(de)攻擊
對(dui)單向散列函數的(de)攻擊主要就是(shi)對(dui)單向散列函數的(de)”抗(kang)踫(peng)撞性“的(de)攻擊。
對(dui)“弱抗(kang)踫(peng)撞性”的(de)攻擊主要是(shi)利(li)用(yong)消(xiao)息(xi)的(de)冗余性生成(cheng)具有(you)相同散列值的(de)另一(yi)個消(xiao)息(xi),這種攻擊也是(shi) 暴力(li)破(po)解 ,每次都稍微(wei)改(gai)變(bian)一(yi)下消(xiao)息(xi)的(de)值,然後(hou)對(dui)這些消(xiao)息(xi)求散列值。在這種情況(kuang)下,暴力(li)破(po)解需要嘗試的(de)次數可以(yi)根據散列值的(de)長度(du)計算出來。以(yi)SHA-1為例,由于它的(de)散列值長度(du)為160比特,因此最(zui)多只要嘗試2^160次就能夠找到目(mu)標消(xiao)息(xi)。由于嘗試次數純粹是(shi)由散列值長度(du)決定(ding)的(de),因此散列值長度(du)越長的(de)單向散列函數,其抵御暴力(li)破(po)解的(de)na)芰li)也就越強。
對(dui)“強kao)kang)踫(peng)撞性”的(de)攻擊一(yi)般稱為 生日攻擊 。生日攻擊不是(shi)尋找生成(cheng)特定(ding)散列值的(de)消(xiao)息(xi),而是(shi)要找到相同散列值的(de)兩(liang)條消(xiao)息(xi),而散列值則可以(yi)是(shi)任何值。生日攻擊的(de)原(yuan)理來自生日悖(bei)論,也就是(shi)利(li)用(yong)了“任意散列值一(yi)致的(de)概率比想象中(zhong)高”這樣的(de)特性。相對(dui)于暴力(li)破(po)解,生日攻擊所需嘗試的(de)次數要少得(de)多,一(yi)般只需要是(shi)暴力(li)破(po)解的(de)一(yi)般。
單向散列函數無法解決的(de)問題
單向散列函數可以(yi)實現完(wan)整(zheng)性的(de)檢查(cha),但卻識別不了“偽裝”,即無法解決認證(zheng)問題。認證(zheng)問題需要使用(yong)消(xiao)息(xi)認證(zheng)碼(ma)和(he)數字簽名來解決。
單向散列函數在實際應(ying)用(yong)中(zhong)很少單獨使用(yong),而是(shi)和(he)其他密碼(ma)技(ji)術結合使用(yong)。後(hou)面要講的(de)消(xiao)息(xi)認證(zheng)碼(ma)和(he)數字簽名都使用(yong)了單向散列函數,而下一(yi)篇要講的(de)密鑰、偽隨(sui)機數和(he)應(ying)用(yong)技(ji)術也都使用(yong)了單向散列函數。
消(xiao)息(xi)認證(zheng)碼(ma)
消(xiao)息(xi)認證(zheng)碼(ma)(message authentication code)是(shi)一(yi)種確(que)認完(wan)整(zheng)性並進(jin)行認證(zheng)的(de)技(ji)術,簡稱為 MAC 。消(xiao)息(xi)認證(zheng)碼(ma)的(de)輸入包括(kuo)任意長度(du)的(de) 消(xiao)息(xi) 和(he)一(yi)個發送者與接受(shou)者之間(jian) 共享的(de)密鑰 ,它可以(yi)輸出固定(ding)長度(du)的(de)數據,這個數據稱為 MAC 值 。
消(xiao)息(xi)認證(zheng)碼(ma)與單向散列函數很類(lei)似,都是(shi)根據任意長度(du)的(de)消(xiao)息(xi)輸出固定(ding)長度(du)的(de)數據,不同的(de)是(shi),消(xiao)息(xi)認證(zheng)碼(ma)比單向散列函數多了一(yi)個共享密鑰。沒有(you)共享密鑰的(de)人就無法計算出 MAC 值,消(xiao)息(xi)認證(zheng)碼(ma)正是(shi)利(li)用(yong)這一(yi)性質來完(wan)成(cheng)認證(zheng)的(de)。此外(wai),和(he)單向散列函數一(yi)樣,哪(na)怕消(xiao)息(xi)中(zhong)發生 1 比特的(de)變(bian)化(hua),MAC 值也會發生變(bian)化(hua),消(xiao)息(xi)認證(zheng)碼(ma)正是(shi)利(li)用(yong)這一(yi)性質來確(que)認完(wan)整(zheng)性的(de)。
消(xiao)息(xi)認證(zheng)碼(ma)的(de)使用(yong)步驟
消(xiao)息(xi)認證(zheng)碼(ma)的(de)使用(yong)步驟如(ru)下圖(tu)︰

發送者與接收(shou)者需要事先共享密鑰,然後(hou)發送者使用(yong)共享密鑰對(dui)消(xiao)息(xi)計算 MAC 值,接著將(jiang)消(xiao)息(xi)和(he) MAC值一(yi)起發送給接收(shou)者。接收(shou)者收(shou)到消(xiao)息(xi)和(he) MAC 值後(hou),使用(yong)同一(yi)個共享密鑰對(dui)消(xiao)息(xi)計算 MAC 值,當計算出來的(de) MAC 值和(he)接收(shou)到的(de) MAC 值一(yi)致的(de),就證(zheng)明認證(zheng)成(cheng)功了。
而既然是(shi)使用(yong)共享密鑰,那就和(he)對(dui)稱密碼(ma)一(yi)樣,存在密鑰配送問題。要解決密鑰配送問題,同樣可以(yi)使用(yong)事先共享密鑰、密鑰配送中(zhong)心、Diffie-Hellman密鑰交huan)弧 gong)鑰密碼(ma)等que)椒 >嚀邇 辭耙yi)篇文章的(de) 密鑰配送問題 部分。
消(xiao)息(xi)認證(zheng)碼(ma)的(de)實現
消(xiao)息(xi)認證(zheng)碼(ma)有(you)很多種實現方法。可以(yi)使用(yong)SHA-1、MD5之類(lei)的(de) 單向散列函數 來實現,其中(zhong)有(you)一(yi)種實現方法叫 HMAC ,後(hou)面我們(men)再講它實現的(de)具體步驟。
也可以(yi)使用(yong)DES、AES之類(lei)的(de) 分組密碼(ma) 來實現消(xiao)息(xi)認證(zheng)碼(ma),將(jiang)分組密碼(ma)的(de)密鑰作為消(xiao)息(xi)認證(zheng)碼(ma)的(de)共享密鑰來使用(yong),並用(yong) CBC 模式將(jiang)消(xiao)息(xi)全部加(jia)yong)塴S捎諳xiao)息(xi)認證(zheng)碼(ma)不需要解密,因此,可以(yi)只保留最(zui)後(hou)一(yi)個分組的(de)密文作為 MAC 值,而其他密文則全部丟棄。由于 CBC 模式的(de)最(zui)後(hou)一(yi)個分組會收(shou)到整(zheng)個消(xiao)息(xi)以(yi)及密鑰的(de)雙重影響(xiang),因此可以(yi)將(jiang)它用(yong)作消(xiao)息(xi)認證(zheng)碼(ma)。
此外(wai),使用(yong)流密碼(ma)和(he)公(gong)鑰密碼(ma)等也可以(yi)實現消(xiao)息(xi)認證(zheng)碼(ma)。
HMAC
HMAC是(shi)一(yi)種使用(yong)單向散列函數來構造消(xiao)息(xi)認證(zheng)碼(ma)的(de)方法,其中(zhong),HMAC 中(zhong)的(de) H 就是(shi) Hash 的(de)意思。HMAC 中(zhong)所使用(yong)的(de)單向散列函數並不僅限于一(yi)種,任何高強度(du)的(de)單向散列函數都可以(yi)被用(yong)于 HMAC,也就是(shi)說,HMAC 所使用(yong)的(de)單向散列函數是(shi)可以(yi)被替換(huan)的(de)。
HMAC 是(shi)按照下列步驟來計算 MAC 值的(de)︰

密鑰填充如(ru)果密鑰比單向散列函數的(de)分組長度(du)要短(duan),就需要在末尾填充0,直到其長度(du)達(da)到單向散列函數的(de)分組長度(du)為止。如(ru)果密鑰比que)腫槌?du)要長,則要用(yong)單向散列函數求出密鑰的(de)散列值,然後(hou)將(jiang)這個散列值用(yong)作 HMAC 的(de)密鑰。
填充後(hou)的(de)密鑰與 ipad 的(de) XOR
將(jiang)填充後(hou)的(de)密鑰與被稱為 ipad 的(de)比特序(xu)列進(jin)行 XOR 運(yun)算。 ipad 是(shi)將(jiang) 00110110 這一(yi)比特序(xu)列(即16進(jin)制pin)de)36)不斷(duan)循環反(fan)復(fu)直到達(da)到分組長度(du)所形成(cheng)的(de)比特序(xu)列xiao) 渲zhong) ipad 的(de) i 是(shi) inner 的(de)意思。XOR 運(yun)算後(hou)得(de)到的(de)值,就是(shi)一(yi)個和(he)單向散列函數分組長度(du)相同,且和(he)密鑰相關的(de)比特序(xu)列。這里將(jiang)這個比特序(xu)列稱為 ipadkey 。

 

與消(xiao)息(xi)組合隨(sui)後(hou),將(jiang) ipadkey 與消(xiao)息(xi)進(jin)行組合,ipadkey 一(yi)般附加(jia)在消(xiao)息(xi)開頭。
計算散列值將(jiang)上一(yi)步組合的(de)結果輸入單向散列函數,計算出散列值。
填充後(hou)的(de)密鑰與 opad 的(de) XOR
將(jiang)填充後(hou)的(de)密鑰與被稱為 opad 的(de)比特序(xu)列進(jin)行 XOR 運(yun)算。 opad 是(shi)將(jiang) 01011100 這一(yi)比特序(xu)列(即16進(jin)制pin)de)5C)不斷(duan)循環反(fan)復(fu)直到達(da)到分組長度(du)所形成(cheng)的(de)比特序(xu)列xiao) 渲zhong) opad 的(de) o 是(shi) outer 的(de)意思。XOR 運(yun)算後(hou)得(de)到的(de)值,也是(shi)一(yi)個和(he)單向散列函數分組長度(du)相同,且和(he)密鑰相關的(de)比特序(xu)列。這里將(jiang)這個比特序(xu)列稱為 opadkey 。
與散列值組合將(jiang)第4步計算出來的(de)散列值拼(pin)在 opadkey 的(de)後(hou)面。
計算散列值將(jiang)上一(yi)步的(de)結果輸入單向散列函數,計算出散列值。這個散列值就是(shi) MAC 值。
對(dui)消(xiao)息(xi)認證(zheng)碼(ma)的(de)攻擊
對(dui)消(xiao)息(xi)認證(zheng)碼(ma)可以(yi)發起 重放(fang)攻擊 ,即攻擊者可以(yi)通過將(jiang)事先攔截保存的(de)正確(que) MAC 值不斷(duan)重放(fang)來發動(dong)攻擊。有(you)幾種方法可以(yi)防御重放(fang)攻擊︰
序(xu)號每次發送消(xiao)息(xi)時都賦予一(yi)個遞(di)增的(de)序(xu)號,並在計算 MAC 值時將(jiang)序(xu)號也包含在消(xiao)息(xi)中(zhong)。這樣,由于攻擊者無法計算序(xu)號遞(di)增之後(hou)的(de) MAC 值,因此就可以(yi)防御重放(fang)攻擊。這種方法雖然有(you)效,但對(dui)每個通信對(dui)象都需要記錄最(zui)後(hou)一(yi)個消(xiao)息(xi)的(de)序(xu)號。
時間(jian)戳(chuo)發送消(xiao)息(xi)時可以(yi)包含進(jin)當前時間(jian),如(ru)果收(shou)到以(yi)前的(de)消(xiao)息(xi),即便 MAC 值正確(que)也將(jiang)其視為錯誤的(de)消(xiao)息(xi)來處理,這樣就可以(yi)防御重放(fang)攻擊。這種方法雖然也有(you)效,但發送者與接收(shou)者的(de)時鐘必須一(yi)致,而且考慮到通信的(de)nan)yan)遲,必須在時間(jian)的(de)判(pan)斷(duan)上留下緩沖,于是(shi)多多少少還是(shi)會存在可以(yi)進(jin)行重放(fang)攻擊的(de)控件。
nonce
在通信之前,接收(shou)者先向發送者發送一(yi)個一(yi)次性的(de)隨(sui)機數,這個隨(sui)機數一(yi)般稱為 nonce 。發送者在消(xiao)息(xi)中(zhong)包含這個 nonce 並計算 MAC 值。由于每次通信時 nonce 的(de)值都會發生變(bian)化(hua),因此無法進(jin)行重放(fang)攻擊。這種方法雖然有(you)效,但通信的(de)數據量會有(you)所增加(jia)。
另外(wai),除了重放(fang)攻擊,對(dui)消(xiao)息(xi)認證(zheng)碼(ma)也可以(yi)進(jin)行暴力(li)破(po)解和(he)生日攻擊,這和(he)對(dui)單向散列函數的(de)攻擊一(yi)樣。對(dui)消(xiao)息(xi)認證(zheng)碼(ma)來說,應(ying)保證(zheng)不能根據 MAC 值推測(ce)出通信雙方所使用(yong)的(de)密鑰。例如(ru) HMAC 就是(shi)利(li)用(yong)單向散列函數的(de)單向性和(he)抗(kang)踫(peng)撞性來保證(zheng)無法根據 MAC 值推測(ce)出密鑰的(de)。
消(xiao)息(xi)認證(zheng)碼(ma)無法解決的(de)問題
使用(yong)消(xiao)息(xi)認證(zheng)碼(ma)可以(yi)對(dui)消(xiao)息(xi)進(jin)行認證(zheng)並確(que)認完(wan)整(zheng)性,即能夠識別出消(xiao)息(xi)的(de)篡改(gai)和(he)偽裝。但卻解決不了“對(dui)第三方證(zheng)明”和(he)“防止否認”。
假(jia)如(ru)接收(shou)者在收(shou)到發送者的(de)消(xiao)息(xi)之後(hou),想要向第三方證(zheng)明這條消(xiao)息(xi)的(de)確(que)是(shi)發送者發送的(de),但是(shi)用(yong)消(xiao)息(xi)認證(zheng)碼(ma)無法進(jin)行這樣的(de)證(zheng)明,為什麼呢?首先,第三方要校(xiao)驗 MAC 值,就需要知道發送者與接收(shou)者之間(jian)共享的(de)密鑰。但知道密鑰後(hou),也校(xiao)驗出 MAC 值是(shi)正確(que)的(de),依然無法證(zheng)明消(xiao)息(xi)就是(shi)發送者發的(de),因為也有(you)可能是(shi)接收(shou)者發的(de)。
既然第三方無法做出證(zheng)明,那麼,如(ru)果發送者事後(hou)否認自己(ji)發送過消(xiao)息(xi),而謊稱是(shi)接收(shou)者自己(ji)發送給自己(ji)的(de)消(xiao)息(xi),對(dui)于這種情況(kuang)也是(shi)無法證(zheng)明,即無法防止否認。
後(hou)面要講的(de)數字簽名就可以(yi)解決這兩(liang)個問題。
數字簽名
消(xiao)息(xi)認證(zheng)碼(ma)之所以(yi)無法對(dui)第三方證(zheng)明和(he)防止否認,就是(shi)因為發送者和(he)接收(shou)者使用(yong)了同一(yi)個共享密鑰。那麼,如(ru)果發送者和(he)接收(shou)者不使用(yong)共享密鑰,而各自使用(yong)不同密鑰呢?假(jia)如(ru)發送者使用(yong)的(de)密鑰是(shi)一(yi)個只有(you)自己(ji)知道的(de)私鑰,在這里可稱為“簽名密鑰”,當發送者發送消(xiao)息(xi)時,用(yong)她的(de)簽名密鑰生成(cheng)一(yi)個“簽名”。相對(dui)地(di),接收(shou)者使用(yong)另一(yi)個密鑰,稱為“驗證(zheng)密鑰”,可對(dui)簽名進(jin)行驗證(zheng)。但是(shi),使用(yong)驗證(zheng)密鑰是(shi)無法生成(cheng)簽名的(de)。也就是(shi)說,只有(you)簽名密鑰kao)梢yi)生成(cheng)簽名,而用(yong)相應(ying)的(de)nan)櫓zheng)密碼(ma)可以(yi)對(dui)該men)├jin)行驗證(zheng)。這種技(ji)術就是(shi) 數字簽名 (digital signature),也稱為 電子簽名 ,或簡稱為 簽名 。另外(wai),簽名密鑰只能由簽名的(de)人持有(you),而驗證(zheng)密鑰則是(shi)任何需要驗證(zheng)簽名的(de)人都可以(yi)持有(you)。
上面講的(de)na)諶藎 he)公(gong)鑰密碼(ma)很像吧?其實,數字簽名就是(shi)通過將(jiang)公(gong)鑰密碼(ma)反(fan)過來cong)枚迪值de)。
公(gong)鑰密碼(ma)與數字簽名
下圖(tu)是(shi)使用(yong)公(gong)鑰加(jia)yong)即公(gong)鑰密碼(ma))的(de)簡單流程(cheng)圖(tu)︰

而下圖(tu)則是(shi)使用(yong)私鑰加(jia)yong)即數字簽名)的(de)簡單流程(cheng)圖(tu)︰

那麼,為什麼cong)盟皆考jia)yong)芫拖嗟庇諫cheng)簽名,而用(yong)公(gong)鑰解密就相當于驗證(zheng)簽名呢?這是(shi)因為組成(cheng)密鑰對(dui)的(de)兩(liang)個密鑰之間(jian)存在嚴密的(de)數學關系,使用(yong)公(gong)鑰加(jia)yong)艿de)密文,只能用(yong)與該公(gong)鑰配對(dui)的(de)私鑰才能解密;同樣地(di),使用(yong)私鑰加(jia)yong)艿de)密文,也只能用(yong)與該私鑰配對(dui)的(de)公(gong)鑰才能解密。也就是(shi)說,如(ru)果用(yong)某個公(gong)鑰成(cheng)功解密了密文,那麼就能夠證(zheng)明這段密文是(shi)用(yong)與該公(gong)鑰配對(dui)的(de)私鑰進(jin)行加(jia)yong)芩de)到的(de)。用(yong)私鑰進(jin)行加(jia)yong) 庖yi)行為只能由持有(you)私鑰的(de)人完(wan)成(cheng),正式基于這一(yi)事實,才可以(yi)將(jiang)用(yong)私鑰加(jia)yong)艿de)密文作為簽名來對(dui)待。而由于公(gong)鑰是(shi)對(dui)外(wai)公(gong)開的(de),因此任何人都可以(yi)用(yong)公(gong)鑰進(jin)行解密,即任何人都能夠對(dui)簽名進(jin)行驗證(zheng)。
數字簽名的(de)方法
有(you)兩(liang)種生成(cheng)和(he)驗證(zheng)數字簽名的(de)方法︰
直接對(dui)消(xiao)息(xi)簽名的(de)方法
直接對(dui)消(xiao)息(xi)簽名的(de)方法很容易(yi)理解,但實際上很少使用(yong)。簽名和(he)驗證(zheng)的(de)過程(cheng)如(ru)下圖(tu)︰

我們(men)知道,公(gong)鑰密碼(ma)算法本來就非qian)BSyong)這種方法需要對(dui)整(zheng)個消(xiao)息(xi)進(jin)行加(jia)yong)埽 突岱淺(qian)︰氖薄R虼耍 謔導視ying)用(yong)中(zhong),基本不huan) 褂yong)直接對(dui)消(xiao)息(xi)簽名的(de)方法。
對(dui)消(xiao)息(xi)的(de)散列值簽名的(de)方法
對(dui)消(xiao)息(xi)先使用(yong)單向散列函數計算出散列值,再對(dui)散列值進(jin)行簽名,這種方法的(de)過程(cheng)如(ru)下圖(tu)︰

 


因為散列值比較短(duan),因此對(dui)其進(jin)行加(jia)yong)芮├突崢旌芏唷br />數字簽名的(de)實現
數字簽名的(de)實現也有(you)很多種,基本也是(shi)使用(yong)單向散列函數和(he)公(gong)鑰密碼(ma)技(ji)術相結合。而公(gong)鑰密碼(ma)部分常(chang)用(yong)的(de)就是(shi)使用(yong)RSA,另外(wai)也有(you)使用(yong)EIGamal、Rabin。還有(you)一(yi)種數字簽名算法叫DSA(Digital Signature Algorithm)。而使用(yong)最(zui)廣泛的(de)應(ying)該就是(shi)使用(yong)RSA的(de)數字簽名了。
使用(yong)RSA實現數字簽名很簡單。而為了更加(jia)簡單起見(jian),這里不使用(yong)單向散列函數,而是(shi)直接對(dui)消(xiao)息(xi)進(jin)行簽名。首先,需要將(jiang)文本的(de)消(xiao)息(xi)先編碼(ma)為數字,因為在RSA中(zhong),被簽名的(de)消(xiao)息(xi)、密鑰以(yi)及最(zui)終生成(cheng)的(de)簽名都是(shi)以(yi)數字zhong)問獎硎鏡de)。接著,使用(yong)下列公(gong)式生成(cheng)簽名︰
簽名 = 消(xiao)息(xi)^D mod N (用(yong)RSA生成(cheng)簽名)
D 和(he) N 就是(shi)簽名者的(de)私鑰。生成(cheng)簽名後(hou),發送者就可以(yi)將(jiang)消(xiao)息(xi)和(he)簽名一(yi)起發送給接收(shou)者了。
而驗證(zheng)簽名時則使用(yong)下列公(gong)式︰
由簽名求得(de)的(de)消(xiao)息(xi) = 簽名^E mod N (用(yong)RSA驗證(zheng)簽名)
E 和(he) N 就是(shi)簽名者的(de)公(gong)鑰。接收(shou)者計算出“由簽名求得(de)的(de)消(xiao)息(xi)”後(hou),與發送者直接發送過來的(de)“消(xiao)息(xi)”內容進(jin)行對(dui)比(如(ru)果使用(yong)了單向散列函數那就是(shi)對(dui)比消(xiao)息(xi)的(de)散列值)。如(ru)果兩(liang)者一(yi)致則簽名驗證(zheng)成(cheng)功,否則簽名驗證(zheng)失敗。
對(dui)數字簽名的(de)攻擊
因為數字簽名結合了單向散列函數和(he)公(gong)鑰密碼(ma),因此,對(dui)單向散列函數和(he)公(gong)鑰密碼(ma)的(de)攻擊也同樣對(dui)數字簽名有(you)效。比如(ru),針對(dui)公(gong)鑰密碼(ma)的(de)中(zhong)間(jian)人攻擊對(dui)數字簽名來說就頗具威脅。要防止中(zhong)間(jian)人攻擊,就需要確(que)認自己(ji)所得(de)到的(de)公(gong)鑰是(shi)否真的(de)屬于自己(ji)的(de)通信對(dui)象。而解決此問題的(de)方案也和(he)公(gong)鑰密碼(ma)一(yi)樣,一(yi)般可以(yi)使用(yong)公(gong)鑰證(zheng)書。
對(dui)單向散列函數的(de)攻擊也是(shi)對(dui)“抗(kang)踫(peng)撞性”的(de)攻擊,使用(yong)高強度(du)的(de)單向散列函數就可以(yi)增大被破(po)解的(de)na)nan)度(du)。
另外(wai),還可以(yi)利(li)用(yong)數字簽名攻擊公(gong)鑰密碼(ma)。因為對(dui)消(xiao)息(xi)簽名,從(cong)另一(yi)方面來說,也是(shi)對(dui)消(xiao)息(xi)解密。利(li)用(yong)這一(yi)點bei) ?髡呔涂梢yi)發動(dong)一(yi)種巧妙(miao)的(de)攻擊,即利(li)用(yong)數字簽名來破(po)譯密文。
假(jia)設攻擊者攔截到發送者發給接收(shou)者的(de)密文後(hou)將(jiang)其保存了下來,並給接收(shou)者寫(xie)了一(yi)封(feng)郵件,謊稱自己(ji)是(shi)密碼(ma)學研(yan)究者,正在進(jin)行關于數字簽名的(de)實驗,請求接收(shou)者對(dui)附件中(zhong)的(de)數據進(jin)行簽名並回復(fu),說附件中(zhong)的(de)數據只是(shi)隨(sui)機數據,不huan)嵩斐cheng)任何問題。而實際上,附件的(de)數據就是(shi)剛(gang)才保存下來的(de)密文。如(ru)果接收(shou)者中(zhong)計而對(dui)附近進(jin)行了簽名並回復(fu)給了攻擊者,那攻擊者不費吹灰之力(li)就可以(yi)破(po)譯密文了。
對(dui)于這種攻擊,應(ying)該采(cai)取怎(zen)樣的(de)對(dui)策呢?首先,不要直接對(dui)消(xiao)息(xi)進(jin)行簽名,對(dui)散列值進(jin)行簽名比較安全;其次,公(gong)鑰密碼(ma)和(he)數字簽名最(zui)好分別使用(yong)不同的(de)密鑰對(dui)。然而,最(zui)重要的(de)就是(shi)絕對(dui)不要對(dui)意思不清楚的(de)消(xiao)息(xi)進(jin)行簽名,尤(you)其是(shi)不要對(dui)看起來只是(shi)隨(sui)機數據的(de)消(xiao)息(xi)進(jin)行簽名。
數字簽名無法解決的(de)問題
用(yong)數字簽名既可以(yi)識別出篡改(gai)和(he)偽裝,還可以(yi)防止否認。即是(shi)說,數字簽名同時實現zhi)巳que)認消(xiao)息(xi)的(de)完(wan)整(zheng)性、進(jin)行認證(zheng)以(yi)及否認防止。
然而,數字簽名存在和(he)公(gong)鑰密碼(ma)一(yi)樣的(de)問題,那就是(shi)公(gong)鑰問題。公(gong)鑰必須屬于真正的(de)發送者,要確(que)認公(gong)鑰是(shi)否合法,就需要使用(yong)證(zheng)書。這就是(shi)後(hou)面要講到的(de)na)諶 恕br />證(zheng)書
無論是(shi)公(gong)鑰密碼(ma)還是(shi)數字簽名,都存在需要驗證(zheng)公(gong)鑰是(shi)否合法的(de)問題。而證(zheng)書,就是(shi)用(yong)來對(dui)公(gong)鑰合法性提供證(zheng)明的(de)技(ji)術。
公(gong)鑰證(zheng)書(Public-Key Certificate,PKC)和(he)駕照類(lei)似,一(yi)般會記有(you)姓名、組織、郵箱(xiang)地(di)址等個人信息(xi),以(yi)及屬于本人的(de)公(gong)鑰,並由 認證(zheng)機構 (Certification Authority、Certifying Authority,CA)施加(jia)數字簽名。
認證(zheng)機構就是(shi)能夠認定(ding)“公(gong)鑰確(que)實屬于此人”並能夠生成(cheng)數字簽名的(de)個人或組織。認證(zheng)機構中(zhong)有(you)國(guo)際性組織和(he)政府(fu)所設立(li)的(de)組織,也有(you)通過提供認證(zheng)服務來cong) li)的(de)一(yi)般企業,此外(wai)個人也可以(yi)成(cheng)立(li)認證(zheng)機構哦ding)J瀾縞獻zui)有(you)名的(de)認證(zheng)機構當屬VeriSign公(gong)司。
證(zheng)書的(de)應(ying)用(yong)場景
通過認證(zheng)機構使用(yong)證(zheng)書的(de)過程(cheng)如(ru)下圖(tu)所示︰

1. 接收(shou)者生成(cheng)密鑰對(dui);
2. 接收(shou)者在認證(zheng)機構注冊自己(ji)的(de)公(gong)鑰;
3. 認證(zheng)機構用(yong)自己(ji)的(de)私鑰對(dui)接收(shou)者的(de)公(gong)鑰施加(jia)數字簽名並生成(cheng)證(zheng)書;
4. 發送者得(de)到帶(dai)有(you)認證(zheng)機構數字簽名的(de)屬于接收(shou)者的(de)公(gong)鑰證(zheng)書;
5. 發送者使用(yong)認證(zheng)機構的(de)公(gong)鑰驗證(zheng)數字簽名,驗證(zheng)通過則證(zheng)明證(zheng)書中(zhong)包含的(de)公(gong)鑰的(de)確(que)屬于接收(shou)者的(de);
6. 發送者用(yong)接收(shou)者的(de)公(gong)鑰加(jia)yong)芟xiao)息(xi)並發送給接收(shou)者;
7. 接收(shou)者用(yong)自己(ji)的(de)私鑰解密密文得(de)到消(xiao)息(xi)。
公(gong)鑰基礎設施(PKI)
公(gong)鑰基礎設施(Public-Key Infrastructure)是(shi)為了能夠更有(you)效地(di)運(yun)用(yong)公(gong)鑰而制定(ding)的(de)一(yi)系列規範和(he)規格的(de)總稱。公(gong)鑰基礎設施一(yi)般根據其英(ying)語縮寫(xie)而簡稱為PKI。PKI只是(shi)一(yi)個總稱,而並非指gai)騁yi)個單獨的(de)規範或規格。比如(ru),使用(yong)最(zui)廣泛的(de) X.509 規範也是(shi)PKI的(de)一(yi)種。
PKI的(de)組成(cheng)要素主要有(you)3個︰
用(yong)戶 ︰使用(yong)PKI的(de)人
認證(zheng)機構 ︰頒發證(zheng)書的(de)人
倉庫 ︰保存證(zheng)書的(de)數據庫
這三者的(de)關系如(ru)下圖(tu)︰

另外(wai),認證(zheng)機構會有(you)層級的(de)關系,處于最(zui)頂層的(de)認證(zheng)機構一(yi)般就稱為 根CA (Root CA)。上層認證(zheng)機構可以(yi)驗證(zheng)下層認證(zheng)機構的(de)證(zheng)書,即是(shi)說,下層認證(zheng)機構的(de)證(zheng)書是(shi)經過上層認證(zheng)機構簽名的(de)。而根CA則會對(dui)自己(ji)的(de)證(zheng)書進(jin)行簽名,這叫 自簽名 。認證(zheng)機構的(de)層級關系如(ru)下圖(tu)︰

當發送者需要對(dui)最(zui)底層的(de)Bob的(de)數字簽名進(jin)行驗證(zheng)時,首先從(cong)最(zui)頂層的(de)根CA開始,然後(hou)獲得(de)下層的(de)公(gong)鑰證(zheng)書,這個證(zheng)書上面會帶(dai)有(you)上層的(de)數字簽名,因此需要用(yong)上層的(de)公(gong)鑰對(dui)數字簽名進(jin)行驗證(zheng)。這樣逐(zhu)層向下驗證(zheng),一(yi)直驗證(zheng)到最(zui)底層的(de)Bob。
對(dui)證(zheng)書的(de)攻擊
由于證(zheng)書使用(yong)的(de)就是(shi)數字簽名技(ji)術,因此針對(dui)數字簽名的(de)所有(you)攻擊方法對(dui)證(zheng)書都jia)you)效。

 

另外(wai),在公(gong)鑰注冊之前也可以(yi)進(jin)行攻擊。用(yong)戶準備在認證(zheng)機構注冊自己(ji)的(de)公(gong)鑰時,攻擊者可以(yi)把消(xiao)息(xi)攔截,然後(hou)將(jiang)公(gong)鑰替換(huan)成(cheng)自己(ji)的(de)。這樣一(yi)來,認證(zheng)機構就會對(dui)“接收(shou)者的(de)個人信息(xi)”和(he)“攻擊者的(de)公(gong)鑰”這個組合進(jin)行數字簽名。要防止這種攻擊,接收(shou)者可以(yi)在將(jiang)自己(ji)的(de)公(gong)鑰發送給認證(zheng)機構進(jin)行注冊時,使用(yong)認證(zheng)機構的(de)公(gong)鑰對(dui)自己(ji)的(de)公(gong)鑰進(jin)行加(jia)yong)塴4送wai),認證(zheng)機構在確(que)認接收(shou)者的(de)身份(fen)時,也可以(yi)將(jiang)公(gong)鑰的(de)指紋(即散列值)一(yi)並發送給接收(shou)者請他進(jin)行確(que)認。
攻擊者還可以(yi)利(li)用(yong)注冊相似人名進(jin)行攻擊。證(zheng)書是(shi)認證(zheng)機構對(dui)公(gong)鑰及其持有(you)者的(de)信息(xi)加(jia)上數字簽名的(de)產物(wu),對(dui)于一(yi)些相似pin)de)身份(fen)信息(xi),計算機可以(yi)進(jin)行區別,但人類(lei)往往很容易(yi)認錯,而這就可以(yi)被用(yong)來進(jin)行攻擊。比如(ru),假(jia)設用(yong)戶信息(xi)中(zhong)名字的(de)部分是(shi)︰
Name = Bob (首字母fu)笮xie))
而攻擊者用(yong)另一(yi)個類(lei)似pin)de)用(yong)戶信息(xi)注冊了另一(yi)個不同的(de)公(gong)鑰︰
Name = BOB (所有(you)字母fu)笮xie))
隨(sui)後(hou),攻擊者偽裝成(cheng)Bob,將(jiang) Name = BOB 的(de)公(gong)鑰發送給通信對(dui)象Alice,Alice看到證(zheng)書中(zhong)的(de)用(yong)戶信息(xi),很可能會將(jiang)BOB誤認為是(shi)自己(ji)要發送消(xiao)息(xi)的(de)對(dui)象Bob。
要防止這種攻擊,認證(zheng)機構必須確(que)認證(zheng)書中(zhong)所包含的(de)信息(xi)是(shi)否真的(de)是(shi)其持有(you)者的(de)個人信息(xi),當本人身份(fen)確(que)認失敗時則不向其頒發證(zheng)書。
攻擊者也可以(yi)竊取認證(zheng)機構的(de)私鑰,不過認證(zheng)機構對(dui)yun)皆康de)保護是(shi)非qian)Q廈艿de),所以(yi)一(yi)般比較難(nan)竊取。如(ru)果認證(zheng)機構的(de)私鑰泄露了,認證(zheng)機構就需要將(jiang)私鑰泄露一(yi)事通過 CRL 通知用(yong)戶。CRL(Certificate Revocation List)為證(zheng)書作廢清單,是(shi)認證(zheng)機構宣布作廢的(de)證(zheng)書一(yi)覽表,具體來說,是(shi)一(yi)張已作廢的(de)證(zheng)書序(xu)列號的(de)清單,並由認證(zheng)機構加(jia)上了數字簽名。
利(li)用(yong)鑽上面提到的(de) CRL 的(de)空子也可以(yi)進(jin)行攻擊。因為從(cong)公(gong)鑰失效到發送者收(shou)到 CRL 需要經過一(yi)段時間(jian),攻擊者就可以(yi)利(li)用(yong)這段時間(jian)差來發動(dong)攻擊。
關于證(zheng)書的(de) Q&A
為什麼需要證(zheng)書 如(ru)果從(cong)you)現zheng)機構獲取公(gong)鑰,就可以(yi)降低遭(zao)到中(zhong)間(jian)人攻擊的(de)風險。因為帶(dai)有(you)證(zheng)書的(de)公(gong)鑰是(shi)經過認證(zheng)機構進(jin)行數字簽名的(de),事實上無法被篡改(gai)。
其實,如(ru)果能夠取得(de)可信的(de)公(gong)鑰,比如(ru)通信雙方在同一(yi)個辦公(gong)室(shi),很容易(yi)取得(de)可信的(de)公(gong)鑰,這種情況(kuang)下則不需要認證(zheng)機構。否則,認證(zheng)機構和(he)證(zheng)書的(de)存在就有(you)意義了。當bei)鐘you)可信的(de)認證(zheng)機構公(gong)鑰,並相信認證(zheng)機構所進(jin)行的(de)身份(fen)確(que)認的(de)情況(kuang)下,則可以(yi)信任該認證(zheng)機構頒發的(de)證(zheng)書以(yi)及通過該途徑(jing)取得(de)的(de)公(gong)鑰。
通過自己(ji)的(de)方法進(jin)行認證(zheng)是(shi)不是(shi)更安全 有(you)些人對(dui)使用(yong)公(gong)開的(de)技(ji)術總覺得(de)不放(fang)pan)模 褂yong)公(gong)開的(de)技(ji)術等于為攻擊者提供了用(yong)于攻擊的(de)信息(xi),相比之下,還是(shi)使用(yong)公(gong)司自己(ji)開發的(de)保密的(de)認證(zheng)方法更安全吧?
其實這是(shi)錯誤的(de)。自己(ji)開發保密的(de)方法是(shi)犯了典型的(de) 隱蔽式安全 (security by obscurity)錯誤。私下開發安全相關的(de)技(ji)術其實是(shi)危險的(de),僅靠(kao)一(yi)家公(gong)司的(de)力(li)量無法開發出足以(yi)抵御攻擊的(de)安全技(ji)術。這也是(shi)為什麼 AES 和(he) RSA 算法要采(cai)用(yong)公(gong)開競(jing)賽(sai)的(de)方式,讓全世界的(de)安全專家一(yi)起來驗證(zheng)這些技(ji)術的(de)安全性。
為什麼要相信認證(zheng)機構
其實,這個問題關系到“信任是(shi)如(ru)何產生的(de)”這一(yi)本質性問題。為什麼我們(men)要把錢存進(jin)銀行呢?認證(zheng)機構是(shi)否讓人感(gan)到可信,和(he)銀行是(shi)一(yi)樣的(de)。
也有(you)不依賴于認證(zheng)機構的(de),PGP 軟(ruan)件就是(shi)。PGP 是(shi)通過 信任網 的(de)方法來建立(li)每個人之間(jian)的(de)信任關系的(de)。下一(yi)篇文章再具體講 PGP。
寫(xie)在最(zui)後(hou)
本篇文章總結了四部分內容︰單向散列函數、消(xiao)息(xi)認證(zheng)碼(ma)、數字簽名和(he)證(zheng)書。數字簽名的(de)安全性最(zui)高,既能確(que)保完(wan)整(zheng)性,也能進(jin)行認證(zheng)和(he)防止否認。另外(wai),數字簽名也是(shi)將(jiang)單向散列函數和(he)公(gong)鑰密碼(ma)技(ji)術相結合在了一(yi)起。前一(yi)篇文章所講的(de)混合密碼(ma)系統也是(shi)結合了多種技(ji)術。其實,實用(yong)性的(de)安全產品,都是(shi)多種zhi)藶ma)技(ji)術組合在一(yi)起實用(yong)的(de)。例如(ru),PGP、SSLTLS等。下一(yi)篇就會講如(ru)何將(jiang)多種zhi)藶ma)技(ji)術組合在一(yi)起。
Tag標簽︰密碼(ma)  技(ji)術  
  • 分分pk10官网

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免(mian)責(ze)條款 - 網站地(di)圖(tu) - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用(yong)于網絡技(ji)術學習,學習中(zhong)請遵(zun)循相關法律法規
分分pk10官网 | 下一页