從加密解密演進看 HTTPS 通訊(上)——簡述加密解密演進

描述

咱們都知道加密的目的是爲了保障信息傳輸過程當中的安全性。算法

對於如今人來講,可能會據說過兩個名詞,一個是對稱加密,一個是非對稱加密,那你好奇它們的含義以及它們是怎麼演變成如今的樣子的嗎?安全

接下來就讓我來給你們說道說道,提到加密解密其實涉及到一個名詞就是密碼學,其實聽到這個詞不用慌,維基百科上提到密碼學被一個學者解釋爲:「密碼學是關於如何在敵人存在的環境中通訊」,其實說白了就是若是有不懷好意的人想要查看我和他人的通訊信息時,那我應該如何確保信息傳輸的安全無誤呢?這樣就是密碼學要解決的問題。bash

當咱們瞭解了密碼學的歷史後,你就會天然會明白什麼是對稱加密、非對稱加密,以及它們都是怎麼就解決問題的。函數

密碼學能夠以計算機爲分水嶺,分爲古典密碼學和現代密碼學,至於爲何這麼分,且聽我娓娓道來,接下來咱們先講古典密碼學中加密解密如何進行博弈的。加密

古典密碼學

古典密碼學,這時的最小的加密操做單位仍是字母。 大體是四個演進時代:spa

隱藏法

其實就是把信息經過某種方式藏起來,從而達到一種信息安全的效果。藏起來確實是最容易想到的,可是它的隱患實際上是當那些隱藏的方式被你們都知道的時候,其實能夠在城關檢查時加大檢查力度,來削弱隱藏法。.net

提到隱藏法有一個頗有趣的故事,希羅多德的記錄中說那會先把送信人的頭髮剃光,而後在它的頭皮上寫上要傳遞的信息,待送信人頭髮長出來以後,就可讓他去送信了,到了對方那裏再把送信人頭髮剃光,這時就能看到要傳遞的信息了。code

移位法和替代法

當隱藏法不那麼管用以後,其實就須要去考慮有沒有其餘方式能夠對信息進行加密呢?cdn

  • 移位法,看下面的例子更容易理解:
1234 -> 2345(每一個日後移動一位)
I love you -> k nqxg aqw(每一個日後移動兩位)
複製代碼
  • 替代法,其實就把一部分信息替換成另外一部分,這時就須要一個替表明來記錄:
I love you -> a bcde fcg(僞裝 I -> a、l -> b,o -> c,而後以此類推);
複製代碼

但我以爲移位法實際上是一種特殊的替代法,只是替代規則是每次都是去找這個元素後面移動位數對應的那個元素進行替代便可。blog

關於替代法有一個頗有名故事就是十六世紀蘇格蘭女王的故事,但其中不只僅只用到了替代法還用到了隱藏法,其實這些手法並非同時只能存在其一的,而是能夠多種方式結合使用,若是感興趣,能夠下面這個鏈接瞭解:

蘇格蘭的瑪麗女王

那替代法應該如何破解呢?破解的方法頻率分析,利用的是一篇文章中不一樣英文字母出現的頻率不一樣,本質是大幅下降字母排列組合的可能性。下圖是維基百科中英文字母出現頻率的統計圖:

有了頻率分析其實你就能夠知道密文中出現最多的字母可能就是 e 了,而後這是第一步,這時還不能徹底肯定,也許還須要再根據拼寫規則篩選一下。

維吉尼亞密碼

前面咱們講到了替代法,但替代的規則還很原始,就是進行原文密文一對一的替換,因此也很容易被頻率分析破解,那我怎樣才能讓頻率分析不起做用呢?對了對抗頻率分析,其實咱們能夠將替代的關係由原來的一對一改成一對多,這時同一個字母能夠由多個字母進行表示,就很難分析了。

既然原來只是使用一套字母表進行替換,那維吉尼亞密碼乾脆直接使用 26 套字母表進行替代,具體如圖示:

