如圖 1所示,為了保證數據在網絡中安全傳輸、不被攻擊者非法竊聽和惡意篡改,發送方在發送數據之前需要對數據進行加密處理,即通過一定的算法,利用密鑰將明文數據變換為密文數據;接收方接收到密文數據後,需要對其進行解密處理,即通過一定的算法,利用密鑰將密文數據恢複為明文數據,以獲得原始數據。其中,密鑰是一組特定的字符串,是控製明文和密文轉換的唯一參數,起到"鑰匙"的作用。
如果數據加密和解密時使用不同的密鑰,則該加/解密算法稱為非對稱密鑰算法。在非對稱密鑰算法中,加密和解密使用的密鑰一個是對外公開的公鑰,一個是由用戶秘密保存的私鑰,從公鑰很難推算出私鑰。公鑰和私鑰一一對應,二者統稱為非對稱密鑰對。通過公鑰(或私鑰)加密後的數據隻能利用對應的私鑰(或公鑰)進行解密。
如果數據加密和解密時使用相同的密鑰,則該加/解密算法稱為對稱密鑰算法。
非對稱密鑰算法包括RSA(Rivest Shamir and Adleman)、DSA(Digital Signature Algorithm,數字簽名算法)和ECDSA(Elliptic Curve Digital Signature Algorithm,橢圓曲線數字簽名算法)等。
l 對發送的數據進行加/解密:發送者利用接收者的公鑰對數據進行加密,隻有擁有對應私鑰的接收者才能使用該私鑰對數據進行解密,從而可以保證數據的機密性。目前,隻有RSA算法可以用來對發送的數據進行加/解密。
l 對數據發送者的身份進行認證:非對稱密鑰算法的這種應用,稱為數字簽名。發送者利用自己的私鑰對數據進行加密,接收者利用發送者的公鑰對數據進行解密,從而實現對數據發送者身份的驗證。由於隻能利用對應的公鑰對通過私鑰加密後的數據進行解密,因此根據解密是否成功,就可以判斷發送者的身份是否合法,如同發送者對數據進行了"簽名"。例如,用戶1使用自己的私鑰對數據進行簽名後,發給用戶2,用戶2利用用戶1的公鑰驗證簽名,如果簽名是正確的,那麼就能夠確認該數據來源於用戶1。目前,RSA、DSA和ECDSA都可以用於數字簽名。
非對稱密鑰算法應用十分廣泛,例如SSH(Secure Shell,安全外殼)、SSL(Secure Sockets Layer,安全套接字層)、PKI(Public Key Infrastructure,公鑰基礎設施)中都利用了非對稱密鑰算法進行數字簽名。