密碼學中將加密分為對稱加密和非對稱加密。所謂對稱不對稱指的就是密鑰(yuè),注意這個字的發音,常常容易讀錯。一段數據從明文到密文再到明文的過程,如果用的同一個密鑰就是對稱加密,用的兩個密鑰就是非對稱加密,把非對稱加密中從明文到密文使用的密鑰稱為公鑰,從密文到明文使用的密鑰稱為私鑰。
題主第一個問題本質上說的是密鑰協商算法,最流行的就是DH協議了,全稱Diffie-Hellman,一個非常簡單的基于離散對數難題的算法,再往深了說,還有基于橢圓曲線上的離散對數難題的ECDHE密鑰協商算法,DH算法的升級版。目前就應用在HTTPS中。感興趣的童鞋用火狐訪問下百度,點擊鏈接前面的綠色的鎖,查看詳情,就能看到用的哪些算法:
題主第二個問題想問的應該是非對稱加密目前的應用場景。非對稱加密時間是比對稱加密長的,而且不是一點半點,極端情況下,同一段數據慢上數千倍都有可能的。那么是否非對稱加密算法就沒有用武之地了呢?非也,我們可以不用非對稱算法來加密數據。我們再回到上面圖中的算法,你一眼應該就能看到一個熟悉的身影,RSA,典型的非對稱加密算法。前面說了,ECDHE是用來交換密鑰的,密鑰是來自對稱加密AES算法的128位密鑰,RSA的作用是什么?
非對稱算法的一個重大領域就是簽名。你需要做的就是把非對稱算法倒過來用。公鑰加密,私鑰解密,倒過來就是,私鑰簽名,公鑰驗證。RSA在我訪問百度HTTPS中的作用就是,在ECDHE交換密鑰過程中給服務器簽名,通過我這邊火狐瀏覽器進行公鑰驗證,從而完成了百度服務器的身份認證。
前面我為了大家的理解,一直沒有說的是,其實DH或者ECDHE也屬于非對稱加密算法。于是非對稱算法的另一個重大領域也呼之欲出,就是密鑰協商。