現代的信息加密方式是怎樣的?

之前偶然看了@十一點半 的大作,具體了解了一下Enigma的原理,很想知道現代比如軍事上使用的最高端的加密方式是怎樣的。想起多年前看的丹布朗的第一部小說《密碼城堡》,覺得現在估計是不用Enigma那樣的機械式加密了,而是電子加密的,小說裡面提到一個很玄幻的迴旋秘鑰(具體名詞記不清了,大概就是說秘鑰首尾相連,永遠暴力解不出來),當然貌似還有暫時還沒實現的更玄幻的量子加密,號稱覺得無法破解,又是為什麼呢,希望有人通俗的解釋一下原理。。。謝謝


無論機械還是電子,加密這事最終都是個數學問題。Enigma已經算古典系統了,真正讓人嘆為觀止的是現代密碼學,包括題主提到的量子通信。另外,以下除「古典加密」以外的系統,只要有合理的參數配置,都基本排除了暴力破解的可行性(可能性當然有,但即使平均水平的加密也需要把全世界的計算能力湊一塊算個幾十年,難道就為了看你那幾張破艷照?)


古典加密:

加密過程可以看作計算

f(明文)=密文

解密則是跟f對應的函數

g(密文)=明文


這個 (f, g) 函數對就是整個密碼系統的核心機密。古典時代的密碼研究者們致力於發明牛逼的 (f, g) 函數對,但需要加密的地方很多啊,不能老用同一個加密容易被破解啊,怎麼產生出如此多的 (f, g) 函數對呢?如何保證每個函數 f 的強度呢(不容易被破解)?


密鑰與對稱加密:

為了解決這個問題,有聰明人把「演算法」和「秘密」分開,「演算法」是公開的,方便大家研究,並尋找更好的演算法(破解難度、計算複雜性、實現難度等),而計算中用到的一個「秘密」只要不泄露,就無法破解我的密文,這就個「秘密」就是「密鑰」。加密演算法對密鑰只有長度的要求,因此有極廣的選擇範圍(例如任何256位的數字),解決了「秘密」不夠多的問題。現在,加密變成了:

f(明文, 密鑰) = 密文

解密:

g(密文, 密鑰) = 明文


因為加密和解密的密鑰相同,它被稱為「對稱加密」。目前廣泛應用的AES就是這種類型,它的函數 f 和 g 甚至是一樣的。


密鑰分發:

對稱加密很好,但如何安全地傳送密鑰?又有聰明人發明了一種方法(有興趣的請搜索:Diffie-Hellman密鑰交換演算法),它保證:

即使通信雙方在一條被竊聽的信道上通信,並且沒有任何事先商議好的信息,他們仍然可以安全地產生一個只有他們雙方知道的密鑰。


非對稱加密和數字簽名:

好了,現在通信雙方有了可靠的演算法產生密鑰,也有了函數對 (f, g) ,不用擔心他們之間的對話被竊聽了,但另一個問題來了:隔著網路,你怎麼知道對面跟你通信的傢伙,不是被人偽裝的?或者說,你怎麼知道自己打開的不是釣魚網站?


數字簽名技術的基礎、牛逼閃閃的非對稱加密系統出現了,以RSA為先驅(RSA是三個發明人名字首字母縮寫,也是演算法名,也是公司名),並由此產生了一門叫做「數字證書」的大生意。


所謂非對稱,就是加密和解密用的密鑰不同,加密:

f(明文, 私鑰) = 密文

解密:

g(密文, 公鑰) = 明文


私鑰和公鑰必須嚴格配對,而且不存在暴力破解以外的方法從公鑰推導出私鑰。在這套體系下,大家都公開自己的公鑰,並妥善保密自己的私鑰。信息發送方用自己的私鑰加密數據,而接收方只要用對應的公鑰解密,即可驗證這條信息的發送者是不是其本人,這就是數字簽名。實際中的數字簽名與此稍有不同,實在不想扯得太遠了,原理一樣,有興趣可以自己搜索。


證書,無本大生意:

那這門大生意是怎麼回事?


就是「證明該公鑰的持有者確實是XXX」的生意,哥賣的不是商品,是「信任」。


聽起來夠簡單吧?數字簽名系統中,如果大家都放出自己的公鑰,號稱是工商銀行,那你信誰的?所以就要有一個大家都信任的機構,由他來主持公道,確認哪個公鑰是真的屬於工商銀行。這就叫「證書頒發機構」,簡稱CA,這門生意多賺錢呢?請看下圖右下方的數字:

這個價值$2695,使用期為2年的產品,用任何一台跑得動Windows XP的電腦,都可以在1分鐘內生成,並且需要的軟體還是開源的。


如果你堅持看到了這裡,可能會問:所有涉及到的演算法都是公開的,甚至有開源的軟體,你也可以自己做證書,幹嘛還要買?證書究竟是個什麼鬼?


