當(dāng)談?wù)撏ㄓ嵃踩臅r候狞悲,通常我們關(guān)心的是下面四個問題:
1)防止消息竊聽
當(dāng)傳送的消息是機(jī)密內(nèi)容的時撮抓,人們希望給消息加密。這樣即使消息在傳送過程中被截獲摇锋,竊聽者也無法確切的知道消息內(nèi)容丹拯,從而達(dá)到保密的效果。
2)防止消息篡改
消息在傳送過程中荸恕,有可能被攻擊者篡改內(nèi)容乖酬,這樣接收者接到的就是錯誤的信息,通訊過程中應(yīng)該提供某種方案防止篡改融求。
3)防止消息偽造
攻擊者假冒發(fā)送者的名義咬像,給接收者發(fā)送消息,這種行為稱為消息偽造生宛。
4)防止否認(rèn)
發(fā)送者事后否認(rèn)自己發(fā)送過消息县昂,需要有一種機(jī)制來防止這種情況發(fā)生。
下面茅糜,我們將詳細(xì)分析下這四個問題七芭。
1. 防竊聽
提到加密,很多人的第一反應(yīng)是下面這樣:
"自己實現(xiàn)一個加密算法蔑赘,然后將算法保密狸驳,這樣就能保證安全预明。"
在密碼學(xué)的領(lǐng)域,這是個典型的誤區(qū)耙箍。
首先撰糠,開發(fā)高強(qiáng)度的加密算法是非常困難的。普通的算法在外行看起來牢不可破辩昆,但是專業(yè)破譯者卻有非常多的工具和攻擊方式阅酪,使其破綻百出。
其次汁针,加密算法的秘密總有一天會公諸于世术辐。到那時,所有基于這個算法的秘密都將被泄露施无。
實踐中使用的加密算法都是公開的辉词,消息傳遞依靠保密的密鑰來確保消息不被破解。正因此猾骡,它們經(jīng)過攻擊者長期嘗試仍未被破解瑞躺,所以保密強(qiáng)度較高。
常用的加密體系分為三類兴想,對稱加密幢哨、非對稱加密和混合加密。
1.1 對稱加密
對稱加密是指加密和解密用的是同一個密鑰嫂便。這個密鑰只有發(fā)送者和接收者知曉捞镰,其他沒有密鑰的人無法解密消息。
常見的對稱加密算法有 DES 顽悼、 3DES 和 AES 等曼振。隨著計算機(jī)硬件的進(jìn)步,使用暴力破解法已經(jīng)能在現(xiàn)實時間中完成對 DES 的破解蔚龙; 3DES 處理速度不高冰评,此外在安全性方面也逐漸顯現(xiàn)出了些問題;目前應(yīng)該選用的算法是 AES 木羹。
1.2 非對稱加密
與對稱加密不同甲雅,非對稱加密算法需要兩個密鑰——公鑰和私鑰。
公鑰和私鑰是一對坑填。公鑰加密抛人,對應(yīng)的私鑰才能解密,反之亦然脐瑰。前面的場景適用于防竊聽妖枚,后面的場景適用于數(shù)字簽名,也就是防止否認(rèn)苍在。
實現(xiàn)機(jī)密消息交換的基本過程是:甲方生成一對密鑰并將其中一個作為公鑰向其它方公開绝页,得到該公鑰的乙方使用該公鑰對消息進(jìn)行加密再發(fā)送給甲方荠商,甲方再使用自己的私鑰對消息進(jìn)行解密。
網(wǎng)絡(luò)中的其他竊聽者雖然也能拿到甲方的公鑰续誉,但是加密后的消息只有私鑰才能解開莱没,所以他們無法破譯消息。
最常使用的非對稱加密算法是 RSA 酷鸦。
1.3 混合加密
比較一下對稱加密和非對稱加密各自的特點:
對稱加密處理速度快饰躲,但是由于通訊雙方使用的是同一個密鑰,存在密鑰配送困難的問題臼隔。要求通訊雙方線下交換密鑰是不現(xiàn)實的嘹裂,而線上配送又存在被竊聽的風(fēng)險。
非對稱加密的公鑰本身就是可以對外公開的躬翁,天然避免了密鑰配送的問題焦蘑;但是非對稱加密的處理速度遠(yuǎn)遠(yuǎn)低于對稱加密。
混合加密體系是將上述兩種優(yōu)勢相結(jié)合的辦法盒发。
先看一下加密過程。
通訊過程中傳送了兩部分內(nèi)容:一部分是使用對稱加密算法加密的消息狡逢,另一部分是對稱加密的密鑰宁舰。其中對稱加密的密鑰是由接收方的公鑰加密過的,這樣除了接收方之外奢浑,任何其他人都不能解開對稱加密的密鑰蛮艰,從而也無法解開加密的消息。
加密過程
相比于要傳送的消息本身雀彼,對稱密鑰的長度要短得多壤蚜。非對稱加密的處理速度慢,所以只用來加密對稱密鑰徊哑,而很長的消息則用處理速度快的對稱算法來加密袜刷。
下面是解密過程。
先把對稱加密的密鑰和加密后消息這兩部分分離開莺丑。對稱密鑰之前是用接收者的公鑰加密的著蟹,所以只能使用接收者的私鑰進(jìn)行解密。對稱密鑰解出來之后梢莽,就可以對消息密文進(jìn)行解密了萧豆,從而得到消息明文。
2. 防篡改
通訊過程中昏名,接收方有時候會有這樣的疑問:
"我接收到的消息確實就是發(fā)送者發(fā)過來的那條嗎涮雷?在傳輸?shù)倪^程中會不會已經(jīng)被攻擊者給改寫了?"
這是對消息完整性的挑戰(zhàn)轻局。
實踐中一般使用摘要算法來應(yīng)對這種挑戰(zhàn)洪鸭。
摘要算法有如下重要特性样刷。
第一,輸入任意長度的字符串卿嘲,輸出固定長度的字符串颂斜。比起要傳輸?shù)南㈤L度來說,輸出的固定長度通常很短拾枣,因此很容易進(jìn)行處理沃疮。
第二,相同的輸入總是對應(yīng)相同的輸出梅肤。發(fā)送方對消息進(jìn)行摘要處理司蔬,同時把摘要附在消息里發(fā)送出來。接收方收到之后用同樣的摘要算法對消息進(jìn)行處理姨蝴,再把計算出來的摘要和收到的摘要進(jìn)行對比俊啼,如果不一致,就能知道消息已被篡改左医。
第三授帕,給定一個字符串 A ,經(jīng)過摘要算法處理后的串 B 浮梢,很難找到一個字符串 C 跛十,使其摘要后的串和串 B 相同。這個重要的特性稱為抗碰撞性(弱抗碰撞性)秕硝。這條特性使得攻擊者在篡改消息后芥映,很難再計算出同樣的摘要,從而規(guī)避摘要算法的檢查远豺。
第四奈偏,這種轉(zhuǎn)換具有單向性,即不能通過輸出串倒推出輸入串躯护。
常用的摘要算法包含 MD4 惊来、 MD5 、 SHA-1 和 SHA-2 (包含 SHA-256 榛做、SHA-384 和 SHA-512 )唁盏。上述算法中目前唯有 SHA-2 算法的強(qiáng)抗碰撞性尚未被攻破。
3. 防偽造
防偽造指的是"消息來自正確的發(fā)送者"检眯。
防篡改關(guān)注的是消息內(nèi)容厘擂,防偽造關(guān)注的是消息發(fā)送者本身。
防篡改關(guān)注的是消息的完整性( integrity )锰瘸,防偽造關(guān)注的是消息的認(rèn)證( authentication )刽严。
消息認(rèn)證碼( Message Authentication Code )是一種既能檢查消息完整性,又能做身份驗證的技術(shù),取三個單詞的首字母舞萄,簡稱為 MAC 眨补。
實踐中經(jīng)常使用與密鑰相關(guān)的摘要算法來實現(xiàn)消息認(rèn)證碼。
消息認(rèn)證碼的使用步驟如下:
1. 發(fā)送者和接收者事先共享密鑰倒脓;
2. 發(fā)送者使用共享密鑰對消息計算 MAC 值撑螺;
3. 發(fā)送者將消息和 MAC 一起發(fā)給接收者;
4. 接收者使用共享密鑰對接收到的消息計算 MAC 值崎弃;
5. 接收者將計算的 MAC 值跟接收到的 MAC 值做比較甘晤;
由于攻擊者沒有共享密鑰,所以無法跟接收者算出一樣的 MAC 值饲做。
跟對稱密鑰一樣线婚,這里同樣面臨密鑰配送的問題,我們?nèi)匀豢梢圆捎梅菍ΨQ加密的方式進(jìn)行密鑰配送盆均。除此之外塞弊, Diffie-Hellman 算法也是常用的密鑰交換方式。
4. 防否認(rèn)
想象一下這個場景泪姨, Bob 收到了一張 Alice 發(fā)來的五百萬元的借條游沿。使用事先約定好的共享密鑰, Bob 計算出的 MAC 值跟借條里收到的 MAC 值一致肮砾,這表明消息沒有被篡改奏候,同時消息也不會是第三方偽造的,那么就沒有任何后顧之憂了嗎唇敞?
并不是這樣。問題在于共享密鑰是兩個人持有的咒彤,因此能算出正確 MAC 值的并不只是 Alice 疆柔, Bob 也能。如果 Alice 聲稱自己沒有發(fā)過這樣的借條镶柱,那作為第三方仲裁者來說旷档,無法證明借條是 Alice 生成的還是 Bob 生成的。
我們需要尋求一種解決方案歇拆, Alice 使用的簽名是由只有她自己才知道的密鑰生成鞋屈,同時別人還能順利解開。這樣別人無法偽造 Alice 的簽名故觅,同時還能驗證這個簽名厂庇。
看上去是不是有點熟悉?沒錯输吏,就是之前介紹過的非對稱加密权旷。
Alice 使用自己的私鑰對消息進(jìn)行簽名(加密),同時對外發(fā)布對應(yīng)的公鑰贯溅。無論是 Bob 還是第三方仲裁者拄氯,都可以使用公鑰對簽名進(jìn)行驗證(解密)躲查。
這種方案稱為數(shù)字簽名。
5. 后話
到目前為止译柏,看上去我們解決了之前提出的四個問題镣煮,但是通訊安全領(lǐng)域的問題還遠(yuǎn)不止這些。比如怎么驗證公鑰的可靠性鄙麦?比如怎么才能生成一個可靠的隨機(jī)數(shù)典唇?再延伸下去我們會涉及到證書,認(rèn)證機(jī)構(gòu)和隨機(jī)數(shù)的分級等領(lǐng)域黔衡,這里就不再一一展開了蚓聘。
最后,請大家記住一句話:只有完美的密碼盟劫,沒有完美的人夜牡。不管多精密的系統(tǒng),在確保整體安全方面侣签,人是一個特別巨大的弱點塘装。很多時候,最脆弱的環(huán)節(jié)并不是各種算法影所,而是人類自己蹦肴。