直接看這個可能會比較懵逼,我來說講它具體是如何加密的,好比原文是 hello,如今的替換的規則是須要我本身指定的,好比 h 用第 3 套(找到序號爲 3 的那一行,而後在查看序號爲 0 的 H 對應的那一列,接下來找到交點,就肯定了講 h 替換爲 k),e 用第 8 套,兩個 l 分別用第 20 套和第 11 套,o 用第 14 套,這樣下來,hello 就變成了 KMFXC。可是真實狀況,不會像上面這麼亂指定,而是會約定一個替換規則,這個規則也被稱爲鑰匙,看下面的圖可能會更好理解,而後根據鑰匙去找對應的替換字母,只要根據鑰匙不斷重複進行替換便可。

不過這個發明後並無被大規模使用,由於它太麻煩了,一個短語還好,你本身加密篇文章試試?人手動加密也容易出錯,因此直到美國內戰纔是陸續開始有規模的使用維吉尼亞加密法,至於緣由嘛,實際上是由於機械的出現。

那它該如何破解呢?其實就是從找出重複屢次的單詞,可能會有多個重複屢次的單詞,而後每一個重複屢次的單詞中間都會有幾個間隔長度,找出這裏面的交集,這個交集其實就頗有多是鑰匙的長度。算出鑰匙的長度有什麼呢?其實就是把多套字母表加密的規則降級爲單套字母表加密,而後對這個單套字母表加密提取出來的字母進行頻率分析。下面這張圖其實就是一個簡單的例子,出現過兩次 BUK,估算鑰匙長度爲 4,而後從第一個字母開始每一個 4 個字母提取出來造成一組字母集,這套字母集就能夠用頻率分析去作處理試着破解了,其實能夠整理出來 4 套字母集,而後去找交集,這樣會更準確一些:

恩尼格瑪機

這是二戰期間德國一直信賴的加密方式,它的原理也是替代,只是比起維吉尼亞加密法,它更難以破解,而若是想要對它進行破解其實也是隻能暴力破解,先看看它長什麼樣子吧:

這張圖的恩尼格瑪機其實還只是簡單版本,德國海軍的恩尼格瑪機比這個更復雜(三個轉子提高到八個轉子,而且還有接線器,用來調換字母,好比全部輸入的 a 都會替換成 b 而後再進行加密),我以爲它很像計算機,由於它也是三部分,輸入 -> 處理(加密) -> 輸出(對應字母的燈泡會亮),中間的齒輪結構被稱爲轉子,它能夠保證每次輸入進來字母被加密替代的字母都是不同的,那麼是如何保障的呢?當我一個字母進來以後,會根據第一個轉子的字母進行替換,而後第一個轉子轉一格,第一個轉子的結果會被看成第二個轉子的輸入進行再次加密,接着第二轉子的結果會被看成第第三個轉子的輸入再進行加密,而且這個過程不斷進行。當第一個轉子轉一圈後會帶動第二個轉子轉一格,第二個轉子轉一圈會帶動第三個轉子轉一格,只要是雙方設置好相同起始的三個轉子的位置,雙方就能夠進行加密了。而它的鑰匙的機率是 26 * 26 * 26(三個轉子的狀況下),因此就算破解鑰匙也只能進行暴力破解。

雖然這種加密方式很強大,但這時候其實電報已經很普及了,你發出去的信息很容易被截獲(只要頻率相同),也須要稍微考慮個人鑰匙該如何傳輸才更安全,固然這時討論這個還稍微有點早,這時還能夠線下發放鑰匙簿(也就是天天按照什麼鑰匙進行加密通訊的統一規則書),但其實德國很謹慎,基本上會每一個消息都用一個新鑰匙,防止同一天全部消息都是用同一把鑰匙從而進一步下降被破解的可能性。

