一、前言
計(jì)算機(jī)網(wǎng)絡(luò)安全是一個(gè)很大內(nèi)容,包括網(wǎng)絡(luò)攻擊、加密技術(shù)、密鑰分配、鑒別技術(shù)等,本文從網(wǎng)絡(luò)攻擊(被動(dòng)攻擊和主動(dòng)攻擊)著手,得到網(wǎng)絡(luò)安全的四個(gè)理論標(biāo)準(zhǔn)(保密性、端點(diǎn)鑒別、信息完整性、運(yùn)行安全性),后面的內(nèi)容基本上是圍繞這四個(gè)標(biāo)準(zhǔn)展開,一步步探究整個(gè)計(jì)算機(jī)網(wǎng)絡(luò)內(nèi)容。
二、網(wǎng)絡(luò)攻擊與安全標(biāo)準(zhǔn)
2.1網(wǎng)絡(luò)攻擊
網(wǎng)絡(luò)攻擊多種多樣,按攻擊方式劃分,計(jì)算機(jī)網(wǎng)絡(luò)攻擊分為兩種:被動(dòng)攻擊與主動(dòng)攻擊。如下圖:
注意:上圖只是網(wǎng)絡(luò)攻擊的一種劃分依據(jù),還存在其他劃分依據(jù),劃分方式不唯一。
2.2安全防治理論標(biāo)準(zhǔn)
為應(yīng)對(duì)多種多樣的網(wǎng)絡(luò)攻擊,計(jì)算機(jī)網(wǎng)絡(luò)安全方面必須先誕生一個(gè)安全防治理論標(biāo)準(zhǔn),即怎樣的網(wǎng)絡(luò)才能被稱為是安全的?有個(gè)這個(gè)標(biāo)準(zhǔn)后,然后再根據(jù)這個(gè)標(biāo)準(zhǔn)去設(shè)計(jì)網(wǎng)絡(luò)安全保障機(jī)制(如防范被動(dòng)攻擊需要的加密技術(shù)、防范主動(dòng)攻擊需要的加密技術(shù)和鑒別技術(shù))。
一般來(lái)說(shuō),一個(gè)安全的計(jì)算機(jī)網(wǎng)絡(luò)通信要想達(dá)到安全,需要滿足四個(gè)要求——保密性、端點(diǎn)鑒別、信息完整性、運(yùn)行安全性,具體如下表:
三、加密技術(shù)
為實(shí)現(xiàn)安全標(biāo)準(zhǔn)中的保密性,我們需要對(duì)網(wǎng)路傳送的數(shù)據(jù)進(jìn)行加密。常用的密碼體制包括兩種:對(duì)稱加密和非對(duì)稱加密,先看對(duì)稱加密。
3.1對(duì)稱加密技術(shù)
對(duì)稱加密即傳統(tǒng)加密,加密和解密使用同一密鑰K,如下圖所示:
解釋一下上圖:E運(yùn)算代表Encode編碼運(yùn)算,則為加密運(yùn)算;D運(yùn)算代表Decode解碼運(yùn)算,則為解碼運(yùn)算。
加密和解密使用相同的密鑰K,發(fā)送方A將明文X使用公開的加密算法產(chǎn)生密文Y,然后接收方B只要使用相同的密鑰K對(duì)密文解密即得到明文X。
對(duì)稱加密原理簡(jiǎn)單,實(shí)現(xiàn)起來(lái)也很快捷,但是存在一個(gè)很難解決的問(wèn)題——對(duì)稱密鑰密碼體制的密鑰管理問(wèn)題。
在對(duì)稱密鑰密碼體制中,通信雙方加密解密使用相同的密鑰,但是如何做到這一點(diǎn)呢?
1、事先約定相同的密鑰,但是事先約定對(duì)于某一時(shí)刻更換密鑰造成極大不便,如果使用高度安全的密鑰分配中心,會(huì)使網(wǎng)絡(luò)成本大大增加。
2、信使傳送密鑰保證相同,但是高度自動(dòng)化的大型計(jì)算機(jī)網(wǎng)絡(luò)中,通信雙方這樣頻繁傳送密鑰是極不合適的。
所以引入了非對(duì)稱加密技術(shù),且看下文。
3.2非對(duì)稱加密技術(shù)
除了對(duì)稱加密,其實(shí)我們還有一種非對(duì)稱加密技術(shù),非對(duì)稱加密的產(chǎn)生的原因主要有兩點(diǎn):
1、對(duì)稱密鑰密碼體制的密鑰管理問(wèn)題無(wú)法找到高效、安全、低成本的方式解決(即本文3.1對(duì)稱加密技術(shù));
2、數(shù)字簽名的需求(即本文3.3數(shù)字簽名)。
非對(duì)稱加密密碼體制,又稱為公鑰密鑰體制/公開密鑰密碼體制,在非對(duì)稱加密密碼體制中,密鑰對(duì)產(chǎn)生器每次產(chǎn)生一對(duì)密鑰——公鑰(Public Key),以下用PK表示,私鑰(Secret Key),以下用SK表示。非對(duì)稱加密技術(shù),如圖:
兩者區(qū)別為:
所以說(shuō),無(wú)論是何種密碼體制,加密算法都是公開,所以實(shí)現(xiàn)保密性的關(guān)鍵在于密鑰的保密。
對(duì)于對(duì)稱加密和非對(duì)稱加密,非對(duì)稱加密確實(shí)比對(duì)稱加密安全,但是并不是非對(duì)稱加密就一定比對(duì)稱加密優(yōu)秀的,至少非對(duì)稱加密速度就比對(duì)稱加密慢。兩種密碼體制優(yōu)缺點(diǎn)見(jiàn)表:
所以在實(shí)際的網(wǎng)絡(luò)環(huán)境中,會(huì)將對(duì)稱加密和非對(duì)稱加密混合使用.
3.3數(shù)字簽名
3.3.1數(shù)字簽名的要求
1、接收方B能夠核實(shí)發(fā)送方A對(duì)報(bào)文的簽名,保證報(bào)文鑒別。
2、接收方B能夠確認(rèn)收到數(shù)據(jù)是和發(fā)送方A發(fā)送的是一致的,沒(méi)有被篡改過(guò)。保證數(shù)據(jù)完整性。
3、發(fā)送方A事后不能抵賴對(duì)報(bào)文的簽名,即不能抵賴這個(gè)報(bào)文不是自己發(fā)送的。保證不可否認(rèn)性。
3.3.2數(shù)據(jù)簽名的實(shí)現(xiàn)
同時(shí)實(shí)現(xiàn)上述三個(gè)要求(報(bào)文鑒別、數(shù)據(jù)完整性、不可否認(rèn)性),則實(shí)現(xiàn)了數(shù)字簽名,實(shí)際上我們只要將非對(duì)稱加密變換一種形式,即發(fā)送方發(fā)送報(bào)文時(shí),先自己的私鑰SK對(duì)明文X進(jìn)行D運(yùn)算(這里不是解密運(yùn)算),得到一串不可讀報(bào)文,發(fā)送給接收方,接收方收到數(shù)據(jù)后,使用發(fā)送方的公鑰(公鑰是公開的,可以得到)進(jìn)行E運(yùn)算(同樣這里也不是加密運(yùn)算),即可恢復(fù)明文X。如下圖:
解釋一下上圖:
數(shù)字簽名中,先進(jìn)行D運(yùn)算,這里不能理解為解密運(yùn)算(因?yàn)檫€沒(méi)加密呢?。瑧?yīng)該理解為使用A的私鑰進(jìn)行的一個(gè)D運(yùn)算,得到一個(gè)不可讀的密文DSKA(X).同樣地,后面的E原酸,不能理解為加密運(yùn)算,應(yīng)該理解為使用A的公鑰進(jìn)行的一個(gè)E運(yùn)算,還原明文X.
其次,這里的DSKA(X)的理解方式是:D表示D運(yùn)算,SK表示secret key私鑰,A表示A的私鑰,(X)表示對(duì)明文X操作。合在一起的意思是,使用A的私鑰,即SKA,對(duì)明文X進(jìn)行D運(yùn)算得到的結(jié)果,即DSKA(X)。
通過(guò)上面這種方式后,實(shí)際上我們已經(jīng)實(shí)現(xiàn)了數(shù)字簽名,為什么呢?且看數(shù)字簽名的三個(gè)要求。
1、報(bào)文鑒別。因?yàn)樗借€是保密的,發(fā)送方A的私鑰只有它自己知道,所以只有A能產(chǎn)生DSKA(X),接收方B接收到DSKA(X)后發(fā)現(xiàn)能用PKA得到可讀的明文,就相信明文X是A發(fā)送的,實(shí)現(xiàn)了報(bào)文鑒別。
2、數(shù)據(jù)完整性(即防篡改)。因?yàn)樗借€是保密的,發(fā)送方A的私鑰只有它自己知道,網(wǎng)絡(luò)攻擊者篡改報(bào)文,篡改完之后再發(fā)送給B,B拿到報(bào)文后發(fā)現(xiàn)不能用PKA得到可讀明文,就知道數(shù)據(jù)被篡改過(guò)或者這根本就不是A發(fā)送的報(bào)文,不會(huì)處理,實(shí)現(xiàn)了數(shù)據(jù)完整性。
3、不可否認(rèn)性。如果A過(guò)后想抵賴DSKA(X)這個(gè)報(bào)文不是自己發(fā)送的,B只要將收到的DSKA(X)和得到的明文X公示給第三者,第三者很容易使用A的公鑰PKA驗(yàn)證B的說(shuō)法是對(duì)的,使A無(wú)法抵賴,實(shí)現(xiàn)了不可否認(rèn)性。
故此種方式實(shí)現(xiàn)了數(shù)字簽名,這也是最常見(jiàn)的一種數(shù)字簽名哦!
3.4非對(duì)稱加密與數(shù)字簽名統(tǒng)一
在一開始提到的安全標(biāo)準(zhǔn)的四個(gè)要求中,加密技術(shù)實(shí)現(xiàn)了保密性,數(shù)據(jù)簽名實(shí)現(xiàn)了報(bào)文鑒別,現(xiàn)在將這兩種技術(shù)結(jié)合到一起,即非對(duì)稱加密+數(shù)字簽名,如圖:
對(duì)加密技術(shù)和數(shù)字簽名的整個(gè)理解:DSKA(X)表示使用A的私鑰對(duì)明文X進(jìn)行D操作,然后在使用的B的公鑰對(duì)數(shù)據(jù)簽名的結(jié)果進(jìn)行E運(yùn)算加密操作,得到密文EPKB(DSKA(X)),通過(guò)互聯(lián)網(wǎng)傳送后,接收端先用B的私鑰對(duì)接收的密文EPKB(DSKA(X))進(jìn)行D運(yùn)算解密操作,得到DSKA(X),然后用A的公鑰對(duì)其E運(yùn)算,得到明文X。
所以說(shuō),對(duì)于非對(duì)稱加密密碼體制,通過(guò)巧妙的運(yùn)算,同時(shí)實(shí)現(xiàn)了數(shù)字簽名和加密技術(shù)。
EPKA(DSKA(X))==>X即數(shù)字簽名,表示發(fā)送方A先使用自己的私鑰SK對(duì)明文X進(jìn)行D運(yùn)算,接收方使用A的公鑰對(duì)收到的DSKA(X)進(jìn)行E運(yùn)算,得到明文X,實(shí)現(xiàn)簽名核實(shí)。
DSKB(ESKB(X))==>X即加密技術(shù),表示發(fā)送方A使用接收方的公鑰PK對(duì)明文X進(jìn)行E運(yùn)算加密,接收方使用自己的私鑰SK對(duì)收到的ESKB(X)進(jìn)行D運(yùn)算,得到明文X,實(shí)現(xiàn)非對(duì)稱加密解密。
附:?jiǎn)蜗蚣用埽ú豢赡婕用埽┖碗p向加密(可逆加密)
上面將的對(duì)稱加密和非對(duì)稱加密都是雙向加密(可逆加密),就是可以對(duì)密文進(jìn)行解密,因?yàn)槊芪氖强赡娴模性谠O(shè)計(jì)上就存在天然的風(fēng)險(xiǎn)。實(shí)際上,我們有一種更加安全的加密方式——單向加密(不可逆加密),使用單向加密,密文是不可逆的。實(shí)際上,這種單向加密在計(jì)算機(jī)網(wǎng)絡(luò)通信中用到很少,因?yàn)榻邮辗綗o(wú)法通過(guò)D運(yùn)算來(lái)解密,但是在軟件開發(fā)中,卻使用的很廣泛,比如我們?cè)谧鱿到y(tǒng)級(jí)開發(fā)時(shí),就可以讓用戶的密碼經(jīng)過(guò)不可逆算法存入數(shù)據(jù)庫(kù),每一次登錄時(shí)密碼經(jīng)過(guò)不可逆算法與數(shù)據(jù)庫(kù)比對(duì),這樣一來(lái),即使某一天數(shù)據(jù)庫(kù)泄露,用戶賬號(hào)信息仍然可以被保護(hù),這就是單向加密的最常見(jiàn)用途。
常見(jiàn)的單向加密算法:MD5,SHA等(雖然說(shuō)MD5和SHA-1都被破解了......清華大學(xué)王小云教授)。其實(shí),即使是沒(méi)有找到單向加密的破解方法,它也可被試探出來(lái),如:
所以說(shuō),沒(méi)有絕對(duì)安全的密碼,這是有感而發(fā)的。
四、密鑰分配(針對(duì)第三部分的加密技術(shù))
4.1對(duì)稱加密的密鑰分配
對(duì)稱加密技術(shù),加密和解密使用同一密鑰,通常設(shè)立一個(gè)大家都信任的機(jī)構(gòu)——密鑰分配中心KDC(Key Distribution Center),用來(lái)給需要進(jìn)行數(shù)據(jù)傳輸?shù)挠脩襞R時(shí)分配一個(gè)會(huì)話密鑰(僅使用一次,下一次再通信再分配一個(gè))。
具體分配方式:
一開始,用戶A和用戶B都在KDC中記錄自己的密鑰KA和KB,這個(gè)早就完成,不是一個(gè)獨(dú)立步驟。
1、用戶A向密鑰分配中心KDC發(fā)送明文,說(shuō)明自己想要與用戶B通信,在明文中給出通信雙方A和B在KDC登記的身份(即映射關(guān)閉的key)
2、KDC用隨機(jī)數(shù)產(chǎn)生一個(gè)“一次一密”的會(huì)話密鑰KAB供A、B本次網(wǎng)絡(luò)通信之用,然后向A發(fā)送響應(yīng)報(bào)文。該報(bào)文使用KA加密(保證僅用戶A解開,網(wǎng)絡(luò)攻擊者無(wú)法解開),內(nèi)容一個(gè)剛剛產(chǎn)生的這個(gè)網(wǎng)絡(luò)通信用的會(huì)話密鑰KAB和一個(gè)票據(jù),票據(jù)使用KB加密(因?yàn)槭墙o用戶B的),票據(jù)內(nèi)容是A、B在KDC登記的身份和本次網(wǎng)絡(luò)通信用的會(huì)話密鑰KAB。
注:會(huì)話密鑰KAB在發(fā)給A的響應(yīng)報(bào)文里面有一份,因?yàn)轫憫?yīng)報(bào)文使用KA加密,所有這一份KAB是給用戶A使用的;然后在響應(yīng)報(bào)文的票據(jù)中還有一份,因?yàn)槠睋?jù)使用KB加密,所以這份KAB是給用戶B用的。從而保證用戶A和用戶B都有一份KAB,且相同,用于對(duì)稱加密通信。
3、A收到KDC發(fā)來(lái)的響應(yīng)報(bào)文,用KA解密,拿到屬于自己的那一份KAB,但是用戶A無(wú)法查看響應(yīng)報(bào)文中的那份票據(jù),因?yàn)槟莻€(gè)票據(jù)使用KB,本來(lái)就不是給用戶A的,所以用戶A將響應(yīng)報(bào)文中的那個(gè)票據(jù)發(fā)送給用戶B.
4、用戶B收到票據(jù)后,用KB解密,票據(jù)里面是A、B在KDC登記的身份和本次網(wǎng)絡(luò)通信用的會(huì)話密鑰KAB,則用戶B知道用戶要和它通信并且知道本次通信的密鑰KAB.
整個(gè)過(guò)程如下圖:
4.2非對(duì)稱加密的密鑰分配(公鑰分配)
非對(duì)稱加密中,私鑰是保密的,只有自己知道,自然不需要涉及到分配的問(wèn)題。但是公鑰是公開的,所以非對(duì)稱加密密鑰的分配就是公鑰的分配,注意,我們一直所說(shuō)的公鑰公開并不是可隨便公布用戶的公鑰,而是將公鑰與對(duì)應(yīng)的主機(jī)的映射關(guān)系存儲(chǔ)起來(lái),一般存放在CA認(rèn)證中心(Certification Authority),這個(gè)CA認(rèn)證中心一般由政府或大公司出錢建立,里面的存放著公鑰和該公鑰擁有者的唯一標(biāo)識(shí)信息(人名或IP地址),用戶需要公鑰時(shí),就到CA認(rèn)證中心去查詢。
其實(shí),就是直接在瀏覽器中查詢也可以,以Google瀏覽器為例,右上角選擇“設(shè)置/高級(jí)/管理證書”,用戶就可以看到證書頒發(fā)機(jī)構(gòu)給自己頒發(fā)的證書,如:
隨便打開一個(gè),查看自己的公鑰:
五、鑒別技術(shù)
鑒別技術(shù)作為防范主動(dòng)攻擊的必需品,鑒別的對(duì)象有兩個(gè),一是鑒別發(fā)送方的身份,滿足安全標(biāo)準(zhǔn)中的端點(diǎn)鑒別,這就是端點(diǎn)鑒別/實(shí)體鑒別;二是鑒別通信信息完整性,滿足安全標(biāo)準(zhǔn)中的信息完整性,這就是報(bào)文鑒別。
5.1報(bào)文鑒別
實(shí)際上,本文第三部分的數(shù)字簽名就已經(jīng)實(shí)現(xiàn)了報(bào)文鑒別(數(shù)字簽名三要求:報(bào)文鑒別、數(shù)據(jù)完整性、不可否認(rèn)性),數(shù)字簽名的第一個(gè)和第二個(gè)要求所表示的都是“報(bào)文鑒別/數(shù)據(jù)完整性/防篡改”這個(gè)意思,但是上文提到,這種公鑰密碼體制存在運(yùn)行速度慢的問(wèn)題,所以真實(shí)的報(bào)文鑒別的中,我們必須找到更加快捷的辦法。使用一種計(jì)算型的方法——密碼散列函數(shù)。
5.1.1密碼散列函數(shù)
散列函數(shù)的特點(diǎn):
1、輸入可以是不定長(zhǎng)的,但是輸出是定長(zhǎng)的且比較短;
2、輸入X與輸出Y的映射關(guān)系,與數(shù)學(xué)中函數(shù)的定義一樣(對(duì)于任意一個(gè)給定的X值,都有唯一的Y值與之對(duì)應(yīng)),即輸入X與輸出Y是多對(duì)一的關(guān)系(一個(gè)X有一個(gè)確定的Y對(duì)應(yīng),但是多個(gè)X可以對(duì)應(yīng)一個(gè)Y,但是一個(gè)Y只能對(duì)應(yīng)一個(gè)X)。
散列函數(shù)保證了計(jì)算上的加密的單向性,即要找到的兩個(gè)不同的報(bào)文,它們具有同樣的密碼散列函數(shù)輸出,在計(jì)算上是不可能的(注意:理論上是可能的,因?yàn)閄與Y是多對(duì)一),所以密碼散列函數(shù)時(shí)安全的。
如果我們的密碼散列函數(shù)的輸出H(X)被網(wǎng)路攻擊者截獲了,那么截獲者無(wú)法偽造出另一個(gè)明文Y,使用H(X)=H(Y),因?yàn)橛?jì)算上是不可行的。所以說(shuō)密碼散列函數(shù)通過(guò)一種極為簡(jiǎn)單的方式(密碼散列函數(shù))實(shí)現(xiàn)了報(bào)文鑒別。
5.1.2報(bào)文鑒別碼
現(xiàn)在我們討論如何將密碼散列函數(shù)運(yùn)用到報(bào)文鑒別碼中。如圖:
步驟一:在A從報(bào)文X導(dǎo)出散列H后,就對(duì)散列H用密鑰K加密。這樣得到的結(jié)果叫做報(bào)文鑒別碼MAC(Message Authentication Code)。
步驟二:A把已加密的報(bào)文鑒別碼MAC拼接到報(bào)文X的后面,得到擴(kuò)展的報(bào)文,發(fā)送給B。
步驟三:B收到擴(kuò)展的報(bào)文后,先把報(bào)文鑒別碼MAC與報(bào)文X分離出來(lái),然后用同樣的密鑰K對(duì)收到的報(bào)文鑒別碼MAC進(jìn)行解密運(yùn)算,得到加密前的散列H。再將報(bào)文X進(jìn)行散列函數(shù)運(yùn)算,得到散列H(X)。最后,把計(jì)算出的散列H(X)與H進(jìn)行比較。如一致,就相信所收到的報(bào)文X確實(shí)是A發(fā)送的(因?yàn)槊艽a散列函數(shù)在計(jì)算上是安全的)。這樣就使用密碼散列函數(shù)完成對(duì)報(bào)文鑒別。
5.2端點(diǎn)鑒別/實(shí)體鑒別
端點(diǎn)鑒別又稱實(shí)體鑒別,兩者是同一個(gè)意思,即鑒別發(fā)送方是身份。
為了防止網(wǎng)絡(luò)入侵者的重放攻擊,這里引入一個(gè)新概念——不重?cái)?shù),不重?cái)?shù)是一個(gè)不重復(fù)使用的足夠大的隨機(jī)數(shù),即“一次一數(shù)”,在端點(diǎn)鑒別中使接收方可以把重復(fù)的鑒別請(qǐng)求與新的鑒別請(qǐng)求區(qū)分開。如圖:
步驟一:A使用明文發(fā)送自己的身份A和一個(gè)不重?cái)?shù)RA給B。
步驟二:B響應(yīng)A的查問(wèn),用共享密鑰RAB對(duì)RA加密后發(fā)回給A,同時(shí)也給出自己的不重?cái)?shù)RB.
步驟三:最后,A再響應(yīng)B的查問(wèn),用共享密鑰RAB對(duì)RB加密后發(fā)回給B。
注意:這里A、B不同的通話必須使用不同不重?cái)?shù),這是防止重放攻擊的關(guān)鍵,由于不重?cái)?shù)不會(huì)重復(fù)使用,所有攻擊者即使截取到報(bào)文也沒(méi)用,因?yàn)槟莻€(gè)不重?cái)?shù)已經(jīng)不能用了。
六、尾聲
本文中,我們從網(wǎng)絡(luò)攻擊(被動(dòng)攻擊和主動(dòng)攻擊)著手,知道了網(wǎng)絡(luò)安全的四個(gè)理論標(biāo)準(zhǔn)(保密性、端點(diǎn)鑒別、信息完整性、運(yùn)行安全性),后面的內(nèi)容基本上是圍繞這四個(gè)標(biāo)準(zhǔn)展開,第三部分的加密技術(shù)和第四部分密鑰分配是針對(duì)保密性,第五部分鑒別技術(shù)是針對(duì)端點(diǎn)鑒別和信息完整性(第三部分?jǐn)?shù)字簽名也可以鑒別信息完整性),運(yùn)行安全性有具體網(wǎng)絡(luò)權(quán)限控制來(lái)實(shí)現(xiàn),無(wú)法展開,故略去。