網際網路剛開始是安全的,但是伴隨著黑客(Hacker)的誕生,網際網路變得越來越不安全。任何一個事情都有兩面性,黑客也有好有壞,好的黑客叫白帽子,壞的黑客叫黑帽子。與此同時,隨著Web技術發展越來越成熟,而非Web服務(如Windows作業系統)越來越少的暴露在網際網路上,現在網際網路安全主要指的是Web安全。
既然要講Web安全,首先介紹什麼是安全,安全的本質是什麼?引用《白帽子講安全》裡對安全的定義:安全問題的本質就是信任問題。舉例來說,自行車的車鎖,我們認為是安全的,因為我們認為自行車鎖的製造商是不會揹著我們留有鑰匙,如果這個信任都沒有的話,那麼這個自行車就是不安全的。
在介紹完什麼是安全的本質後,我們繼續講解安全的三要素,機密性、完整性和可用性。機密性指的是要求保護資料內容不能洩露,加密是實現機密性要求的常見方法。完整性指的是保護資料內容是完整的、沒有被篡改的,實現完整性的常見方法是數字簽名。可用性要求保護資源是隨需而得,黑帽子通常通過DDos攻擊搶佔伺服器的資源,導致正常使用者不能正常訪問。接下來介紹常見的加密演算法和數字簽名演算法。
加密演算法
常見加密演算法有對稱加密和非對稱加密,對稱加密指的是加密和解密用的同一個金鑰,而非對稱加密的加密過程和解密過程用的是不同金鑰,常見對稱加密有DES(Data Encryption Standard,資料加密標準)和AES,而非對稱加密有RSA。
- 對稱加密演算法
對稱加密演算法我們主要介紹AES(Advanced Encryption Standard,高階加密標準),AES三個基本概念:金鑰、填充、模式。根據金鑰長度,AES又可以細分為AES128、AES192、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就不用擔心拿到的公鑰是不是假的。
簽名演算法
中間人既然能假扮公鑰,會不會假扮CA呢?答案是肯定的。這樣一來,CA不但需要向A保證“這個公鑰確實是B的”,還要向A證明”我確實是CA“。對應的解決方法是數字簽名演算法。CA首先生存一個自己的公鑰私鑰對,然後將公鑰公之於眾。之後,CA對每條發出去的訊息都用自己的私鑰加個密作為簽名,以此證明訊息的來源是真實的。接受方收到訊息之後,用CA的公鑰進行解密,如果能解得開,則說明對方一定是真實的CA。因為,這樣的訊息只有私鑰持有者才能做的出來。至此為止,加密演算法和簽名演算法就講解完畢,一條安全的通訊線路的設計也有了一個比較完美的方案。