1. 程式人生 > >私鑰、公鑰、數字簽名、數字證書、HTTPS

私鑰、公鑰、數字簽名、數字證書、HTTPS

     加密:公鑰加密,私鑰解密      認證:私鑰加密,公鑰解密      如果A給B傳送一個加密的有數字簽名的檔案,會怎麼樣呢?      首先A有自己的公鑰和私鑰:A_public_key, A_private_key      B也有自己的公鑰和私鑰:   B_public_key, B_private_key      (1)A和B互換公鑰      (2)A將檔案用hash演算法生成摘要,用A_private_key對摘要加密,得到的就叫數字簽名      (3)A用B_public_key對檔案加密      (4)將加密的檔案和數字簽名一起發給B        ------B收到內容後      (5)用B_private_key解密檔案,得到明文      (6)用A_public_key解密數字簽名,得到內容摘要      (7)將明文的檔案內容用同樣hash演算法得到摘要,與第六步的摘要對比。相同則證明內容和來源都正確。      解密數字簽名時,需要事先知道傳送方A的公鑰,那怎麼才知道自己得到的公鑰是傳送方A的呢?
     例如:C知道B的公鑰,然後偷偷把B手裡A的公鑰A_public_key換成自己的公鑰C_public_key,那麼以後C給B傳送的東西,B還一直以為是A傳送的。因為B不知道自己手裡公鑰就是A的。      怎麼辦呢?使用數字證書      A找證書中心(CA)申請自己的證書,CA把A的公鑰和一些資訊作為證書內容寫入,然後用CA自己的私鑰生成數字簽名一併寫入證書。A給B發資料時把用B的公鑰加密的資料、A的數字簽名、A的數字證書一起發過去。B的電腦安裝有根證書(作業系統帶的,知道CA的公鑰),用CA的公鑰驗證A的數字證書裡面簽名的合法性,合法後從證書內容裡讀出A的公鑰。再用A的公鑰解密A的數字簽名驗證資料完成性。最後用B的私鑰解密資料。      數字證書可以偽造嗎?
     不能。數字證書裡有CA的數字簽名,簽名是由證書內容的雜湊摘要用CA的私鑰加密的。用CA的公鑰驗證簽名的合法性就可以驗證證書的真假。      https傳輸,訪問google網站:      握手時用非對稱加密傳輸對稱加密的密碼      資料傳輸時用對稱加密的密碼加密資料(對稱加密解密速度比非對稱加密快)      過程:      (1)瀏覽器傳送自己支援的加密規則給google      (2)google選擇一組加密演算法和HASH演算法,並將自己的數字證書發給瀏覽器      (3)瀏覽器驗證數字證書的合法性(驗證證書的數字簽名),然後生成一個隨機數,從google的數字證書裡面獲取google的公鑰,用這個公鑰加密隨機數。用約定的hash演算法生成握手訊息的摘要,並用生成的隨機數加密摘要。把握手訊息、加密的摘要、加密的隨機數發給google      (4)google用自己的私鑰解密隨機數,然後用隨機數解密摘要,再用hash生成收到的握手訊息的摘要與解密的摘要對比,驗證正確性。      (5)google一樣用hash演算法生成握手訊息的摘要,並用解密的隨機數加密摘要。然後把握手訊息、加密的摘要發給瀏覽器      (6)瀏覽器驗證摘要成功後,握手完成。之後通訊的資料用之前瀏覽器生成的隨機密碼加密後傳輸。      不能授信的https訪問?
     比如自己搭建的https伺服器,證書沒有得到CA的認證。瀏覽器收到伺服器的證書後,會檢視證書內容,根據證書裡的頒發機構在本地電腦的根證書裡查詢頒發機構對應的公鑰。當然查詢不到或者解密證書的簽名失敗,會提示正在訪問不授信的網站,但是你是可以繼續安全瀏覽這個網站的。因為瀏覽器依然可以從不授信的證書裡取出伺服器的公鑰然後加密生成的隨機密碼,進行後續的握手和資料傳輸過程。      對於不授信的https訪問,只需要注意它是不是釣魚網站就可以了。例如有可能自己的dns遭到劫持,訪問支付寶網站時,被重定向到高度模仿支付寶網頁的https網站。這時google瀏覽器肯定就會彈窗提示你正在訪問不授信的https網站,如果你沒有提高警惕,就會被矇蔽,洩露了自己輸入的賬戶和密碼。    還有哪種情況會出現訪問https網站而不安全呢? 電腦的根證書是假的。作業系統裡有很多自帶的根證書,儲存了各個數字證書中心的公鑰。如果根證書是假的,那麼就有面臨訪問欺詐網站而不自察的問題。       當然一般而言根證書不會是假的,如果是假的,那麼這家數字證書中心頒發的所有證書都會被提示為不授信,容易被看出來。如若根證書是真的,但證書中心的私鑰被黑客獲取到了,那麼他就可以給自己頒發假證書而瞞過大家了。作業系統廠商知道這個情況後會更新補丁宣佈該根證書失效,或者通過更新證書吊銷列表CRL來宣佈證書失效。此時你就會得到這句提示“該站點安全證書的吊銷資訊不可用,是否繼續”。       還有一種情況就是你自己安裝的根證書被竊取了。例如12306購票網站要求下載安裝根證書,這個根證書說白了就是12306自己給自己頒發的,沒有在CA獲得認證,所以瀏覽器會提示你在訪問不授信的網站之類的訊息,12306首頁就給個公告讓大家安裝他提供的根證書來消除大家購票的後顧之憂。12306這麼挫,那麼它的根證書被竊取到私鑰就成為可能了,非法分子就可以通過12306的私鑰來頒發假證書欺騙中國的廣大網民。即便12306知道了自己證書被竊,也沒有好的補救措施(作業系統廠商不會給你打補丁,不會把你的證書更新到CRL),只能發個公告讓大家手動刪除安裝的證書。 參考: