原文鏈接:http://www.nature.com/nature/journal/v549/n7671/full/nature23461.html
當用戶訪問以https開頭的網站時,用戶的計算機(筆記本電腦,桌面設備,手機或其他設備)使用傳輸層安全(TLS)將其安全地連接到Web服務器。TLS結合了一系列加密操作,以確保沒有第三方可以理解發送的內容(機密性); 沒有第三方可以修改消息而不被檢測(完整性); 並且沒有第三方可以模仿一個通信方(真實性)。
調用Web服務器“Alice”和用戶的計算機“Bob”。Alice和Bob相互識別的是它們共享一個祕密值,一個“密鑰”。他們使用這個鍵執行“對稱”加密操作。我們稍後會回到關於他們如何知道祕密鑰匙的問題。
假設愛麗絲有一個消息m發送給Bob:一個網頁或一個文件。愛麗絲和鮑勃都知道加密密鑰k enc。愛麗絲使用該密鑰k enc來應用“對稱加密算法” 來加密消息m,產生密文c,Alice通過互聯網發送給Bob。Bob使用相同的密鑰k enc應用匹配的對稱解密算法來解密密文c,獲得原始消息m。
愛麗絲和鮑勃也都知道認證密鑰k auth。愛麗絲使用這個密鑰k auth應用密文c,產生一個認證標籤,Alice也通過互聯網向Bob發送證明她可以訪問該密鑰。Bob通過使用相同的密鑰應用相同的MAC來驗證計算。
對稱加密確保https中數據的機密性。它確保間諜不能看到消息的內容。驗證確保消息的真實性和完整性:它阻止間諜修改消息或替換不同的消息,假裝是愛麗絲。
https提供了幾種對稱加密算法和MAC的選擇。一些MAC是從“哈希函數”構建的。散列函數將任意長度的字符串映射到固定長度爲n的字符串:例如256位字符串。在本文中,我們僅考慮設計用於使計算上的以下操作的哈希函數:(1)給定h的圖像中的值z,找到預圖像,即,具有h(m)= z的字符串m ; (2)給出一個字符串m和h(m),找到第二個預先圖像,即一個字符串m '≠ m與ħ(米)= ^ h(米 '); 和(3)發現碰撞,即h(m)= h(m ')的串m ≠ m ' 。散列函數提供消息的緊湊指紋; 消息的一個小變化產生完全不同的指紋。該屬性用於MAC的構造。
到目前爲止的描述讓Alice和Bob到達擁有一個共享的對稱密鑰。https連接的這一部分使用“公鑰加密”。
在公開密鑰加密中,每一方都有兩個密鑰:一個公鑰和一個私鑰。私鑰只有派對才知道,而公鑰可以公開。給予愛麗絲的公共加密密鑰,任何人都可以加密對她的消息,而只有她擁有她用來解密的匹配私鑰。
在https方案中,Alice是一個Web服務器,而Bob是瀏覽器。Bob首先聯繫愛麗絲下載公鑰,然後對其加密一次性對稱密鑰,最後在通信的其餘部分使用對稱密鑰進行加密和認證,如上所述。Alice解密Bob的初始消息以獲取共享的對稱密鑰,然後也用於其餘的通信。
https中的另一個選擇是使用另一個公鑰函數“密鑰交換”,這個函數非常接近於目前爲止所描述的但使用不同的數學函數。Bob而不是Bob將對稱密鑰加密到Alice的公鑰,而Bob和Alice都進行了共同生成對稱密鑰的計算。
還有一個重要的問題:Bob知道Alice提供的公鑰真的屬於她嗎?在https的情況下,這是由瀏覽器下載和驗證“證書”來處理的。這裏使用的加密功能是公共密鑰“簽名”,其使用公鑰加密來驗證消息。
在簽名系統中,Sam使用他的私有簽名密鑰將簽名算法應用於消息m,產生簽名。每個人都可以通過使用Sam的公共簽名密鑰將驗證算法應用於m來驗證此簽名。在內部,這些算法通常將哈希函數應用於消息,以及涉及密鑰的其他數學運算。
像MAC一樣,簽名系統確保消息的真實性和完整性,但有兩個重要的區別。首先,簽名可以由任何使用公開密鑰的人進行驗證,而認證標籤則是在雙方共享k auth之間。第二,只有Sam具有用於生成有效簽名的私鑰,而Alice到Bob的認證標籤可能是由Alice或Bob計算出來的。
在https中,山姆是互聯網安全研究小組等知名信託方,大家都知道山姆的公鑰。Sam簽名的消息是將Alice的身份與Alice的公鑰相關聯的證書。Bob驗證了Sam的簽名,然後可以自信地使用Alice的公鑰進行加密。