什么是公鑰加密?
公共密鑰加密是一種使用兩個不同的密鑰對數(shù)據(jù)進行加密,并讓其中一個密鑰(公共密鑰)可供任何人使用的方法。另一個密鑰稱為私鑰。用公鑰加密的數(shù)據(jù)只能用私鑰解密,而用私鑰加密的數(shù)據(jù)只能用公鑰解密。公鑰加密也稱為非對稱加密。它被廣泛采用,尤其是對于 TLS / SSL ,這使得 HTTPS 成為可能。
什么是加密密鑰?
在密碼學中,密鑰是用于打亂數(shù)據(jù)以便使其顯得隨機的一條信息;它通常是一個很大的數(shù)字,或者是一串數(shù)字和字母。當使用密鑰將未加密的數(shù)據(jù)(也稱為明文)放入加密算法中時,明文會從另一面看似隨機數(shù)據(jù)。但是,任何擁有正確密鑰解密數(shù)據(jù)的人都可以將其放回純文本格式。
例如,假設我們有一條純文本消息,”你好“, 然后用密鑰*加密;假設密鑰是" 2jd8932kd8“。使用此密鑰加密后,簡單的一句”你好“現(xiàn)在會成為密文 "X5xJCSycg14 = " ,這似乎是隨機的垃圾數(shù)據(jù)。但是,通過使用相同的密鑰對其進行解密,我們將能轉回成”你好" 。
純文本+密鑰=密文:
你好+ 2jd8932kd8 = X5xJCSycg14 =
密文+密鑰=純文本明文:
X5xJCSycg14 = + 2jd8932kd8 =你好
(這是對稱加密的示例,其中僅使用一個密鑰。)
*使用Blowfish算法、CBC模式和Base64編碼。
公鑰加密如何運作?
對于初學者來說,公鑰加密似乎很復雜;幸運的是,一位名為 Panayotis Vryonis 的作者做過一個比喻,大致如下。
想象一下,鮑勃和愛麗絲這兩個人用一個帶鎖的箱子來回運送文件。通常來說鎖只有兩種狀態(tài):上鎖和解鎖。任何有鑰匙的人都可以打開上鎖的箱子,反之亦然。當鮑勃鎖上箱子并將其運送給愛麗絲的時候,他知道愛麗絲可以使用復制的鑰匙來解開箱子。從本質上講,這就是所謂的對稱加密的工作方式:一個秘鑰同時用于加密和解密,對話的雙方都使用相同的密鑰。
現(xiàn)在,想象一下,鮑勃制作了一種帶有特殊鎖的行李箱。此鎖具有三個狀態(tài),而不是兩個:
A.鎖定,鑰匙一直旋轉到左側
B.解鎖,鑰匙旋轉到中間。
C.鎖定,鑰匙一直旋轉到右側。
該鎖帶有兩把鑰匙,而不是一把鑰匙:
1號鑰匙只能向左轉
2號鑰匙只能向右轉
這意味著如果后備箱被鎖定并且鑰匙轉到位置A,只有2號鑰匙可以通過向右轉到位置B(解鎖)來解鎖。如果行李箱鎖定在位置C,則只有1號鑰匙可以通過將鎖向左轉動到位置B來解鎖。
換言之,兩把鑰匙任選其一都可以鎖定箱子,但是一旦鎖定后,只有另一把鑰匙可以解鎖箱子。
現(xiàn)在,假設鮑勃制作了幾十個只能向右旋轉的2號鑰匙,然后為他認識的并且想要這把鑰匙的每個人都配了一把,并將其作為他的公共鑰匙。而他為自己保留了1號鑰匙,作為他的私鑰。這有什么作用?
愛麗絲可以通過箱子給鮑勃鮑勃發(fā)送機密數(shù)據(jù),并確信只有鮑勃可以將其解鎖。 一旦愛麗絲用從左到右旋轉的公共鑰匙鎖定了箱子,只有可以從右到左旋轉的鑰匙才能解鎖它。這意味著只有鮑勃的私鑰才能對其進行解鎖。
如果箱子是用鮑勃自己的私鑰來上鎖,那愛麗絲就能確信這個箱子的確來自鮑勃而不是有人冒充。 只有一把鑰匙可以讓箱子鎖定在位置A或者說能向左旋轉,那就是鮑勃的私鑰。的確,任何人都可以通過只能向右旋轉的公共鑰匙來解鎖,但這可以保證箱子的確來自鮑勃。
以此類推,在這個比喻中,純文本信息就是箱子,密鑰就等同于實體鑰匙,這就是公共密鑰加密的運作方式。只有私鑰的所有者才能加密數(shù)據(jù),讓公鑰對其進行解密;同時,任何人都可以使用公鑰加密數(shù)據(jù),但是只有私鑰的所有者才能解密它。
因此,任何人都可以安全地將數(shù)據(jù)發(fā)送給私鑰所有者。此外,任何人都可以驗證從私鑰所有者那里收到的數(shù)據(jù)確實是來自該人而非冒充者。
TLS / SSL如何使用公共密鑰加密?
公鑰加密對于在互聯(lián)網(wǎng)(通過 HTTPS)建立安全通信非常有用。網(wǎng)站公開共享的SSL/TLS 證書包含公鑰,而私鑰安裝在源站,并由網(wǎng)站所“保有"。
TLS握手使用公共密鑰加密技術對源站的身份進行身份驗證,并交換用于生成對話密鑰的數(shù)據(jù)。諸如RSA或Diffie-Hellman之類的密鑰交換算法,使用公私鑰對來協(xié)商會話密鑰,一旦握手完成,會話密鑰將用于對稱加密。客戶端和服務器能夠為每個通信會話約定新的會話密鑰,從而即使惡意角色識別或竊取了會話密鑰之一也無法解密通信。