如果忽略無關緊要的細節,證書就是一個將工商銀行網站的域名、公司名稱、公鑰、一些其它相關信息寫在一個文件里,然後用CA的私鑰簽名的東西,保證了這份文件確實由CA生成,並且以CA的名義擔保文件中陳述的內容屬實。因為CA很少,所以你的電腦安裝操作系統時只要自帶這些CA的公鑰,你就能通過它們,以及它們發布的證書,信任更多的公鑰(姑且認為是網站吧)啦。


這些CA的公鑰也是以證書的形式放在你的電腦上,只不過它們自己為自己簽名,並且操作系統無條件信任這些固定的證書,它們也被稱為「根證書」。信任的傳遞就是:


你的電腦 信任 CA根證書

CA根證書 擔保 工行證書

所以你的電腦信任工行證書。


瀏覽器打開工行登陸界面,不用輸入用戶名密碼,直接點地址框里那個小鎖頭,你就能看見Verisign的標誌,詳細信息中還有它的新東家Symantec的信息。是的,就是以前那個賣殺毒軟體被360打得找不到北的賽門鐵克。因為買了它的證書,才會有這個小鎖頭,否則瀏覽器是會報警的。


總的來說:

這些CA之所以能夠如此輕鬆的賺錢,僅僅因為你的電腦預裝了它們的根證書


如果你用Windows,可以在cmd中運行一個叫certlm的東西,看看你電腦上安裝的證書。請特別關注文件夾「Trusted Root Certification Authorities」,大概應該是這樣:

看見那幾個阿里系的名字沒?還有CCB(建設銀行),CNNIC(中國互聯網信息中心)和ICBC(工商銀行)。


還有個叫ROOTCA的證書(這是個什麼鬼,誰發的?!求解惑!):

繼續展開的話,大概還可以吐槽一些不靠譜的CA私鑰泄露事件(只要拿到CA的私鑰,你就可以給你自己弄個工行的證書,你的釣魚網站看起來就跟真的一模一樣。否則,瀏覽器首先就會報警。有興趣的請搜索關鍵字 comodo brazil breach),以及:

1. 為什麼大部分CA都是美帝的公司?天朝CNNIC有個根證書,但我不敢信啊,果斷禁用了。

2. 為什麼支付寶、淘寶、銀行、12306這些網站要在我的電腦中安裝它們自己的根證書,一裝好幾個,並要求我信任?他們不是應該從別的CA那獲取證書嗎?是因為付不起2年$2695的證書使用費么?

扯得太遠了,最後談點所謂的量子密碼系統。現在所謂的量子密碼系統,其實是「量子密鑰分發系統」。它能保證的一點是:如果信道被竊聽,那麼接收者一定知道自己被竊聽了,所以你可以重來一遍(信道帶寬極低,只能用來傳密鑰,而且已經有Diffie-Hellman演算法了,您這技術有何用武之地?)聽起來很高大上,實用價值有限,但利用量子效應的通信和計算還有大片處女地,沒準將來能出個牛逼閃閃的技術。

在知乎最長的一篇回答。以上。


本科學過幾節應用密碼學課程,看目前幾個答案寫的挺亂,系統的寫一寫幫助大家了解一點現代密碼學的基本常識,如有錯誤歡迎各位老師在評論區斧正,謝謝!

首先題主提到的小說里說Enigma採用迴旋加密能夠做到永遠無法暴力破解,這是嚴重錯誤的,因為從密碼學理論上說,不會存在一個絕對安全無法破解的加密演算法。一個真正理想的安全加密方案是一次一密(one-time pad),也就是使用隨機的和明文等長的密鑰進行抑或操作生成密文,密鑰使用一次之後即作廢。這個方案雖然很安全,但是因為在密鑰的生成和分發上存在較大的困難,所以在實際應用中並不是很廣泛。這也就催生了研究密碼學演算法的必要性。

現在密碼演算法的設計都遵從了Kerckhoff加密原則,即加密系統的保密性不依賴於對加密體制或演算法的保密,而依賴於密鑰,這一原則現也被普遍承認為傳統密碼與現代密碼的分界線。依據密碼體制的不同原理,分成對稱(單鑰)密碼體制和非對稱(公鑰)密碼體制兩大類。

對稱(單鑰)密碼體制的含義就像字面表現的一樣,加解密的密鑰是相同的(如下圖所示&<圖片來源:百度&>),代表的加密演算法有DES和AES等。

DES(Data Encryption Standard)的產生,是現代密碼的第一個標誌,它在1977年被美國政府正式採納為數據加密的標準,密鑰長度為64位,但在1997年的一次破譯挑戰中被人用96天(以1999年超級計算機的計算能力,破解只用22小時)破解之後,逐漸開始被廢棄。代替DES的是AES(Advanced Encryption Standard),其密鑰長度可選擇128位、192位、256位,該標準依舊是對稱密鑰加密中最流行的演算法。

非對稱(公鑰)加密體制和對稱加密體制正好相反,其加解密所採用的密鑰是不同的(如下圖所示,&<圖片來源:百度&>),代表演算法有RSA、ECC等。

