域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)
當(dāng)談?wù)撏ㄓ嵃踩臅r(shí)候,通常我們關(guān)心的是下面四個(gè)問(wèn)題:
1)防止消息竊聽
當(dāng)傳送的消息是機(jī)密內(nèi)容的時(shí),人們希望給消息加密。這樣即使消息在傳送過(guò)程中被截獲,竊聽者也無(wú)法確切的知道消息內(nèi)容,從而達(dá)到保密的效果。
2)防止消息篡改
消息在傳送過(guò)程中,有可能被攻擊者篡改內(nèi)容,這樣接收者接到的就是錯(cuò)誤的信息,通訊過(guò)程中應(yīng)該提供某種方案防止篡改。
3)防止消息偽造
攻擊者假冒發(fā)送者的名義,給接收者發(fā)送消息,這種行為稱為消息偽造。
4)防止否認(rèn)
發(fā)送者事后否認(rèn)自己發(fā)送過(guò)消息,需要有一種機(jī)制來(lái)防止這種情況發(fā)生。
下面,我們將詳細(xì)分析下這四個(gè)問(wèn)題。
1. 防竊聽
提到加密,很多人的第一反應(yīng)是下面這樣:
"自己實(shí)現(xiàn)一個(gè)加密算法,然后將算法保密,這樣就能保證安全。"
在密碼學(xué)的領(lǐng)域,這是個(gè)典型的誤區(qū)。
首先,開發(fā)高強(qiáng)度的加密算法是非常困難的。普通的算法在外行看起來(lái)牢不可破,但是專業(yè)破譯者卻有非常多的工具和攻擊方式,使其破綻百出。
其次,加密算法的秘密總有一天會(huì)公諸于世。到那時(shí),所有基于這個(gè)算法的秘密都將被泄露。
實(shí)踐中使用的加密算法都是公開的,消息傳遞依靠保密的密鑰來(lái)確保消息不被破解。正因此,它們經(jīng)過(guò)攻擊者長(zhǎng)期嘗試仍未被破解,所以保密強(qiáng)度較高。
常用的加密體系分為三類,對(duì)稱加密、非對(duì)稱加密和混合加密。
1.1 對(duì)稱加密
對(duì)稱加密是指加密和解密用的是同一個(gè)密鑰。這個(gè)密鑰只有發(fā)送者和接收者知曉,其他沒(méi)有密鑰的人無(wú)法解密消息。
常見(jiàn)的對(duì)稱加密算法有 DES 、 3DES 和 AES 等。隨著計(jì)算機(jī)硬件的進(jìn)步,使用暴力破解法已經(jīng)能在現(xiàn)實(shí)時(shí)間中完成對(duì) DES 的破解; 3DES 處理速度不高,此外在安全性方面也逐漸顯現(xiàn)出了些問(wèn)題;目前應(yīng)該選用的算法是 AES 。
1.2 非對(duì)稱加密
與對(duì)稱加密不同,非對(duì)稱加密算法需要兩個(gè)密鑰——公鑰和私鑰。
公鑰和私鑰是一對(duì)。公鑰加密,對(duì)應(yīng)的私鑰才能解密,反之亦然。前面的場(chǎng)景適用于防竊聽,后面的場(chǎng)景適用于數(shù)字簽名,也就是防止否認(rèn)。
實(shí)現(xiàn)機(jī)密消息交換的基本過(guò)程是:甲方生成一對(duì)密鑰并將其中一個(gè)作為公鑰向其它方公開,得到該公鑰的乙方使用該公鑰對(duì)消息進(jìn)行加密再發(fā)送給甲方,甲方再使用自己的私鑰對(duì)消息進(jìn)行解密。
網(wǎng)絡(luò)中的其他竊聽者雖然也能拿到甲方的公鑰,但是加密后的消息只有私鑰才能解開,所以他們無(wú)法破譯消息。
最常使用的非對(duì)稱加密算法是 RSA 。
1.3 混合加密
比較一下對(duì)稱加密和非對(duì)稱加密各自的特點(diǎn):
對(duì)稱加密處理速度快,但是由于通訊雙方使用的是同一個(gè)密鑰,存在密鑰配送困難的問(wèn)題。要求通訊雙方線下交換密鑰是不現(xiàn)實(shí)的,而線上配送又存在被竊聽的風(fēng)險(xiǎn)。
非對(duì)稱加密的公鑰本身就是可以對(duì)外公開的,天然避免了密鑰配送的問(wèn)題;但是非對(duì)稱加密的處理速度遠(yuǎn)遠(yuǎn)低于對(duì)稱加密。
混合加密體系是將上述兩種優(yōu)勢(shì)相結(jié)合的辦法。
先看一下加密過(guò)程。
通訊過(guò)程中傳送了兩部分內(nèi)容:一部分是使用對(duì)稱加密算法加密的消息,另一部分是對(duì)稱加密的密鑰。其中對(duì)稱加密的密鑰是由接收方的公鑰加密過(guò)的,這樣除了接收方之外,任何其他人都不能解開對(duì)稱加密的密鑰,從而也無(wú)法解開加密的消息。
加密過(guò)程
相比于要傳送的消息本身,對(duì)稱密鑰的長(zhǎng)度要短得多。非對(duì)稱加密的處理速度慢,所以只用來(lái)加密對(duì)稱密鑰,而很長(zhǎng)的消息則用處理速度快的對(duì)稱算法來(lái)加密。
下面是解密過(guò)程。
先把對(duì)稱加密的密鑰和加密后消息這兩部分分離開。對(duì)稱密鑰之前是用接收者的公鑰加密的,所以只能使用接收者的私鑰進(jìn)行解密。對(duì)稱密鑰解出來(lái)之后,就可以對(duì)消息密文進(jìn)行解密了,從而得到消息明文。
2. 防篡改
通訊過(guò)程中,接收方有時(shí)候會(huì)有這樣的疑問(wèn):
"我接收到的消息確實(shí)就是發(fā)送者發(fā)過(guò)來(lái)的那條嗎?在傳輸?shù)倪^(guò)程中會(huì)不會(huì)已經(jīng)被攻擊者給改寫了?"
這是對(duì)消息完整性的挑戰(zhàn)。
實(shí)踐中一般使用摘要算法來(lái)應(yīng)對(duì)這種挑戰(zhàn)。
摘要算法有如下重要特性。
第一,輸入任意長(zhǎng)度的字符串,輸出固定長(zhǎng)度的字符串。比起要傳輸?shù)南㈤L(zhǎng)度來(lái)說(shuō),輸出的固定長(zhǎng)度通常很短,因此很容易進(jìn)行處理。
第二,相同的輸入總是對(duì)應(yīng)相同的輸出。發(fā)送方對(duì)消息進(jìn)行摘要處理,同時(shí)把摘要附在消息里發(fā)送出來(lái)。接收方收到之后用同樣的摘要算法對(duì)消息進(jìn)行處理,再把計(jì)算出來(lái)的摘要和收到的摘要進(jìn)行對(duì)比,如果不一致,就能知道消息已被篡改。
第三,給定一個(gè)字符串 A ,經(jīng)過(guò)摘要算法處理后的串 B ,很難找到一個(gè)字符串 C ,使其摘要后的串和串 B 相同。這個(gè)重要的特性稱為抗碰撞性(弱抗碰撞性)。這條特性使得攻擊者在篡改消息后,很難再計(jì)算出同樣的摘要,從而規(guī)避摘要算法的檢查。
第四,這種轉(zhuǎn)換具有單向性,即不能通過(guò)輸出串倒推出輸入串。
常用的摘要算法包含 MD4 、 MD5 、 SHA-1 和 SHA-2 (包含 SHA-256 、SHA-384 和 SHA-512 )。上述算法中目前唯有 SHA-2 算法的強(qiáng)抗碰撞性尚未被攻破。
3. 防偽造
防偽造指的是"消息來(lái)自正確的發(fā)送者"。
防篡改關(guān)注的是消息內(nèi)容,防偽造關(guān)注的是消息發(fā)送者本身。
防篡改關(guān)注的是消息的完整性( integrity ),防偽造關(guān)注的是消息的認(rèn)證( authentication )。
消息認(rèn)證碼( Message Authentication Code )是一種既能檢查消息完整性,又能做身份驗(yàn)證的技術(shù),取三個(gè)單詞的首字母,簡(jiǎn)稱為 MAC 。
實(shí)踐中經(jīng)常使用與密鑰相關(guān)的摘要算法來(lái)實(shí)現(xiàn)消息認(rèn)證碼。
消息認(rèn)證碼的使用步驟如下:
1. 發(fā)送者和接收者事先共享密鑰;
2. 發(fā)送者使用共享密鑰對(duì)消息計(jì)算 MAC 值;
3. 發(fā)送者將消息和 MAC 一起發(fā)給接收者;
4. 接收者使用共享密鑰對(duì)接收到的消息計(jì)算 MAC 值;
5. 接收者將計(jì)算的 MAC 值跟接收到的 MAC 值做比較;
由于攻擊者沒(méi)有共享密鑰,所以無(wú)法跟接收者算出一樣的 MAC 值。
跟對(duì)稱密鑰一樣,這里同樣面臨密鑰配送的問(wèn)題,我們?nèi)匀豢梢圆捎梅菍?duì)稱加密的方式進(jìn)行密鑰配送。除此之外, Diffie-Hellman 算法也是常用的密鑰交換方式。
4. 防否認(rèn)
想象一下這個(gè)場(chǎng)景, Bob 收到了一張 Alice 發(fā)來(lái)的五百萬(wàn)元的借條。使用事先約定好的共享密鑰, Bob 計(jì)算出的 MAC 值跟借條里收到的 MAC 值一致,這表明消息沒(méi)有被篡改,同時(shí)消息也不會(huì)是第三方偽造的,那么就沒(méi)有任何后顧之憂了嗎?
并不是這樣。問(wèn)題在于共享密鑰是兩個(gè)人持有的,因此能算出正確 MAC 值的并不只是 Alice , Bob 也能。如果 Alice 聲稱自己沒(méi)有發(fā)過(guò)這樣的借條,那作為第三方仲裁者來(lái)說(shuō),無(wú)法證明借條是 Alice 生成的還是 Bob 生成的。
我們需要尋求一種解決方案, Alice 使用的簽名是由只有她自己才知道的密鑰生成,同時(shí)別人還能順利解開。這樣別人無(wú)法偽造 Alice 的簽名,同時(shí)還能驗(yàn)證這個(gè)簽名。
看上去是不是有點(diǎn)熟悉?沒(méi)錯(cuò),就是之前介紹過(guò)的非對(duì)稱加密。
Alice 使用自己的私鑰對(duì)消息進(jìn)行簽名(加密),同時(shí)對(duì)外發(fā)布對(duì)應(yīng)的公鑰。無(wú)論是 Bob 還是第三方仲裁者,都可以使用公鑰對(duì)簽名進(jìn)行驗(yàn)證(解密)。
這種方案稱為數(shù)字簽名。
5. 后話
到目前為止,看上去我們解決了之前提出的四個(gè)問(wèn)題,但是通訊安全領(lǐng)域的問(wèn)題還遠(yuǎn)不止這些。比如怎么驗(yàn)證公鑰的可靠性?比如怎么才能生成一個(gè)可靠的隨機(jī)數(shù)?再延伸下去我們會(huì)涉及到證書,認(rèn)證機(jī)構(gòu)和隨機(jī)數(shù)的分級(jí)等領(lǐng)域,這里就不再一一展開了。
最后,請(qǐng)大家記住一句話:只有完美的密碼,沒(méi)有完美的人。不管多精密的系統(tǒng),在確保整體安全方面,人是一個(gè)特別巨大的弱點(diǎn)。很多時(shí)候,最脆弱的環(huán)節(jié)并不是各種算法,而是人類自己。
申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!