互聯網剛開始是安全的,可是伴隨着黑客(Hacker)的誕生,互聯網變得愈來愈不安全。任何一個事情都有兩面性,黑客也有好有壞,好的黑客叫白帽子,壞的黑客叫黑帽子。與此同時,隨着Web技術發展愈來愈成熟,而非Web服務(如Windows操做系統)愈來愈少的暴露在互聯網上,如今互聯網安全主要指的是Web安全。算法
既然要講Web安全,首先介紹什麼是安全,安全的本質是什麼?引用《白帽子講安全》裏對安全的定義:安全問題的本質就是信任問題。舉例來講,自行車的車鎖,咱們認爲是安全的,由於咱們認爲自行車鎖的製造商是不會揹着咱們留有鑰匙,若是這個信任都沒有的話,那麼這個自行車就是不安全的。安全
在介紹完什麼是安全的本質後,咱們繼續講解安全的三要素,機密性、完整性和可用性。機密性指的是要求保護數據內容不能泄露,加密是實現機密性要求的常見方法。完整性指的是保護數據內容是完整的、沒有被篡改的,實現完整性的常見方法是數字簽名。可用性要求保護資源是隨需而得,黑帽子一般經過DDos攻擊搶佔服務器的資源,致使正經常使用戶不能正常訪問。接下來介紹常見的加密算法和數字簽名算法。服務器
常見加密算法有對稱加密和非對稱加密,對稱加密指的是加密和解密用的同一個密鑰,而非對稱加密的加密過程和解密過程用的是不一樣密鑰,常見對稱加密有DES(Data Encryption Standard,數據加密標準)和AES,而非對稱加密有RSA。網絡
對稱加密算法咱們主要介紹AES(Advanced Encryption Standard,高級加密標準),AES三個基本概念:密鑰、填充、模式。根據密鑰長度,AES又能夠細分爲AES12八、AES19二、AES256。下面介紹AES的加密流程,首先將明文分解爲大小爲128bit小塊,而後將這些明文小塊放入AES加密器各自生成密文塊。當將明文小塊大小小於128bit時,須要對這個明文小塊進行填充操做。而AES加密器提供了CBC、ECB、CTR等5種模式。 加密
非對稱加密算法咱們主要介紹RSA算法,RSA算法基於大數分解難而使得該算法異常安全。下面咱們開始描述RSA算法,首先選擇兩個充分大的質數p和q,並計算 n=pq。接下來計算m=(p-1)(q-1),最後找出兩個數e和d,使得 (e*d) mod m =1。其中e和n就是公鑰,而d和n就是私鑰。任何知道公鑰的人均可以利用公式 c = a^e mod n把原始數據加密成一個密文,私鑰的持有者能夠經過公式 c^d mod n 計算原始數據a。經過計算公式咱們也能夠發現加密和解密的算法是不同的,這也是」非對稱「的由來。操作系統
經過對對稱加密算法和非對稱加密算法的介紹,咱們知道若是A、B兩我的想要創建會話,爲了保證會話的機密性,咱們須要對數據進行加密,這個密碼本只有A、B兩我的知道,而如何保證這個密碼本在傳輸的過程當中不被第三者竊取呢?咱們能夠經過非對稱加密對密碼本進行加密,即A首先呼叫B,並索要B的公鑰,而後用B的公鑰對密碼本進行加密並將密文發送給B,B收到A的消息以後,用本身的私鑰進行解密。這個過程看起來已經很完美了,可是有一個讓人意想不到的漏洞--中間人攻擊。中間人在網絡中發現A索要B的公鑰這條消息,當B將本身的公鑰發送給A時,中間人截取B的公鑰,並將本身的公鑰發送給A。接下來,A將本身的密碼本經過中間人的公鑰繼續加密發送給B,中間人截取A發出來的這條消息,用本身的私鑰進行解密,而後用B的公鑰進行加密,從新發送給B。B收到消息後並不會發現什麼異常,由於B能用本身的私鑰進行解密。可是它們都不知道中間人已經徹底掌握了它們的密碼本。設計
中間人攻擊是在獲取對方公鑰的時進行替換,那麼,解決這個問題的辦法就是創建一個獲取對方公鑰的可信渠道。一個簡單而有效地辦法就是創建一個全部人都信任的權威機構,有改權威機構來存儲並分發你們的公鑰。這就是咱們一般所說的數字認證機構,英文是Certificate Authority,簡稱CA。任何人均可以申請把本身的公鑰放到CA上去,不過CA必須親自檢驗申請者是否是符合資格。若是A想要和B創建會話,那麼A直接從CA出獲取B的公鑰,這樣A就不用擔憂拿到的公鑰是否是假的。cdn
中間人既然能假扮公鑰,會不會假扮CA呢?答案是確定的。這樣一來,CA不但須要向A保證「這個公鑰確實是B的」,還要向A證實」我確實是CA「。對應的解決方法是數字簽名算法。CA首先生存一個本身的公鑰私鑰對,而後將公鑰公之於衆。以後,CA對每條發出去的消息都用本身的私鑰加個密做爲簽名,以此證實消息的來源是真實的。接受方收到消息以後,用CA的公鑰進行解密,若是能解得開,則說明對方必定是真實的CA。由於,這樣的消息只有私鑰持有者才能作的出來。至此爲止,加密算法和簽名算法就講解完畢,一條安全的通訊線路的設計也有了一個比較完美的方案。blog