常見的加密算法可以分為對稱加密算法、非對稱加密算法和摘要算法,數字簽名使用了非對稱加密算法和摘要算法來保證數據傳輸的完整性和安全性。數字證書由權威的CA機構頒發,用於互聯網通信時驗證通信實體的身份。
對稱加密指加密和解密使用相同密鑰的加密算法,也稱為單密鑰加密。他的特點是算法公開、計算量少、加密速度快,對於同樣大小的傳輸對象,對稱加密效率通常為非對稱加密的千倍左右,因此通常被廣泛應用於很多加密協議的核心工作(如https在真正數據通信時就使用的對稱加密算法)。對稱加密算法的缺點是加解密使用同一把密鑰,一旦一方密鑰泄露,傳輸的數據就存在安全風險。此外,與多方的通信需要使用不同的密鑰,通信雙方需要管理大量的密鑰。
常見的對稱加密算法有:DES、3DES、AES、RC4、IDEA等。
非對稱加密使用一對公鑰和私鑰來加密通信數據,也稱為雙密鑰加密。公鑰和私鑰是成對出現的,通信數據使用公鑰加密后,只能通過對應私鑰來解密,同樣使用私鑰加密后也只能通過公鑰來解密查看。公鑰是對外公開的,外界通信方可以很容易獲取到,而私鑰是不公開的,只存在於己方。服務器使用私鑰加密數據往外傳輸時,可以被持有公鑰的客戶端解密查看,但客戶端使用公鑰加密數據傳輸給服務端時,數據是嚴格安全的,只有服務器使用私鑰才能解密查看。因此非對稱密鑰數據通信是單向安全的,客戶端使用服務端的公鑰加密數據傳向服務端是嚴格加密安全的。
非對稱加密的主要用途:① 單向傳輸加密數據,防止中間人攻擊。使用公鑰加密數據並傳輸給接受者,可以確保只有接受者才能獲得明文信息,一般用於交換對稱密鑰;② 身份驗證和數據校驗。發送方使用私鑰加密明文數據的hash值,並將明文、加密后的數據和公鑰一起發送給接收方,接收方只需要通過公鑰解密密文,然后與相同hash算法獲取明文的hash值進行比較,一致則說明明文數據沒有被篡改,一般用於數字簽名。
常見的非對稱加密算法有:RSA、DSA、Diffie-Hellman、ECC等。
摘要算法也稱為哈希算法、散列算法,可以將任意長度的數據轉換成一個定長的、不可逆的數字。只要原文本不同,計算的結果必然不同(幾乎不用考慮重復的情況)。摘要算法用於對比信息源是否一致,因為只要數據源發生變化,得到的摘要信息必然不同,通常用於簽名校驗。
常見的摘要算法有:MD5、SHA-1、MAC、CRC等;
數字簽名是非對稱加密算法和摘要算法的一種應用,能夠保證信息在傳輸過程中不被篡改,也能保證數據不能被偽造。使用時,發送方使用摘要算法獲得發布內容的摘要,然后使用私鑰對摘要進行加密(加密后的數據就是數字簽名),然后將發布內容、數字簽名和公鑰一起發送給接收方即可。接收方接收到內容后,首選取出公鑰解密數字簽名,獲得正文的摘要數據,然后使用相同的摘要算法計算摘要數據,將計算的摘要與解密的摘要進行比較,若一致,則說明發布內容沒有被篡改。
實際上,單一的數字簽名應用,可能會存在安全風險。假設發送方為A,接收方為B,出現的一個不安全分子為M,原本A將發布內容、數字簽名和A的公鑰發送給B,結果半道被M截獲了,M修改了發布內容,用自己的私鑰生成了數字簽名,然后將修改的發布內容、M的數字簽名、M的公鑰發送給了B,B接收時驗證一樣可通過,但實際上接收的已經是被篡改的數據(見圖1)。實際使用中,數字簽名常常同數字證書一同出現。
圖1 單一數字簽名被中間人攻擊示意圖
數字證書是由權威的CA機構頒發的無法被偽造的證書,用於校驗發送方實體身份的認證。解決如上問題,只需要發送方A找一家權威的CA機構申請頒發數字證書,證書內包含A的相關資料信息以及A的公鑰,然后將正文A、數字證書以及A生成的數字簽名發送給B,此時中間人M是無法篡改正文內容而轉發給B的,因為M不可能擁有這家CA的私鑰,無法隨機制作數字證書。當然,如果M也申請了同一家CA的數字證書並替換發送修改后的正文、M的數字證書和M的數字簽名,此時B接收到數據時,會校驗數字證書M中的信息與當前通信方是否一致,發現數字證書中的個人信息為M並非A,說明證書存在替換風險,可以選擇中斷通信。
為什么CA制作的證書是無法被偽造的?其實CA制作的數字證書內還包含CA對證書的數字簽名,接收方可以使用CA公開的公鑰解密數字簽名,並使用相同的摘要算法驗證當前數字證書是否合法。制作證書需要使用對應CA機構的私鑰,因此CA頒發的證書是無法被非法偽造的(CA的私鑰泄露不在考慮討論與考慮范圍內)。
數字證書簽名的基礎就是非對稱加密算法和數字簽名,其無法偽造的特性使得其應用面較廣,HTTPS中就使用了數字證書來保證握手階段服務端傳輸的公鑰的可靠性。