非對稱加密的思想非常有趣,它主要依賴了單向函數的計算特性,也就是正向求解很容易而逆向求解卻會非常困難。生活中的例子,比如覆水難收、破鏡難圓都可以看做單向函數,你把鏡子打碎很容易,但是把碎片重新恢復成圓鏡卻不現實;在數學中這樣的函數也有很多,比如大數因子分解(RSA演算法的原理基礎)、橢圓曲線離散對數問題(ECC演算法原理基礎)。

相比較對稱加密體制,非對稱加密的主要優點是密鑰的分發比較方便。單鑰密碼體制在進行加密前,要求通信雙方必須擁有相同的密鑰,並且這個密鑰不能被第三方知曉,這就常常需要藉助不可信的網路環境以外的其它方式(如人工方式)進行密鑰傳遞,代價比較大。而非對稱加密體制卻不存在這個問題,通信的接收方可以將其公鑰(PK)在網路上公開,任何一個想和他通信的發送方都可以用他的公鑰將信息加密後發送給他,而不必擔心被他人截獲之後破解,因為只有接收方的私鑰(SK)才能將其解密(其中公鑰和私鑰的選擇是可以對換的,也就是兩個密鑰任何一個做公鑰或私鑰都可以)。既然非對稱密鑰如此方便,是否意味著使用非對稱體制完全代替對稱體制就好了?答案肯定不是,非對稱體制也有自身的缺點,最大的缺點比如加解密的效率非常低,以至於可能會影響正常通信的體驗。所以在加密通信的實踐中,經常使用數字信封技術將二者的優點結合使用,即用非對稱加密傳遞對稱加密的密鑰,然後再在實際的通信過程中使用對稱加密的密鑰加密真正要發送的信息。除此之外,非對稱加密的另一大類應用是數字簽名,所謂簽名,就是要讓人確信這個消息真的是你產生的,而不是別人偽造的,具體操作和加密傳遞會話信息的過程恰好相反,首先消息的產生者用自己的私鑰對要簽名的信息進行加密,然後發送給接收者,接收者用消息產生者的公鑰進行解密,若得到正確的信息,則證明是真實的,因為只有消息產生者私鑰加密的信息才能唯一被消息產生者的公鑰解密。

現代密碼體系中,除上面說的對稱和非對稱兩大類密碼體制外,應用比較廣泛的還有哈希(Hash)演算法,常見的像MD5、SHA1等。它藉助的思想是哈希函數,即可以將任意長度的輸入映射到固定長度的輸出,並且要具有單向性和抗碰撞的能力。比較常見的應用場景是對大文件求取哈希值之後作為指紋信息存儲匹配,像百度、Google這種大型搜索引擎在過濾重複的頁面或者URL時,應該都使用了哈希演算法提取指紋來代替存儲匹配原文件,以減小時間和空間開銷;還有像密碼等敏感註冊信息的加密保存等。

上面說到了RSA加密演算法大多數都是基於大整數的因式分解或者有限域上的離散對數問題等提出的,為什麼這些問題可以保證非對稱加密演算法的安全性?因為在我們現在使用的傳統計算機上,要求解這兩個數學難題,花費時間是指數級的(即破解時間隨著公鑰長度的增長以指數級增長),這在實際應用中無法被接受。而為量子計算機量身定做的秀爾演算法可以在多項式時間內(即破解時間隨著公鑰長度的增長以k次方的速度增長,其中k為與公鑰長度無關的常數)進行整數因式分解或者離散對數計算,從而為RSA、離散對數加密演算法的破解提供可能。而像對稱加密演算法AES,量子計算機可以利用Grover演算法進行更優化的暴力破解使得破解時間減少1/2次冪,也就是量子計算機暴力破解AES-256加密的效率跟傳統計算機暴力破解AES-128是一樣的。所以為什麼密碼學家們紛紛開始研究量子密碼,因為他們擔心量子計算機一旦研發成功,他們這麼多年辛辛苦苦建立起來的密碼安全體制會一夜轟塌。至於很多關於量子密碼無法破解的說法,就像我第一段說的,我看的書和資料裡面「不存在絕對安全無法破解的加密演算法」還是作為第一節的基本原則存在著,並且我自己也相信這是對的,量子密碼在現在的計算能力看來也許不可破解,但是多少年以後,誰又知道將來的量子密碼會不會像被拋棄的DES,將要被量子計算機摧毀的RSA一樣,面對一種新的計算設備變得不堪一擊呢。

註:最後一段關於量子計算機破解RSA和AES的敘述,部分引自量子計算機_百度百科。


目前主流就是用的數論,量子加密是用的偏振。


現代加密方式都是基於數學難題的,當這個難題被破解,理論上該加密演算法已經不安全。
由於效率問題,數據量大的可以先使用aes等加密方式,然後根據需求,採用不同加密方式對aes密鑰進行加密。
在軍隊(嚴格保密的地方)中應該還是使用內網,做到物理上的保密。


基於數學的非對稱演算法 rsa之類的東西。


http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
阮一峰寫過一篇關於rsa加密演算法的博文,強烈推薦


推薦閱讀:

用什麼方式記密碼最好?
如何判斷一段聲音是不是自然語言?

TAG:加密 | 密碼 | 密碼加密 |