德國人是如何協商密鑰的呢?剛纔提到了鑰匙簿,他們當天會有大鑰匙,好比是 WER,而後操做員隨便想一個單詞好比 XYZ(這就是此次的鑰匙,被稱爲小鑰匙),而後先加密一次 XYZ -> ASF,而後再加密一次 XYZ -> RWF,而後這兩個拼在一塊兒就成了 ASFRWF,其實真正的信息是從第七字母開始的,前六個字母就是這條消息的小鑰匙,也是大鑰匙用來加密本次傳輸的小鑰匙,而小鑰匙用來傳遞本次傳輸的內容。只要對方按照大鑰匙先調整好恩尼格瑪機而後把前六個還原爲 XYZXYZ 便可,這樣對方就知道了後面加密的內容都是用 XYZ 進行加密的,若是不是重複出現 XYZ 就說明通訊有問題,不用理會便可。

講到這裏,你也知道了它的破解難度,但大部分人也都據說過圖靈的故事,就是他最終完成了恩尼格瑪機的破解,固然這其中並非只有他一批人,而是前先後後五六批人爲破解恩尼格瑪機作出了貢獻,至於圖靈是怎麼破解的,我三言兩語也並很差解釋清楚,只須要直到他經過找到德軍加密的一些規律,下降了鑰匙了可能性,而後就會交給叫作他們發明的一個叫「炸彈」的機器進行暴力破解,畢竟機器仍是須要機器去對抗的。

補充:

  • 鑰匙爲何重要?
    • 由於若是想要使用多套密碼給原文加密,你須要知道其中的對應關係;
  • 頻率分析萬能嗎?
    • No,信息量不夠的話,誰給你分析去;
    • 每次鑰匙不同也很難,由於可能還會由於信息不夠,下一篇的密文用的鑰匙就不一樣了;
    • 因此若是能夠作到每次都是一個新的(最好是隨機的)鑰匙,那其實安全性仍是很高的;
  • 密碼學的應用其實就是一種千方百計給哦別人讀取信息製造更多麻煩,與此同時又不給本身讀取信息增長太多麻煩。因此實際考量後的加密目標,並非追求絕對的安全、沒法破解,而是在儘量增長安全性的基礎上,保證使用上的效率,找到平衡點;

現代密碼學

現代密碼學,這時的最小的加密操做單位已是 0 1 0 1 這樣的二進制了。二進制的好處是,它打亂的是語言規律的底層結構,使得改變發生在文本內部。直到如今大體分爲三個演進時代。

在瞭解了古典密碼學概念後其實後面的現代加密並不難理解,讓咱們來看看吧。

魔王加密系統

魔王加密系統,由於計算機的出現,讓加密解密的最小單位從字母變成了數字,數字的變化打亂了信息的底層結構。

它的確實能保證信息主體的安全,可是呢,你要是鑰匙怎麼傳遞倒是一個很大的問題,不事後面仍是有人發明了安全的鑰匙傳遞方法,也就是「迪菲-黑爾曼鑰匙交換方案」,這裏的具體的數學原理我就不展開講了,不過靠的是不可逆的單向函數,也就是模運算。感興趣的人能夠看看下面的文章:

迪菲-赫爾曼密鑰交換不要用比喻去理解全部的科學(day48)

不過它並沒沒有解決中間人攻擊問題(就是我僞裝是你的身份和對方通訊),並且還須要二者同時在線一塊兒協商出密鑰才行,因此並非很完美,也真是因爲這些緣由纔會迭代出更好的加密方式。

RSA 加密

RSA 加密,它解決了鑰匙傳遞中的漏洞,雖然它並非沒法破解的,但由於計算量太大,只要提高鑰匙長度在理論上破解時間無限長。

RSA 也是就是咱們經常聽到的非對稱加密,爲何叫非對稱加密,實際上是由於它有兩把鑰匙,一把能夠公開的鑰匙和一把本身私有的鑰匙(也就是公鑰和私鑰),而且它使用到的加解密算法是同一個,而這以前的那些加密方式其實都是對稱加密,它們加密和解密都是同一把鑰匙,而加密和解密用的是不一樣算法(基本上是逆向進行)。

