对称加密和非对称加密、公钥和私钥、单向认证和双向认证、数字签名、数字证书、根证书
文章目錄
- 1. 什么是公鑰和私鑰?
- 2. 加密算法
- 2.1 對稱加密
- 2.2 非對稱加密
- 2.2.1 非對稱加密的重要性質
- 2.2.2 非對稱加密算法應用
- 2.2.2.1 應用1 加密通信
- 2.2.2.1.1 單向認證和雙向認證
- 2.2.2.1 應用2 數字簽名
- 3. 數字簽名
- 3.1 數字簽名用法演示
- 3.1.1 最簡單用法(校驗數據的完整性)
- 2.1.2 復雜用法(校驗數據的完整性)
- 3.2 數字簽名存在問題
- 4. 數字證書(Digital Certificate)
- 4.1 創建數字證書
- 4.1.1 舉例,CA如何給我們簽發一個有效證書和服務器如何發送證書:
- 4.2 數字證書究竟解決了什么問題
- 4.2.1 如何攻擊數字證書呢
- 參考:
1. 什么是公鑰和私鑰?
摘自《什么是公鑰和私鑰?》
公鑰(Public Key)與私鑰(Private Key)是通過加密算法得到的一個密鑰對(即一個公鑰和一個私鑰,也就是非對稱加密方式)。
公鑰可對會話進行加密、驗證數字簽名,只有使用對應的私鑰才能解密會話數據,從而保證數據傳輸的安全性。公鑰是密鑰對外公開的部分,私鑰則是非公開的部分,由用戶(一般是服務端)自行保管。
公鑰和私鑰起初均存儲在服務器端。 私鑰是非公開的,因此僅存放在服務端,而且要避免被竊取,比如存在某網站A的服務器端;公鑰是大家都可以獲取的,一般是用在客戶端,客戶端的公鑰是從哪來的呢?需要從服務器端獲得,比如瀏覽器就是 一個客戶端,當訪問網站的時候,需要通過握手協議從網站側獲取
通過加密算法得到的密鑰對可以保證在世界范圍內是唯一的。使用密鑰對的時候,如果用其中一個密鑰加密一段數據,只能使用密鑰對中的另一個密鑰才能解密數據。例如:用公鑰加密的數據必須用對應的私鑰才能解密;如果用私鑰進行加密也必須使用對應的公鑰才能解密,否則將無法成功解密。
2. 加密算法
摘自:《什么是非對稱加密?》
密碼學中有兩種技術:一種叫對稱加密,另外一種叫非對稱加密。
這次咱們主要聊聊非對稱加密,因為公鑰和私鑰就是非對稱加密的成果,但是為了更好的理解非對稱加密,我們也會簡單介紹對稱加密
2.1 對稱加密
采用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。
在對稱加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
基本邏輯是這樣。如果 Alice 想把一個信息傳遞給 Bob 。比如信息是一個數字 m ,Alice 不能把這個數字直接傳遞給 Bob ,因為互聯網是一個不安全的環境,很容易被竊聽。所以她可以通過一個加密算法,比如,通過給 m 加上一個數字 e ,得到一個數字 c ,這個 c 就叫做密文。這樣 Bob 拿到密文 c ,再減去 e 就可以得到信息 m 了。
因此,e就是對稱加密算法中的密鑰,并且只存在私鑰,沒有公鑰概念。發送消息和接收消息二者持有的密鑰是相同的。簡單來說,對稱加密就是加密與解密的步驟或方法完全對稱,只需把步驟逆過來就行,與非對稱加密相比,這里加密和解密步驟是簡單的逆過來,因此只使用一種是密鑰就可以實現。
比如,想要傳遞的 m 等于2,e 等于1,那么2+1得到密文就是3,3傳遞給 Bob 之后,Bob 用3-1得到信息 m 了。這個過程中,密文是可以放心的在互聯網上傳播的,被竊聽了也沒人能看懂。e 就是密鑰,密鑰如果一旦泄露了,通信過程就不安全了。當然實際中加密算法以及密鑰都必須很復雜,不是簡單的加一個數字,因為現在人們的解密手段其實也已經非常高超了。
對稱加密的優勢是可以加密大段信息,這個是非對稱加密做不到的,但是對稱加密的問題在于如何能夠安全的把密鑰傳遞給對方。因為如果 Alice 不能安全的把密鑰傳遞給 Bob ,那么加密通信就實現不了。而如果不能實現加密通信,那又怎么可能安全的傳遞密鑰呢,所以對稱加密在互聯網上使用,就有了這個雞生蛋蛋生雞的問題。非對稱加密被發明出來,就是為了解決對稱加密的這個最為致命的痛點。
舉例說明對稱加密密鑰傳輸的問題:
由于單鑰加密,同一個密鑰既能加密,也能解密,那么必須謹慎的傳播密鑰,如果Alice 想把一個信息傳遞給 Bob ,用到了對稱加密,那么密鑰必須做到除了Alice和Bob之外,不能有第三個人知道。問題是如果Alice把密鑰(其實就是一個字符串)拷貝到U盤,親手把U盤拿給Bob,Bob再拷貝進電腦,這樣是很安全的或者打電話也行,但是有沒有考慮到網站對N個訪問端,難道網站的開發者一個個的送U盤嗎?顯然不可取。但是如果直接通過網絡發送密鑰,很容易被竊取。
2.2 非對稱加密
非對稱加密也稱公鑰加密算法!
非對稱加密之所以不對稱,指的就是加密用一個密鑰,而解密的時候用的是另外一個密鑰。因此,我們稱之為公鑰和私鑰,顧名思義,公鑰可以任意對外發布;而私鑰必須由用戶自行嚴格秘密保管,絕不透過任何途徑向任何人提供,也不會透露給要通信的另一方,即使他被信任。
2.2.1 非對稱加密的重要性質
1.加密的雙向性。
加密具有雙向性,即公鑰和私鑰中的任一個均可用作加密,此時另一個則用作解密。
公鑰加密,私鑰解密;
私鑰加密,公鑰解密;
公鑰加密,公鑰無法解密!
2.公鑰無法推導出私鑰
必須確保使用公鑰無法推導出私鑰,至少妄想使用公鑰推導私鑰必須在計算上是不可行的,否則安全性將不復存在。
雖然兩個密鑰在數學上相關,但如果知道了公鑰,并不能憑此計算出私鑰;因此公鑰可以公開,任意向外發布;而私鑰不公開,絕不透過任何途徑向任何人提供。
2.2.2 非對稱加密算法應用
2.2.2.1 應用1 加密通信
這個過程是這樣的。Bob 作為接收信息的一方,首先要生成一對密鑰,一個叫做公鑰,意思就是可以公開出去的密鑰。另外一個叫做私鑰,也就是要私密保存的。
注意:這個場景特指bob作為接收方,不是發送方!確切來說,這個是單向認證的例子。在單向認證的場景下,如果bob作為發送方的話,只能用私鑰加密(這樣公鑰可以解密),這樣接收方張三李四都持有公鑰的話,可以互相竊取消息進行解密,這樣是不安全的,本來發給張三的消息,李四可以竊取。如果要解密此問題,就要用到雙向認證!
注意這一對兒密鑰是有天然的數學聯系的,不然也不可能用公鑰加密后能用私鑰解密。具體這個聯系是什么,可以參考 RSA 算法 ,我們這里就不展開了。接下來,Bob 把自己的公鑰傳遞給 Alice ,Alice 用 Bob 的公鑰去加密信息 m 得到密文 c 。Bob 拿到密文 c 之后,用私鑰解c得到m,注意這里就體現出來不對稱了,因為 Bob 解密用的不是公鑰,而是自己的私鑰。
咱們思考一下這個過程里面的安全性。暴露在互聯網上的首先是公鑰,然后是密文,非對稱加密的算法本身是公開的。但是即使公鑰和密文算法都被攻擊者拿到,他也不能解密拿到信息的(因為只能用私鑰解,私鑰僅被Bob 持有)。所以整個過程是安全的。
甲方只能用其私鑰解密由其公鑰加密后的任何信息。 非對稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的需要。
2.2.2.1.1 單向認證和雙向認證
前文2.2.2.1 應用1 加密通信提到單向認證和雙向認證概念,我們來分析下:
這個場景特指bob作為接收方,不是發送方!確切來說,這個是單向認證的例子。在單向認證的場景下,bob制作私鑰和公鑰,發布公鑰,作為消息接收方,是安全的;
如果bob作為發送方的話,只能用私鑰加密(為了保證接收方可以用公鑰進行解密),這樣接收方張三李四都持有公鑰的話,可以互相竊取消息進行解密,這樣是不安全的,本來發給張三的消息,李四可以竊取。
如果要解決此問題,就要用到雙向認證!
此時張三也制作私鑰和公鑰,持有私鑰,并把公鑰發布給bob,如果bob想發消息給張三,就用張三提供的公鑰加密,張三收到消息后,用張三的私鑰進行解碼,這樣,李四即使獲得bob的公鑰、張三的公鑰、bob發給張三的消息,也無法解密!
2.2.2.1 應用2 數字簽名
非對稱加密的另一個重要應用:數字簽名
我們會在數字簽名章節單獨講述
3. 數字簽名
數字簽名(又稱公鑰數字簽名)是只有信息的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。
它是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術來實現的,用于鑒別數字信息的方法。
一套數字簽名通常定義兩種互補的運算,一個用于簽名,另一個用于驗證。數字簽名是非對稱密鑰加密技術與數字摘要技術的應用。
是不是有點模糊,沒關系,舉了例子就立馬清晰了。
在<2.2.2.1 應用1 加密通信>章節講訴的例子,Alice 發送消息給bob,那么如果張三也發消息給bob的話,那么,bob如何區分消息的發送者是Alice 還是張三呢?簡單,加個數字簽名就行了!
數字簽名就像我們寫在信上的簽名,是消息內容主體之外的另一個信息。
由定義可知數字簽名的作用包含2種:
a)驗證數據來源。
b)驗證數據完整性。
報文摘要:
數字簽名會用到報文摘要技術,我們先來介紹下報文摘要。
報文摘要:將報文按雙方約定的HASH算法計算得到一個固定位數的報文摘要。在數學上保證只要改動報文中任何一位,重新計算出的報文摘要值就會與原先的值不相符。這樣就保證了報文的不可更改性。
假如將一段報文“abcd”進行摘要計算,其hash值為"efgh",反復計算多次,其結果必然一致。一旦改動后,其值必不一致,如果將第一個字母a篡改為’y’,那么其結果必然不等于"efgh",因此,利用這種特性,可以用來驗證內容是否被篡改。
將該報文摘要值用發送者的私鑰加密就得到報文的數字簽名。
總結來說:
F(M) = D E(D)=S
F是單向散列函數:即如果已知x,很容易計算F(x),但已知F(x),卻很難算出x
數字簽名就是用私鑰將摘要加密的結果,這樣能夠保證數據的完整性、放篡改、以及不可抵賴性。
由上圖,基于明文,采用單向哈希算法,可以得到摘要H,用發送方(甲方)的私鑰進行加密后,得到一個數字簽名。將來用甲方的公鑰解開數字簽名,就能得到H
3.1 數字簽名用法演示
數字簽名的作用包含2種:
a)驗證數據來源。
b)驗證數據完整性。
我們僅展示驗證數據完整性。
3.1.1 最簡單用法(校驗數據的完整性)
乙方把接收到的發送方的明文用單向哈希函數取得摘要值后,與甲方的公鑰解密甲方的數字簽名而得到的摘要值進行比較,如果一樣說明信息完整,未受篡改,如果不一樣說明受到篡改。
這里假設明文不經處理,和簽名直接發送給乙方,并且乙方持有甲方的公鑰。
2.1.2 復雜用法(校驗數據的完整性)
與前面的相比,這里的復雜之處在于明文也會被加密,多了一個步驟,需要用私鑰先把密文解析為明文,其余步驟相同
應用數字簽名時,需要發送者,例如Alice ,也需要生成一對密鑰,一個公鑰,一個私鑰。公鑰發布給bob,私鑰要私藏。
簡單解釋,把A對應Alice ,B對應bob:
A:將明文Text進行摘要運算后得到摘要(消息完整性)H,再將摘要H用A的私鑰加密(身份認證),得到數字簽名S,將密文M(用B的公鑰對明文加密)和數字簽名S一塊發給B。
注意:1.數字簽名是用Alice 的私鑰,因此任何人都能獲取Alice 的公鑰,把數字簽名S解密
2.密文是用bob的公鑰,M無法被第三方破解,因此只有bob有私鑰才能解,也就是說密文可以替換成亂七八糟的,但是無法篡改,因為沒有辦法獲取原文,怎么改其中的一個字符?
3.數字簽名包含摘要運算,這個摘要的值是為了驗證密文是否被替換的,原理是即如果已知x,很容易計算F(x),多次計算結果不變。如果密文被改了,那么2次結算結果就不同。
B:
收到A的消息后,先將密文 M’(密文可能被篡改,因此多個一個單引號,因為使用的公鑰加密的,因此,張三也可以獲得公鑰,可以偽造一段自己產生的明文,也用公鑰加密后,替換原有消息中的密文) 用自己的私鑰解密,得到明文 Text’。
將數字簽名用A的公鑰進行解密后,得到原有的摘要H(簽名是A的私鑰,無法被修改,因此解密成功則說明A的身份被認證了,并且其內容就是之前的那個摘要H)。
? ? 對明文Text’再次進行摘要運算,得到實際收到的摘要H’,將兩份摘要進行對比,如果H=H’,則說明Text=Text’,消息沒有被篡改(消息完整性),反之,說明消息內容被改過了。
一舉兩得,既能驗證身份,又能驗證消息的完整性。
3.2 數字簽名存在問題
數字簽名存在問題:中間人攻擊
中間人攻擊(Man-in-the-MiddleAttack,簡稱“MITM攻擊”)是指攻擊者與通訊的兩端分別創建獨立的聯系,并交換其所收到的數據,使通訊的兩端認為他們正在通過一個私密的連接與對方 直接對話,但事實上整個會話都被攻擊者完全控制。在中間人攻 擊中,攻擊者可以攔截通訊雙方的通話并插入新的內容。中間人攻擊是一個(缺乏)相互認證的攻擊。大多數的加密協議都專門加入了一些特殊的認證方法以阻止中間人攻擊。例如,SSL協議可以驗證參與通訊的一方或雙方使用的證書是否是由權威的受信 任的數字證書認證機構頒發,并且能執行雙向身份認證。
把A對應Alice ,B對應bob,A要發信息給B:
B如何安全的把自己的公鑰發布給A,如果C截獲B與A之間通信,把B的公鑰換成C的公鑰發給A,然后C冒充B與A進行通信,這個時候A是不知道他收到的數據是來自C的,可以實現中間人攻擊。
A收到C發送的消息不可怕,可怕的是A外發消息時,會用C的公鑰加密,B在和壞人通信,B輸入的密碼等信息都被壞人用私鑰解密而截獲了。
那么這里就要保證、不要使用壞人的公鑰加密,那么怎么知道將要訪問的網站的真正公鑰,而不是被壞人替換了假的公鑰呢?為了解決這個問題就出現了證書。
注意:中間人攻擊的特點是截獲并替換,可以理解是在網絡的中間替換,并不能替換已經下載至本地的正確的公鑰,后者屬于物理替換,比如中病毒了或機器被遠程控制了才可以。為什么這么說,是因為《數字簽名是什么?》作者阮一峰 (當然好多別的網站也有,畢竟都是翻譯國外的)里面提到:
復雜的情況出現了。道格想欺騙蘇珊,他'偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。' 此時,蘇珊實際擁有的是道格的公鑰,但是還以為這是鮑勃的公鑰。因此,道格就可以冒充鮑勃, 用自己的私鑰做成"數字簽名",寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進行解密這里面提到偷走電腦是非常不恰當的,也是導致難以理解數字證書的根本原因!因為既然能偷走電腦了,為何不能替換根證書?這樣后續就可以替換網絡中的數字證書,進而替換公鑰了!
4. 數字證書(Digital Certificate)
數字證書簡稱CA,它由權威機構給某網站頒發的一種認可憑證。頒發證書機構它也有一對公鑰和私鑰。
證書機構用它的私鑰將 A的公鑰 和 一些A的信息 加密得到數字證書。然后A發送數據給B時,包含了三個部分:原文+數字簽名+數字證書
如果數字證書是ok的,那么其內部存儲的A的公鑰就是ok的。
4.1 創建數字證書
數字證書=證書內容(注意是明文)+數字簽名
如何驗證內容是明文的?你可以嘗試導出一個二進制的證書,用16進制查看,發限標記的地方是英文,是簽發機構,說明是明文,否則應該看不到的:
Globalsign Root CA是Globalsign的根證書,GlobalSign的根證書是PKI生態系統中最古老,最受信任的根證書
數字證書的結構分為內容(類似報文)+對內容產生的簽名。簽名的作用是為了將來驗證數字證書的。
步驟1 : 有一個權威的證書簽發機構,稱為CA——全球就那么幾個公司比較權威啦,這個機構,先用RSA產生一對公私鑰。
私鑰自己留著藏起來,你要是能偷到手就厲害了。
步驟2: 先生成一個文件,文件內容大概是這樣的:
- 公鑰內容
- 簽發者ID—-誰簽發的證書
- Subject—-也就是這個證書簽發給誰。
- 有效期
- 其他信息
以上內容都是明文。我們稱為內容P,具體內容如下:
-
版本號version為證書的版本標識,目前最新版本為v3,若使用擴展項時,version=v3。
-
序列號serialNumber為證書的唯一標識,每張證書的序列號不同。
-
簽名算法signatureAlgorithm和證書域中的簽名算法相同。
就是指的這個數字證書的數字簽名所使用的加密算法,這樣就可以使用證書發布機構的證書里面的公鑰(公鑰可以支持多種算法,因此需要告知使用具體哪一種),根據這個算法對指紋進行解密。指紋的加密結果就是數字簽名。
-
證書的簽發者issuer是證書的頒發機構,是證書持有者的信任方。
-
主體subject也是證書持有者,是證書的所屬實體。
-
有效期validity包含證書的生效日期和失效日期。
-
主體公鑰信息subjectPublicKeyInfo表示證書持有者的公鑰信息。
假設我們自己的公司叫"ABC Company",我們想申請證書,那么我們自己就要通過rsa算法生成公司的一對公鑰和密鑰,并且把公鑰發送給機構,私鑰自己保管
-
主體唯一標識符subjectUniqueID 證書簽發的唯一標識
-
簽發者唯一標識符issuerUniqueID表示證書持有者的唯一標識。
-
擴展項extensions標識證書的擴展信息,可同時擴展多個信息。
步驟3: 然后使用hash算法,對內容P進行hash計算,得到一個摘要H
步驟4: 然后使用簽發機構的私鑰對H進行RSA加密,得到簽名信息S。這個步驟稱為簽名,就是用私鑰對某公開內容的hash值進行加密。
步驟5: 然后將內容P,S連成一個文件,這個文件就是所謂的數字證書了。所以數字證書里,包括證書持有者的身份信息,證書信息,證書持有人的公鑰,以及機構的簽名信息。
4.1.1 舉例,CA如何給我們簽發一個有效證書和服務器如何發送證書:
舉個例子方便大家理解,假設我們公司"ABC Company"花了1000塊錢,向一個證書發布機"SecureTrust CA"為我們自己的公司"ABC Company"申請了一張證書。
注意,這個證書發布機"SecureTrust CA"是一個大家公認并被一些權威機構接受的證書發布機構,我們的操作系統里面已經安裝了"SecureTrust CA"的證書。
"SecureTrust CA"在給我們發布證書時,把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式寫到證書里面,然后用一個指紋算法計算出這些數字證書內容的一個指紋(這里是指證書上的數字簽名),并把指紋和指紋算法用自己的私鑰進行加密,然后和證書的內容一起發布,同時"SecureTrust CA"還會給一個我們公司"ABC Company"的私鑰給到我們(當然建議我們自己公司創建私鑰,把公鑰提供給CA機構比較安全)。
例子中是公司自己的公鑰私鑰都有ca代辦,當然建議我們自己公司創建私鑰,把公鑰提供給CA機構比較安全,因為CA發送私鑰的萬一出錯呢?或者泄露呢?
我們花了1000塊錢買的這個證書的內容如下:
×××××××××××××××證書內容開始×××××××××××××××××Issuer : SecureTrust CASubject : ABC CompanyValid from : 某個日期Valid to: 某個日期Public Key : 一串很長的數字…… 其它的一些證書內容……數字簽名所以最后在我們使用https的時候究竟發生了什么:
客戶端向一個需要https訪問的網站發起請求。
服務器將證書發送給客戶端,證書里面包含了服務器的公鑰
客戶端對證書進行校驗
這里要特別說一下客戶端到底 如何來校驗對方發過來的數字證書是否有效:
- 首先在本地電腦尋找是否有這個服務器證書上的ca機構的根證書。如果有繼續下一步,如果沒有彈出警告。
- 使用ca機構根證書的公鑰對服務器證書的數字簽名進行解密,得到md1。
- 證書的內容是明文的,能得到簽名算法signatureAlgorithm,利用公鑰和相應的算法對明文再次計算摘要,得到md2。
- 將md1和md2對比看是否一樣,如果一樣則通過認證。
校驗成功之后,客戶端會生成一個隨機串然后使用服務器證書的公鑰進行加密之后發送給服務器。
服務器通過使用自己的私鑰解密得到這個隨機值。
服務器從此開始使用這個隨機值進行對稱加密開始和客戶端進行通信。
客戶端拿到值用對稱加密方式 使用隨機值進行解密。
為什么不一直使用非對稱進行加密,而是在類似握手之后開始使用對稱加密算法進行https通信:
非對稱加密的消耗和所需的計算以及時間遠比對稱加密消耗要大,所以在握手和認證之后,服務器和客戶端就開始按照約定的隨機串,對后續的數據傳輸進行加密。A如何把自己的數字證書發布給B,如果C截獲A與B之間通信,把A的數字證書換成C的偽造的數字證書發給B,然后冒充A與B進行通信,這個時候B的根證書持有的CA的公鑰無法打開數字證書,說明是假的
總結:
為了速度起見,客戶端只在建立與服務器的連接時,使用非對稱加密(利用數字證書中的服務器的公鑰),這個階段是為了交換一個共享密鑰。接下來的過程使用的是對稱算法。
回過頭來,還記得文章開頭上述非對稱加密的作用嗎?就是為了解決對稱加密傳輸密鑰容易被竊取的缺陷,而https沒有粗暴的用非對稱加密來替換對稱加密,而是組合了這兩種用法,利用非對稱來傳輸對稱加密的密鑰!
再來個中文說明的圖,意思差不多,但是更詳盡:
4.2 數字證書究竟解決了什么問題
還記得<3.2 數字簽名存在問題>章節的問題嗎,那么數字證書是怎么解決普通數字簽名的問題的?
首先我們回到主題,我們需要解決什么問題?問題就是“如何確保本地持有的公鑰是要訪問的網站的真正公鑰,而不是被壞人替換了假的公鑰呢”
這里用到的是事先存儲方法,就是事先將這個網站的公鑰放在一個地方P,并且信任這個地方P上的所有公鑰。 將來只要瀏覽器能識別出公鑰來自P,那么也會認可該公鑰。
于是存在某種機構,該機構不直接提供公鑰,而是提供數字證書,把公鑰放在證書內,將來只要瀏覽器識別數字證書是ok的,那么公鑰自然也是ok的。
那么如何識別數字證書呢?只要給數字證書加上防偽碼就行了!這個防偽碼就是數字證書上的數字簽名(證書內容計算摘要,再用CA的私鑰加密,只能CA的公鑰能解密,CA的公鑰內置于windows操作系統內)
瀏覽器程序有一個證書選項,里面有“受信任的根證書頒發機構”,還有你的系統里的證書管理工具里也有信任的機構,機構列表來源就是根證書,安裝一個根證書,機構列表就多個一條記錄,在你裝上系統或者下載瀏覽器的時候自帶的,也可以后天安裝。
一個根證書對應一家CA機構,根證書內持有該CA的公鑰,這個公鑰可以查看防偽碼,公鑰用于驗證數字證書是否是其簽發的;具體步驟就是再次計算內容的摘要,與證書中的摘要進行對比。
注意:中間人攻擊的特點是截獲并替換,可以理解是在網絡的中間替換,并不能替換已經下載至本地的正確的公鑰,后者屬于物理替換,比如中病毒了或機器被遠程控制了才可以。為什么這么說,是因為《數字簽名是什么?》作者阮一峰 (當然好多別的網站也有,畢竟都是翻譯國外的)里面提到:
復雜的情況出現了。道格想欺騙蘇珊,他'偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。' 此時,蘇珊實際擁有的是道格的公鑰,但是還以為這是鮑勃的公鑰。因此,道格就可以冒充鮑勃, 用自己的私鑰做成"數字簽名",寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進行解密這里面提到偷走電腦是非常不恰當的,也是導致難以理解數字證書的根本原因!因為既然能偷走電腦了,為何不能替換根證書?這樣后續就可以替換網絡中的數字證書,進而替換公鑰了!
由上所知,預存在電腦上的根證書是不會被替換了(比如中病毒了或機器被遠程控制了才可以),那么訪問網站時,網站提供的數字證書就是可驗證的,進而網站的公鑰一定是安全的!這樣就解決了中間人的問題!
B嘗試訪問網站A,A把自己的申請的數字證書發布給B,如果C截獲A與B之間通信,把A的數字證書換成C偽造的數字證書發給B,然后C冒充A與B進行通信,這個時候B本地的根證書持有CA的公鑰,可以發現數字證書是假的!
4.2.1 如何攻擊數字證書呢
這個問題很有意思,正好也可以加深我們的理解
摘自《針對證書的攻擊方法》
一 在公鑰注冊之前攻擊 // 除了內鬼,誰會知道你注冊公鑰的時刻去截獲呢?
二 注冊相似人名進行攻擊
三 竊取認證機構的私鑰進行攻擊 //頂級黑客才行,畢竟有CA公司被攻破,也引發倒閉的前車之鑒,但是現存的幾家CA,呵呵,想攻破,難于上青天
四 攻擊者偽裝成認證機構進行攻擊 //相對來說容易實現,只要讓用戶安裝你的假根證書,讓瀏覽器認為攻擊者是合法的CA即可
因此,也提醒大家,在安裝根證書時,需要小心再小心,當然即使是程序員,也難以區分根證書的!
參考:
《公鑰與私鑰,HTTPS詳解》
《SSL證書原理講解》 參考數字證書交互方式
《數字簽名是什么?》作者 阮一峰 參考留言
Https協議簡析及中間人攻擊原理
《針對證書的攻擊方法》
總結
以上是生活随笔為你收集整理的对称加密和非对称加密、公钥和私钥、单向认证和双向认证、数字签名、数字证书、根证书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于加密、证书的那些事
- 下一篇: 电子工程师私藏的一个网站