原文地址:https://medium.freecodecamp.o...瀏覽器
密碼學是一門很難理解的學科。它充滿了數學證實。可是對咱們來講,其中大部分的複雜性,是沒有必要去理解其在高層次到底發生了什麼。安全
若是你點開這篇文章,但願建立下一代HTTPS協議,那很是抱歉僅有鴿子是不夠的。不過能夠先煮杯咖啡,而後慢慢享受這篇文章。服務器
你經過網絡作的任何事情(讀該篇文章,在亞馬遜上買東西,上傳貓的照片)均可歸結爲發送信息給服務器並從服務器獲取信息。網絡
這可能有點抽象。讓咱們想象一下這些信息是經過信鴿傳遞的。我知道這看起來可能有點隨意,可是請相信我https就是用相同的方式工做的,雖然它在速度上快不少。併發
同理,咱們不討論客戶端,服務器和黑客。咱們將談論Alice, Bob 和 Mallory.若是你不是第一次嘗試理解密碼學的概念,這幾個名字你應該不陌生,由於它們常常出如今技術文獻裏。編碼
若是Alice想給Bob發送一條消息,她把消息綁在信鴿的腿上而後發送給Bob。Bob收到消息,而後讀消息,一切看起來都很好。加密
但若是Mallory在空中劫持了Alice的信鴿並換掉了消息會怎麼樣呢?Bob將沒有辦法知道Alice發送的消息在運送途中被更改了。spa
這就是http工做的方式。很是可怕是否是?我不會在HTTP上發送個人銀行證書,你應該也不會這麼作。翻譯
如今若是Alice和Bob都很狡猾。他們贊成使用密碼來寫他們的消息。他們將每一個字符在字母表中的位置移動三個位置。如:D → A, E → B, F → C。明文信息「secret message」將變成「pbzobq jbppxdb」。code
如今若是Mallory劫持信鴿,她將不能把信息改爲一些有意義的,也不能理解消息裏說了些什麼。由於她不知道密碼是什麼。可是Bob能夠輕鬆地反向應用密碼而後解密消息(A → D, B → E, C → F)。而後密文「pbzobq jbppxdb」可解密成「secret message」。
成功!
這就是所謂的對稱密鑰加密。由於若是你知道怎麼加密信息你也就知道如何解密。
上面描述的編碼一般稱爲凱撒密碼。在現實生活中,咱們使用更加複雜的編碼,可是主要的思想仍是同樣的。
對稱祕鑰加密在除了發送方和接收方,沒有其餘人知道使用了什麼祕鑰時是安全的。在凱撒密碼中,祕鑰就是一個偏移量即每一個字母移動的偏移數。在咱們的例子中咱們使用的偏移量是3,但也能夠是4或者12。
問題在於若是Alice和Bob在利用信鴿發送消息以前沒有見過面,他們沒有辦法安全地創建一個祕鑰。若是他們在消息中同時發送祕鑰,那Mallory能夠劫持消息並發現祕鑰。這就容許Mallory讀取或者修改消息。
這就是屬於中間人攻擊的一個經典例子。而且惟一的避免方式就是一塊兒改變加密系統。
因此Alice和Bob想出了一個更好的系統。當Bob想給Alice發送一條消息時,他遵循如下的流程:
這種方式Mallory沒法經過劫持信息篡改消息,由於她沒有祕鑰。相同的流程用一樣應用於Alice給Bob發送消息。
Alice和Bob就是應用了俗稱的非對稱祕鑰加密。它被叫作非對稱是由於你能夠加密消息(鎖上盒子)可是不能解密消息(打開關上的盒子)。在技術文獻中這個盒子被稱爲公鑰,打開它的鑰匙被稱爲私鑰。
若是你仔細思考你可能會發現咱們還存在一個問題。當Bob接收到打開的盒子後如何肯定它是來自Alice的而且Mallory沒有攔截鴿子並替換成Mallory本身有祕鑰的盒子呢。
Alice決定,她將給盒子簽名。經過這種方式,當Bob接受到盒子時,他檢查簽名而後知道它是Alice發送過來的盒子。
大家可能會想,Bob第一次怎麼辨別Alice的簽名呢?這是一個好問題。Alice和Bob也有這個問題,因此,他們決定讓Ted給盒子簽名,而不是Alice。
誰是Ted? Ted就是著名的,值得信耐的朋友。Ted將他的簽名給每個人,每一個人也相信他將只會給合法的人簽名盒子。
只要當Ted確認請求籤名的人是Alice時,他纔會對盒子簽名Alice。所以Mallory沒法從Ted那獲取Alice的簽名來假冒Alice,Bob也會知道那個信盒是假冒的。由於Ted只在鑑定完請求者的身份後纔會給他們的信盒簽名。
Ted在技術上常被稱做爲證書頒發中心,你正在閱讀這篇文章的瀏覽器就附帶了各式各樣的證書頒發中心。
因此當你第一次訪問一個站點,你信任它的盒子,由於你信任Ted而且Ted告訴你那個盒子時合法的。
Alice和Bob如今有一個可信耐的系統去通訊,可是他們發現攜帶盒子的鴿子比僅僅攜帶消息的鴿子更慢。
他們決定他們將僅使用盒子方法(非對稱加密)選取一個祕鑰,使用對稱加密來加密消息(還記得凱撒密碼嗎)
這種方式結合了二者的優點。非對稱加密的可靠性以及對稱加密的效率。
在現實世界中沒有慢的鴿子,可是不管如何使用對稱加密老是比使用對稱加密慢,所以咱們僅使用它用於交換祕鑰。
如今你知道HTTPS是如何工做的,你的咖啡也應該好了,去享受咖啡吧。
翻譯如有不正之處,歡迎指出!