如何制作自己的網(wǎng)站并且插口代碼企業(yè)微信會(huì)話內(nèi)容存檔
哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程網(wǎng)絡(luò)安全基本原理之:身份認(rèn)證
在日常生活中,在很多場(chǎng)景下我們都需要對(duì)當(dāng)前身份做認(rèn)證,比如使用密碼、人臉識(shí)別、指紋識(shí)別等,這些都是身份認(rèn)證的常用方式。本節(jié)介紹的身份認(rèn)證,是在計(jì)算機(jī)網(wǎng)絡(luò)安全中的身份認(rèn)證,從端到端之間通信的角度來看,通信雙方的兩個(gè)實(shí)體如何來確認(rèn)另一方通信實(shí)體的真實(shí)身份。
身份認(rèn)證(Authentication)
在介紹身份認(rèn)證時(shí),我們以一個(gè)網(wǎng)絡(luò)安全的擬人模型,模擬一個(gè)場(chǎng)景來討論一下身份認(rèn)證的基本原理。為此,假設(shè):
目標(biāo):Bob希望Alice“證明”她的身份。(是不是真的Alice還是其他假扮的)
為了討論身份認(rèn)證的一般性原理和過程,這里我們假設(shè)去設(shè)計(jì)幾個(gè)身份認(rèn)證的協(xié)議,來形象化地區(qū)分不同協(xié)議間在認(rèn)證過程中的區(qū)別,并反映身份認(rèn)證協(xié)議的演進(jìn)。這里假設(shè)的協(xié)議我們稱為AP。
AP 1.0
這里我們首先觀察一個(gè)最簡(jiǎn)單的場(chǎng)景,在這個(gè)場(chǎng)景下,Alice為了向Bob證實(shí)自己的身份,直接向Bob發(fā)送一段信息:“I am Alice”
作為這樣簡(jiǎn)單的認(rèn)證方式,顯然我們很容易想出可能的認(rèn)證失效場(chǎng)景:
在網(wǎng)絡(luò)中任何另一方Trudy都可以簡(jiǎn)單的聲明自己是“Alice“,因?yàn)樵诰W(wǎng)絡(luò)中,Bob實(shí)際上是看不到Alice的。因此,這種簡(jiǎn)單直接聲明的方式是非常不可靠的,要進(jìn)行身份認(rèn)證,還需要一些其他的信息。
AP2.0
為此,我們對(duì)上述協(xié)議做個(gè)改進(jìn):
AP2.0:Alice在IP分組中聲明“I am Alice“,IP分組包含Alice的源IP地址。
然而在現(xiàn)在的Internet網(wǎng)絡(luò)中,上述方式仍然是非常不可靠的,因?yàn)閷?shí)際上IP地址也可以有很多方式來偽裝和篡改的。
Trudy可以構(gòu)造一個(gè)IP分組,來偽裝成Alice的IP地址,向Bob發(fā)送IP分組。
為此,再進(jìn)一步升級(jí)協(xié)議。
AP3.0
在AP3.0的改進(jìn)中,我們借助于日常生活中分辨對(duì)方身份的常用方式之一,口令。比如在潛伏者或者間諜對(duì)接時(shí),都會(huì)有一個(gè)密令,兩個(gè)人分別有密令的上句和下句。如果碰頭時(shí),兩句話對(duì)上了,則能夠成功辨別對(duì)方身份,碰頭成功。
因此在AP3.0中,我們也加入口令這個(gè)概念:
AP3.0:Alice聲明“I am Alice"的同時(shí),發(fā)送她的秘密口令進(jìn)行“證明”
在現(xiàn)在網(wǎng)絡(luò)使用中,我們實(shí)際上也會(huì)經(jīng)常用到以上場(chǎng)景,比如登陸網(wǎng)站時(shí)需要輸入用戶名和密碼等。
但這種方式,在一些更嚴(yán)苛的場(chǎng)景來說,事實(shí)上仍然存在風(fēng)險(xiǎn)。其中最典型的一種失效場(chǎng)景就是嗅探。
比如說Trudy可以利用嗅探工具,在Alice或Bob端的網(wǎng)絡(luò)進(jìn)行嗅探,嗅探Alice給Bob發(fā)送的分組。通過對(duì)這個(gè)分組的分析,如果這個(gè)口令包含在分組中,就可以把口令提取出來。之后,Trudy就可以假扮成Alice向Bob發(fā)送帶有口令的IP分組。
從更簡(jiǎn)單的結(jié)果來說,就比如賬號(hào)被盜這樣的結(jié)果,就是一種上述口令身份認(rèn)證失效的場(chǎng)景。
為了避免嗅探,通??梢圆辉趥鬏?shù)腎P分組中使用明文的口令,而是把該口令進(jìn)行加密再傳輸(Alice與Bob之間共享對(duì)稱密鑰,然后按照某個(gè)加密算法進(jìn)行加密)。因此,基于上面的思想,我們對(duì)AP3.0協(xié)議再改進(jìn)一下。
AP3.1
協(xié)議AP3.1:Alice聲明“I am Alice“的同時(shí),發(fā)送她的加密的秘密口令進(jìn)行“證明”。
在AP3.1中,Alice向Bob發(fā)送的IP分組中,就包含了加密的口令,Bob收到后,利用對(duì)稱密鑰進(jìn)行解密后進(jìn)行身份認(rèn)證。那么這種方式是否就是絕對(duì)安全的了呢?
實(shí)際上,這種方式也無法絕對(duì)安全,尤其在網(wǎng)絡(luò)中存在很多攻擊,其中一種就是所謂的回放攻擊(playback attack),即第三方Trudy可以使用工具截獲Alice與Bob間通信的分組。雖然Trudy無法對(duì)加密的口令進(jìn)行解密,但是它可以把加密的口令原封不動(dòng)記錄下來。之后,它只需要把這個(gè)加密的口令放到分組中發(fā)送給Bob即可,相當(dāng)于把這個(gè)截獲的分組“回放”給Bob,此時(shí)Bob端也會(huì)認(rèn)為這個(gè)分組是Alice發(fā)送的。
因此,即使AP3.1中,對(duì)口令進(jìn)行了加密,也仍然存在被攻擊的漏洞和風(fēng)險(xiǎn)。因此,我們還需要進(jìn)一步地進(jìn)行改進(jìn)。而改進(jìn)的方向來說,在協(xié)議3.1中之所以會(huì)被攻克,是因?yàn)闆]有辦法預(yù)防“回放攻擊”,為此在改進(jìn)的協(xié)議中,就是要找到一種機(jī)制能夠避免“回放攻擊”。
AP4.0
目標(biāo):避免“回放攻擊”
解決方案:即使第三方記錄了某次傳輸分組中的加密口令,但在將來再次使用時(shí)是無效的。換句話說,口令只在當(dāng)前傳輸分組中有效,下次同樣的口令就無效了。
為此在協(xié)議AP4.0中引入這樣 “一次性隨機(jī)數(shù)(nonce)“概念:一個(gè)生命期內(nèi)只用一次的數(shù)R。
協(xié)議AP4.0:為了證明是“真實(shí)的”Alice,Bob向Alice發(fā)送一個(gè)隨機(jī)數(shù)R,Alice必須返回R,并利用共享密鑰進(jìn)行加密。過程如下所示:
- Alice向Bob聲明自己的身份,發(fā)送“I am Alice“。
- 但是Bob僅以此無法判斷Alice身份,在AP4.0協(xié)議中,Bob會(huì)返回一個(gè)不重復(fù)的隨機(jī)數(shù)R
- Alice在接收到返回的隨機(jī)數(shù)R后,為了證明她是真實(shí)的Alice,會(huì)利用Alice與Bob間共享的對(duì)稱密鑰,對(duì)隨機(jī)數(shù)R進(jìn)行加密,然后返回給Bob
- Bob接收到這個(gè)加密隨機(jī)數(shù)R后,會(huì)利用共享的對(duì)稱密鑰進(jìn)行解密,解密后與之前發(fā)送給Alice的明文隨機(jī)數(shù)R進(jìn)行比對(duì),如果匹配成功,則Bob可以確認(rèn)Alice的真實(shí)身份。
上述流程的關(guān)鍵在于,只有Alice和Bob之間才擁有一對(duì)共享的對(duì)稱密鑰,并以此來對(duì)隨機(jī)數(shù)R進(jìn)行加解密。
但這也正是AP4.0協(xié)議仍然存在的不足,其實(shí)也是對(duì)稱加密方法的不足。在對(duì)稱加密方法中,兩端之間需要一個(gè)共享密鑰,而這個(gè)共享密鑰在網(wǎng)絡(luò)傳輸中是可能被截獲的,一旦這個(gè)密鑰被截獲,那剩下的通信過程一定都是不再安全的。
為此,更進(jìn)一步的自然會(huì)想到,在對(duì)稱加密的方式上進(jìn)行改進(jìn),使用非對(duì)稱加密方式,利用公鑰技術(shù)來進(jìn)行加密。
AP 5.0
協(xié)議AP5.0:利用一次性隨機(jī)數(shù)以及公鑰加密技術(shù)。
使用公鑰加密技術(shù)后,認(rèn)證過程變成以下過程:
- Alice向Bob發(fā)送身份認(rèn)證:“I am Alice“
- Bob為了證實(shí)Alice的真實(shí)身份,且不是“回放攻擊”的,會(huì)向Alice返回一個(gè)隨機(jī)數(shù)R
- Alice會(huì)利用自己的私鑰對(duì)收到的隨機(jī)數(shù)R進(jìn)行加密,將密文發(fā)送給Bob
- Bob接收到后,需要再次向Alice發(fā)送請(qǐng)求,申請(qǐng)獲取Alice的公鑰
- Alice將公鑰返回給Bob
- Bob根據(jù)該公鑰,對(duì)加密的隨機(jī)數(shù)R進(jìn)行解密,再與之前的明文隨機(jī)數(shù)R進(jìn)行比對(duì),如果匹配,則能夠證實(shí)Alice的身份。
上述方式,私鑰是唯一保存在Alice身上的,其他第三方是沒有該私鑰的,因而也就無法構(gòu)成出相同的使用該私鑰加密的密文。而私鑰是不會(huì)在網(wǎng)絡(luò)中進(jìn)行傳輸?shù)?#xff0c;減輕了被截獲的風(fēng)險(xiǎn)。
但但是…,是的,即使如此,協(xié)議AP5.0還是仍然存在風(fēng)險(xiǎn)(悲傷…),這個(gè)風(fēng)險(xiǎn)漏洞就是中間人攻擊(man in the middle attach)。
什么是中間人攻擊問題呢?
假設(shè)Alice與Bob之間進(jìn)行通信,作為第三方入侵者Trudy介入兩者通信之間,對(duì)于Alice她扮演Bob,對(duì)于Bob她扮演Alice。所有Alice和Bob之間的通信,全部被Trudy進(jìn)行截獲,使得Alice和Bob分別都以為他們實(shí)際上是與對(duì)方在通信。
中間人攻擊這整個(gè)過程可以如上圖所示,過程大致如下:
-
Alice在向Bob聲明自己身份時(shí),發(fā)送“I am Alice“,然后被中間人Trudy截獲了,Trudy把這個(gè)信息轉(zhuǎn)發(fā)給Bob。
-
按照協(xié)議AP5.0,Bob會(huì)返回一個(gè)隨機(jī)數(shù)R給Alice,同樣被Trudy截獲。
-
此時(shí),Trudy會(huì)用它自己的私鑰對(duì)隨機(jī)數(shù)R加密后,返回給Bob。同時(shí),Trudy又會(huì)把R發(fā)送給Alice。
-
Alice會(huì)用自己的私鑰加密后,返回給Bob,同樣被Trudy截獲。
-
由于Bob收到的加密隨機(jī)數(shù)R是由Trudy返回的,Trudy可能通過修改包含R的IP分組的源IP地址等方式,讓Bob把Trudy的IP地址當(dāng)成了Alice,因?yàn)锽ob會(huì)向Trudy請(qǐng)求公鑰來解密。
-
作為Trudy,會(huì)把她自己的公鑰返回給Bob。同時(shí),由于上面Alice用自己的私鑰加密后被Trudy截獲,所以Trudy也會(huì)向Alice所要公鑰。
-
Alice把公鑰返回給Trudy。
-
由于Bob利用Trudy返回的公鑰解密后,與之前發(fā)送的明文隨機(jī)數(shù)R比對(duì)后發(fā)現(xiàn)匹配,則通過認(rèn)證。此時(shí),Bob就完全認(rèn)為Trudy就是Alice了。
-
此后,如果Bob和Alice之間通信的話,Bob就會(huì)用之前Trudy的公鑰(Bob以為是Alice的公鑰,實(shí)際上是Trudy的公鑰)加密數(shù)據(jù)后發(fā)送。Bob以為發(fā)送給Alice,實(shí)際上發(fā)送給了Trudy。
-
Trudy用自己的私鑰解密后獲取了明文,再用之前Alice返回的公鑰進(jìn)行加密,再返回給Alice。
這一過程我們看到,Bob和Alice之間的所有通信信息,都已經(jīng)被一個(gè)中間入侵者Trudy截獲了,而且Bob和Alice還無法感知,仍然以為是與對(duì)方在安全通信。因此,事實(shí)上這種中間人攻擊也確實(shí)存在著很難被檢測(cè)的問題。