《演算法圖鑑》第五章:安全性演算法 Part 1
互聯網的時代,網際網路的安全性已不可或缺。時下透過網際網路傳輸數據時,主要有四個問題:「竊聽」( Eavesdrop )、「電子欺騙」( Spoofing )、「篡改」( Falsification ) 和「抵賴」( Repudiation )。
所以有了因應問題的安全性技術誕生,「竊聽」問題用「加密」( Encryption ) 防範 ; 「電子欺騙」和「篡改」問題用「信息鑑別碼」或「數位簽章」防範 ; 「數位簽章」也能防範「抵賴」問題。
讓我們來看看安全性和演算法怎麼防範這些問題!
加密 ( Encryption )
假設 A 打算透過網際網路傳送數據給 B,為避免資料內容被第三方輕易取得,因此把需要保密的資料/明文加密 ( Encryption ) 後在送出,加密後的資料稱為「密文」( Ciphertext or Cryptogram )。
B 為了讀取保密前的原始資料/明文 ( Cleartext or Plaintext ),所以需要解密 ( Decryption ) 。
雜湊函數 ( Hash Function )
- 雜湊函數 ( Hash Function ) 又稱雜湊演算法 ( Hash Algorithm ),可以將輸入的資料轉換成固定長度且不規則的雜湊值/雜湊碼 ( Hash value / Hash code / Hash sum / Hash )。
- 輸入的資料相同時,必定會輸出相同的雜湊值;反之,只要一點不同就會輸出不同的雜湊值。
- 有時 ( 機率低 ),輸入的資料完全不同時卻得到相同的雜湊值,稱為「雜湊碰撞」( Hash Collision )。
- 雜湊值是不可逆的,無法由雜湊值反推出原始資料。
輸入和輸出都為單向的,所以雜湊函數/雜湊演算法不是加密。
目前著名的雜湊函式有 MD5、 SHA-1、SHA-2,目前 MD5 和 SHA1 都已經被破解。
所以目前普遍使用 SHA-2
實際案例:一般來說,使用者輸入的密碼保存在伺服器時,也是使用雜湊函數,藉由輸入密碼的雜湊值與資料庫裡的雜湊值做比對。即便資料庫雜湊值被取得,也因為雜湊值不可逆的特性而無法得知原始碼。
共用金鑰密碼學 ( Shared-Key Cryptography )
- 共用金鑰密碼學 ( Shared-Key Cryptography ) 是加密和解密時使用相同金鑰的加密方法,又稱「對稱式密碼學」( Symmetric Cryptography )。
- 假設 A 打算透過網際網路傳資料給 B,A 用金鑰加密資料產生密文 ( Ciphertext ) 並傳送給 B,B 用相同的金鑰解密 A 傳來的密文,取得原始明文。
- 共用金鑰密碼學包括「凱薩密碼」( Caesar Cipher )、「AES」( Advanced Encrypyion Standard )、「DES」( Data Encryption Standard ) 和「一次性密碼本」( One-Time Pad)。
- 但金鑰有被偷窺的風險,所以共用金鑰密碼系統需要能安全傳送金鑰的方法,稱為「金鑰傳送困難」問題,解決的辦法包括了「金鑰交換協定」和「公開金鑰密碼學」。
- 對密碼加密的方法,可分為加密和解密使用相同金鑰的「共用金鑰密碼學」及使用不同金鑰的「公開金鑰密碼學」。
講到密碼,就一定會想到英國數學家 Allan Mathison Turning !
公開金鑰密碼學 ( Public-Key Cryptography )
- 公開金鑰密碼學 ( Public-Key Cryptography ) 是加密和解密時分別使用不同的金鑰,又稱「非對稱式密碼學」( Asymmetric Cryptography )。
- 加密使用的金鑰稱為「公開金鑰」( Public-Key ),解密的金鑰是「私密金鑰」( Private-Key )。
- 假設 A 打算透過網際網路傳資料給 B,資料接收者 B 必須先製作一組公鑰和私鑰,然後把公鑰傳給資料發送者 A,A 使用 B 傳來的公開金鑰加密資料,並將密文傳送給 B,B 收到後用自己的私鑰解密密文就能取得原始資料。
- 公開金鑰密碼學包括了「RSA 加密演算法」和「橢圓曲線密碼學」( Elliptic-Curve Cryptography ) 。
- 因為密文無法用公鑰解密,所以不怕第三方偷窺,所以公開金鑰密碼學沒有共用金鑰密碼學的「金鑰傳送困難」問題,而且公開金鑰密碼學還能同時與多人傳輸資料。
公開金鑰的問題
- 公開金鑰可信度問題的成因是因為 A 無法判斷接收到的公鑰製作者是否為 B,進而延伸出使用「數位憑證」的方法。
- 公開金鑰另一個問題是加密和解密都很費時,因此不適合高頻率連續傳輸資料,因而衍生出「混成密碼學」。