**發給你電腦的網頁、你發給**的資料(、文字、密碼等)都在完全公開的網際網路上傳輸,在技術上是可被擷取的。
然而你卻不用擔心,在某大型404**搜尋不存在的什麼東西時,或搜尋某資訊被別人發現,之後被查水表——即使這個人 / 組織擷取到了你和**的通訊,他們仍然無法破解這些資訊。而且,這樣的安全保護絲毫不影響你和**之前的高速資訊往來,你的瀏覽體驗會絲般順滑,就像……什麼保護都沒有一樣。
又快又安全,驚不驚喜?神不神奇?這樣的神奇就由自動化的規則來實現——tls
握手(transport layer security handshake,不要糾結他的名字,記不住它也絲毫不影響閱讀)——可以將它理解為「你的電腦和伺服器商討怎樣針對當前通訊進行資訊加密」的過程。它為你的電腦和**的每一次通訊,個性化地準備唯一且一次性的高效加密。而加密本身的安全性,則通過現代密碼學由數學提供保障——這樣的保障往往在乙個時期內非常安全。
在開始講解這個規則前,我們需要明確幾個概念:
(1)加解密系統:由進行明文、密文轉換的演算法(即加解密演算法,一般是公開的),和用於加密、解密的金鑰組成。加密是使用加密金鑰和明文生成密文,解密是使用解密金鑰和密文生成明文。若沒有正確的金鑰則無法進行正確的加解密。
(2)對稱加密:加解密演算法的一種。其用於加密和解密的金鑰相同,被稱為公共金鑰。它的加解密速度很快,但有天生的缺點——通訊雙方必須先共享公共金鑰才能通訊,而這往往是不安全的——線上傳遞的資訊任何人都可以擷取;線下傳遞成本高且未必安全——畢竟人是可以被逮到的。
(3)非對稱加密:另一種加解密演算法。參加通訊的每個人都有兩個金鑰——公鑰(和公共金鑰不同)和私鑰——公鑰是公開的,任何人都可以獲取;私鑰是私有的,自己保護。公鑰用於加密,私鑰用於解密。但它的執行要比對稱加密慢百倍到數千倍。
(4)混合加密機制:就是組合使用對稱加密與非對稱加密。這綜合了兩者的優點——既有非對稱加密奇妙的安全保障,又有非對稱加密的絲般順滑、暢快淋漓。
講解開始了!先放一張圖,看一遍有個印象,再配合下面的詳細解釋即可愉快食用
這就是tls握手的全過程,更詳細描述如下:
一、使用者端(就是你的電腦)和伺服器(就是運營你在看的**的那台遠方的機器)確認要進行通訊後,使用者端生成隨機數 r1(r1是randomnumber_1的簡寫,沒有其他含義。後面的r2、r3同理。),這個r1將成為未來生成對稱加密金鑰的「材料」。然後,使用者端根據自己的情況,向伺服器以明文傳送對於加密方法的建議,和剛剛生成的r1。「加密方法的建議」包括使用者端支援的協議版本、建議的加密型別和建議的加密演算法等。
二、伺服器生成隨機數r2,r2和r1一樣,將成為未來生成對稱金鑰的「材料」。然後,伺服器根據使用者端發來的資訊和建議選定加密技術,並把選定的技術和隨機數r2以明文發給使用者端。
當這一步完成時,雙方都有了相同的r1、r2、r3了。現在,雙方通過相同的演算法,根據r1、r2、r3的值,即可算得相同的新值,這個新的數值就是雙方確定好的接下來要用的公共金鑰。由於公共金鑰是基於臨時生成的r1、r2和同樣臨時生成並保密傳輸、不可破解的r3即時算出來的,所以在網頁瀏覽時間內,安全強度非常高。
四、五步,使用者端和伺服器通過剛剛計算好的公共金鑰,和之前選定的對稱演算法傳送加密資訊,進行商定完成的確認通訊,告知對方已經準備好使用新的加密方法進行通訊了。
至此,tls握手完成。使用者端和伺服器雙方開始使用對稱加密進行高速資訊互動。
注:本文為力求語言平實易懂,盡可能地減少了術語、縮寫、英文名稱等,且模糊化處理(或避開)了一些不影響理解主幹的內容,如:中間人、加解密演算法、證書、簽名(簽章)、完整性驗證、身份驗證等。未來會考慮再介紹一下這些內容。筆者水平有限,若文**現謬誤,歡迎各路高人指出。也歡迎各位提出意見和建議。
TFS 部署管理器 自動化你的部署流程
微軟在昨天發布了tfs deployer http tfsdeployer.codeplex.com,這個產品最初是由一家澳大利亞的諮詢公司readify 開發的,並且被他們廣泛用於內部開發系統中。下面這篇文章是readify的cto,mitch denny寫於2006年的介紹tfs deploye...
TFS 部署管理器 自動化你的部署流程
微軟在昨天發布了tfs deployer 這個產品最初是由一家澳大利亞的諮詢公司readify開發的,並且被他們廣泛用於內部開發系統中。下面這篇文章是readify的cto,mitch denny寫於2006年的介紹tfs deployer的部落格。可能聽上去有點老,但是如果你想在tfs系統實現真正...
Python自動化之資料驅動,讓你的指令碼簡潔10倍
前言 上次在分享 python 的 unittest 框架時,文末提到過資料驅動。資料驅動是一種思想,讓資料和 進行分離,比如爬蟲時,我們需要分頁爬取資料時,我們往往把頁數 page 引數化,放在 for 迴圈 range 中,假如沒有 range 這個自帶可以生產數字序列的方法可以用,我們是不是得...