什么是私鑰加密?私鑰加密和公鑰加密有何區(qū)別?
我們討論了很多關(guān)于公鑰加密的安全應(yīng)用的內(nèi)容,它是如何實(shí)現(xiàn)加密和認(rèn)證的。它在SSL、代碼簽名、電子郵件和文檔簽名、個(gè)人身份驗(yàn)證所有內(nèi)容中所扮演的角色。我們不常談?wù)摰氖枪€加密的歷史意義。
今天,我們將討論私鑰加密和公鑰加密的區(qū)別,后者的歷史意義,以及它們?nèi)绾谓Y(jié)合起來,使SSL/TLS和類似的加密系統(tǒng)成為可能。話不多說,我們開始吧。
什么是私鑰加密?縱觀歷史,有無數(shù)的私鑰加密學(xué)例子,可以追溯到公元前1900年左右。在私鑰加密學(xué)中,雙方必須持有一個(gè)匹配的私鑰(或者在傳輸時(shí)交換私鑰),它們可以使用該私鑰來加密明文,然后對(duì)其進(jìn)行解密。著名的例子是凱撒的密碼,神秘機(jī)器和路易十四的大密碼。
但是,私鑰加密存在一個(gè)固有的重大缺陷。今天,我們把它稱為密鑰分發(fā),對(duì)99.9%的人來說,這是一種事后考慮。但從歷史上看,密鑰分配是一個(gè)很大的問題。
想想看,雙方都必須擁有一個(gè)物理密鑰。如果雙方之間有任何距離,你必須委托一名快遞員攜帶私鑰或親自前往那里交易。如果鑰匙落入壞人之手,可能會(huì)破產(chǎn)。過去,人們因?yàn)檫@類私鑰問題跌了很多跟頭。
即使在數(shù)字時(shí)代,私鑰加密本身也在與密鑰分配進(jìn)行斗爭。您怎么知道您在沒有身份驗(yàn)證機(jī)制的情況下能將私鑰(在SSL/TLS中稱為會(huì)話密鑰)發(fā)送給正確的接收方?
公鑰加密技術(shù)的發(fā)明公開密鑰加密的發(fā)明實(shí)際上有兩次重大進(jìn)展。1970年,一位名叫JamesEllis的加密學(xué)家在英國政府通信總部(GCHQ)工作,他從理論上提出了一種公開密鑰加密系統(tǒng),但當(dāng)時(shí)不知道如何實(shí)現(xiàn)它。三年后的1973年,CliffordCocks想出了一種實(shí)用的實(shí)現(xiàn)方法,方法是將一種和RSA(是1977年Ron Rivest、Adi Shamir和Leonard Adleman一起提出的。
1987年7月首次在美國公布,當(dāng)時(shí)他們?nèi)硕荚诼槭±砉W(xué)院工作實(shí)習(xí)。RSA就是他們?nèi)诵帐祥_頭字母拼在一起組成的。目前最有影響力和最常用的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。)大致相當(dāng)?shù)乃惴ɑ旌显谝黄?。第三個(gè)人,數(shù)學(xué)家Malcolm Williamson開發(fā)了一個(gè)等價(jià)于Diffie Helman密鑰交換的密鑰交換系統(tǒng)。
這些信息也被傳遞給了美國國家安全局,但這兩個(gè)組織都不理解它的重要性,而且由于當(dāng)時(shí)計(jì)算機(jī)的性質(zhì),這種技術(shù)被認(rèn)為是不切實(shí)際的,更像是一個(gè)有趣的思想實(shí)驗(yàn)。它在1997年解密了27年。
據(jù)我們所知,它從未被任何一方使用過。因此,1976年,公開密鑰密碼再次被發(fā)現(xiàn),這一次是由Whitfield Diffie和Martin Hellman共同命名的。
一年后,RSA創(chuàng)作者--Ron Rivest、Adi Shamir和Leonard Adleman正在麻省理工學(xué)院完成他們的這項(xiàng)工作。
什么是公鑰密碼?Diffie-Helman密鑰交換和RSA是非對(duì)稱加密體制。到目前為止,加密一直是對(duì)稱的,雙方都能夠使用相同的私鑰進(jìn)行加密和解密。正如我們已經(jīng)討論過的,這給人們帶來了各種各樣的問題。
從術(shù)語“密鑰交換”中可以看出,這些系統(tǒng)的創(chuàng)建者已經(jīng)在考慮糾正一個(gè)由來已久的問題:密鑰分配。
公鑰加密使用一對(duì)密鑰。分別是可以加密的公鑰和解密的私鑰。使用公鑰加密,通信只能走一條路,因此被稱為“不對(duì)稱”。這個(gè)想法是,授權(quán)方持有私鑰,而公鑰是公共密鑰。
公鑰加密中的私鑰仍然和以往一樣有價(jià)值,因此必須額外考慮如何確保私鑰的安全。但在壞人手里,公鑰絕對(duì)是一文不值的。不存在公鑰被盜的風(fēng)險(xiǎn)。那么公鑰加密是如何解決私鑰問題的呢?
通過啟用更安全的對(duì)稱加密。
公鑰加密是一種密鑰交換機(jī)制顯然,公鑰加密的單向特性使得它成為通信的一個(gè)特殊的選擇。但這并不是真正的目的。它既是一種認(rèn)證機(jī)制,也是一種加密機(jī)制。這是為了加密信息并確保它到達(dá)正確的地點(diǎn)。最好的加密方法之一就是私鑰。
這就是您在SSL/TLS中看到的。在短暫的片刻,客戶端生成對(duì)稱會(huì)話(私有)密鑰,對(duì)其進(jìn)行加密,并將其發(fā)送到服務(wù)器。如果服務(wù)器擁有私鑰,它會(huì)解密會(huì)話密鑰,客戶端和服務(wù)器可以開始使用對(duì)稱密鑰進(jìn)行通信。
這也有助于對(duì)服務(wù)器進(jìn)行身份驗(yàn)證,因?yàn)槿绻麤]有正確的私鑰,服務(wù)器就無法解密客戶端的消息。
公鑰密碼學(xué)是一個(gè)輝煌的突破,為我們今天使用的SSL/TLS協(xié)議奠定了基礎(chǔ)。到目前為止,即使是最先進(jìn)的加密系統(tǒng)也只能與其私鑰一樣安全。公鑰加密也是如此。但公鑰加密作為一種密鑰交換機(jī)制,消除了大量的攻擊向量。
由于它的單向特性,用于公鑰加密的私鑰可以更加健壯。強(qiáng)對(duì)稱私鑰是256位。這仍然是足夠的安全措施。但與2048位RSA私鑰相比卻相形見絀。這使得它成為一種更好的密鑰分發(fā)機(jī)制。
公鑰加密在SSL中是如何工作的?在SSL中,公鑰加密有助于身份驗(yàn)證和密鑰交換。為了解釋這一點(diǎn),我將使用TLS1.3模型,因?yàn)檫@是我們前進(jìn)的方向。在早期的TLS版本中,這有點(diǎn)復(fù)雜。
讓我們從密碼和密碼套件開始。密碼是用于加密的算法。密碼套件是SSL/TLS協(xié)議聯(lián)合使用的一組算法。每個(gè)服務(wù)器和每個(gè)瀏覽器都被配置為支持某些密碼套件。
傳統(tǒng)上,密碼套件由:密鑰交換/認(rèn)證算法_WITH_S組成。
TLS 1.3將加密和身份驗(yàn)證算法與關(guān)聯(lián)數(shù)據(jù)(Aead)算法結(jié)合在一起。當(dāng)用戶(客戶端)到達(dá)網(wǎng)站(服務(wù)器)時(shí),它會(huì)發(fā)送一條ClientHello消息,其中包含按首選項(xiàng)排序的受支持密碼套件列表。它還猜測將使用何種加密算法并發(fā)送會(huì)話密鑰。所有這些都是使用服務(wù)器的公鑰加密的。
服務(wù)器使用自己的私鑰解密ClientHello消息,然后返回服務(wù)器Hello消息及其證書、所選的密碼套件以及密鑰。在收到服務(wù)器-Hello之后,客戶端和服務(wù)器開始使用他們交換的對(duì)稱加密密鑰進(jìn)行通信。
現(xiàn)在會(huì)話密鑰的快速消息經(jīng)常被替換。在某些情況下,為每條消息使用不同的會(huì)話密鑰并不少見。但是,如果沒有安全處理密鑰分發(fā)的能力,這是不可能實(shí)現(xiàn)的。這也是公鑰密碼學(xué)的歷史意義。