並且 RSA 還有一個特性,就是公鑰和私鑰能夠互相加解密。因爲是兩把鑰匙,我只須要將公鑰公開給別人,就可讓別人用個人公鑰給我發加密信息了。基於這個特性,那麼若是愛麗絲想要給鮑勃發消息,只須要拿到鮑勃的公鑰進行數據加密便可,這樣發過去的消息,只有持有持有私鑰的鮑勃自己才能解開這條信息。

雖然這樣發過去的消息確實沒問題了,只是鮑勃沒辦法驗證消息真的是來自愛麗絲的,若是是中間的伊芙想要搗亂,他能夠僞裝本身是愛麗絲給鮑勃發消息,由於只要我拿到鮑勃的公鑰便可,而公鑰有時能夠在晚上傳輸的,因此是能夠被攔截的。

若是想要解決這個問題就要利用到另外一個特性,若是在生活中我想要驗證一條消息來自某我的那我只須要讓對方把消息寫下來並在末尾簽上本身的名字便可,由於實際在紙上的簽名並無那麼容易進行僞造。這時候咱們也須要經過簽名這種思路來完成身份驗證,那非對稱加密中該如何完成這個簽名呢?其實只須要利用別人都沒有而我只有我有的信息便可,也就是本身持有的私鑰,所以用私鑰加密的過程也被稱爲簽名,而公鑰解密的過程也被稱爲驗籤。講到這裏你應該直到該怎麼作了,也就是愛麗絲再給鮑勃發消息時只須要先拿鮑勃公鑰對信息加密,再對這個密文進行私鑰簽名便可,而鮑勃收到消息,也會先用愛麗絲的公鑰驗籤,而後在用鮑勃的私鑰解密便可完成通訊。

可是你覺得到這裏兩邊的通訊就真的徹底安全了嗎?並非,由於在公鑰傳輸的過程當中,仍是存在中間人伊芙,他能夠對網上傳輸的信息進行攔截和修改,這時候若是他將傳輸過去的本來鮑勃的公鑰換成了本身的,那其實愛麗絲也是並不能發現的,那該怎麼呢?這時就須要一個第三方權威機構來給鮑勃的公鑰進行信用背書,而後愛麗絲拿到這個背書後進行一系列驗證便可,若是驗證都沒問題,就說明真的能夠相信傳遞過來的公鑰就是鮑勃的了,只是這個過程其實也很複雜,並且這裏說的信用背書其實就是頒發證書的過程,而驗證的過程就是證書驗證的過程,具體的驗證細節會放到下一講。

量子加密

說實話,這玩意我也不懂,我能跳過它嗎?

只是據說,若是這個東西真的出來大規模使用了,那 RSA 這種難以破解的加密方式也會容易被破解。

而且因爲量子物理自己的特性,在鑰匙傳輸和通訊方面量子加密都是很是安全的。

這我不懂我就很少說了。

總結

到這裏爲止加密解密的基本演進咱們也就講完了,其實這個演進過程是十分有趣的,你能看到人類智力大比拼,而且加密方和解密方不斷你方唱罷我登場,可是如今看來,加密方仍是佔據了上方,畢竟 RSA 並不那麼容易破解。

若是不看量子加密,其實我從古典密碼學到現代密碼學的演進中看到了有一些趨勢,好比:

  • 加密單位愈來愈小;
  • 數學起到的做用越來作越大(只是我提到比較少);
  • 公開透明的部分愈來愈多;
  • 信息愈來愈容易被截獲;

感謝非對稱加密的暫時領先,讓咱們能安心的進行數據傳輸。

感謝

以上內容參考了密碼學的維基百科、獲得的《卓克·密碼學 30 講》、扔物線的 HenCoder Plus 以及《碼書》。

相關文章
相關標籤/搜索