讀軟體開發安全之道:概念、設計與實施08密碼學(下)

躺柒發表於2024-08-25

1. 對稱加密

1.1. symmetric encryption

1.2. 使用各方共享的金鑰來隱藏資料

  • 1.2.1. 對稱加密在本質上依賴共享金鑰

1.3. 所有加密都是透過對明文進行轉換,把明文訊息(或者原始訊息)變成無法識別的形式(也稱為密文)​,從而隱藏原始訊息內容的

1.4. 可逆的轉換稱為對稱加密,因為只要知道金鑰,我們就既可以進行加密,也可以進行解密

  • 1.4.1. 對稱加密演算法會使用金鑰自定義訊息的轉換方法,從而建立安全的私人通訊,雙方首先需要對在通訊過程中使用的金鑰達成一致

  • 1.4.2. 解密演算法也使用相同的金鑰把密文轉換成明文

1.5. 一次性填充

  • 1.5.1. one-time pad

  • 1.5.2. 它需要通訊各方都提前同意使用一個秘密的、由隨機位組成的字串作為加密金鑰

  • 1.5.3. 假如金鑰是隨機的,就代表各個訊息位要麼隨機取反,要麼保持不變,所以攻擊者不可能在不知道金鑰的情況下把密文還原回原始的訊息

  • 1.5.4. 對訊息中一半的位取反是最理想的訊息隱藏方式,因為無論是保留還是反轉訊息中的大多數位都會在一定程度上揭示出訊息的明文

  • 1.5.5. 一次性金鑰的使用限制是大多數應用都不會使用這種加密方法的原因

  • 1.5.5.1. 金鑰的長度限制了訊息的長度

  • 1.5.5.2. Alice和Bob很可能事先完全不知道他們要加密的資料有多長,所以想要弄清楚他們需要多長的金鑰也就很不現實

1.6. 高階加密標準

  • 1.6.1. Advanced Encryption Standard,AES

  • 1.6.2. 一種使用相當頻繁的現代對稱加密塊加密演算法

  • 1.6.2.1. 在塊加密中,長訊息會被分為多個塊大小的資料段,短訊息則會用隨機位填充到塊的大小

  • 1.6.3. 用相同的方式加密相同的訊息也稱為電子密碼本(Electronic Code Book,ECB)模式

  • 1.6.3.1. 因為可能受到重放攻擊的威脅,所以這種做法並不理想

  • 1.6.4. 把反饋資訊或者其他差異性的內容引入後續的資料塊,讓生成的密文和前面資料塊的內容或序列中的位置產生關聯。這可以確保哪怕明文塊完全相同,加密的密文還是截然不同

1.7. 使用對稱加密

  • 1.7.1. 對稱加密是現代加密演算法的主力軍,因為只要使用得當,這種加密演算法既快捷又安全

  • 1.7.2. 加密可以對透過不安全通道進行傳輸的資料,以及儲存裝置中儲存的資料提供保護

  • 1.7.3. 基本的限制

  • 1.7.3.1. 金鑰的建立

>  1.7.3.1.1. 加密演算法依靠的是提前準備好的金鑰,但是並沒有明確指出如何建立這些金鑰
  • 1.7.3.2. 金鑰的建立
>  1.7.3.2.1. 加密演算法依靠的是提前準備好的金鑰,但是並沒有明確指出如何建立這些金鑰
  • 1.7.3.3. 金鑰的保密性
>  1.7.3.3.1. 加密的有效性完全取決於我們能否維持金鑰的保密性,同時還能在需要的時候使用金鑰
  • 1.7.3.4. 金鑰的長短
>  1.7.3.4.1. 越長的金鑰也就越安全(理論上最理想的金鑰就是一次性填充金鑰)​,但是維護長金鑰的成本更高,而且使用長金鑰的運算效率更低

1.8. 對於對稱加密來說,簽名是不可能實現的,因為通訊的雙方都知道金鑰

2. 非對稱加密

2.1. asymmetric encryption

2.2. 使用接收方擁有的金鑰來隱藏資料

2.3. 非對稱加密完全違背了我們對加密這件事的直覺,但非對稱加密的強大恰恰源於此

2.4. 如果使用非對稱加密,那麼雖然Bob可以把加密的訊息傳送給Alice,但是他自己卻無法解密這條訊息

  • 2.4.1. 對Bob來說,加密就成了一個單向函式,只有Alice擁有執行逆運算(也就是解密訊息)的金鑰

2.5. 非對稱加密會使用一對金鑰,即用來加密的公鑰(public key)和用來解密的私鑰(private key)

  • 2.5.1. 非對稱加密的這種做法是革命性的,它透過金鑰的方式賦予了Alice獨一無二的能力

2.6. RSA密碼系統

  • 2.6.1. 數學背景最簡單的初始非對稱加密協議

  • 2.6.2. RSA的核心理念就是兩個素數的相乘很容易計算,但是找到兩個素數乘積的因數可就是難上加難了

  • 2.6.3. 明文攻擊(chosen plaintext attack)可透過使用隨機位填充訊息來輕鬆挫敗,讓攻擊者完全無從猜測加密的訊息

  • 2.6.4. 以前,RSA演算法對於大多數計算機來說都會佔用相當多的計算資源,所以這種演算法需要昂貴的定製硬體

  • 2.6.5. 如今,RSA正在被諸如橢圓曲線演算法(elliptic curve algorithm)等逐漸取代

  • 2.6.5.1. 這類演算法透過不同的數學模型來實現類似的功能,這類演算法更加“物有所值”​,它們可以用更少的計算產生更加強大的加密能力

2.7. 因為非對稱加密比對稱加密需要消耗更多的計算資源,所以我們通常會選擇用非對稱加密的方法來處理隨機金鑰,然後用金鑰來對訊息本身執行對稱加密

2.8. 非對稱加密的安全性取決於是不是隻有通訊方知道自己的私鑰,所以只有這個通訊方可以用私鑰來進行簽名

  • 2.8.1. 因為驗證工作只需要使用公鑰就可以完成,所以這個過程不會洩露任何秘密

3. 數字簽名

3.1. digital signature

3.2. 會根據只有簽署方擁有的金鑰來對資料進行認證

3.3. 公鑰加密也可以用來建立數字簽名,讓接收方驗證訊息的真實性

  • 3.3.1. 簽名本身和訊息加密無關,但Alice的簽名可以讓Bob確信,這個訊息確實是她傳送的

  • 3.3.2. 數字簽名也可以充當通訊的證據,讓Alice無法否認她曾經傳送過這個訊息

3.4. 真實性和不可抵賴性是通訊中的兩大重要安全屬性,另一個則是機密性

3.5. 簽名和加密是兩個獨立的過程,根據應用的不同,我們可以只進行簽名、只進行加密或者兩項操作都執行

3.6. 數字簽名廣泛應用於簽署數字證書​、郵件、應用程式碼和合法檔案,也廣泛應用於保護各類加密貨幣(如比特幣)​

3.7. 人們會對訊息的摘要值進行簽名,其目的是讓一次簽名操作就可以覆蓋整個文件

4. 數字證書

4.1. digital certificate

4.2. 會根據對根證書的信任來對簽署方進行認證

4.3. 公鑰加密的優勢在於它提供的便利性

  • 4.3.1. 它可以讓我們用一把鑰匙處理所有通訊,而不需要為各個通訊分別管理不同的金鑰,只要我們把金鑰宣告給全世界的任何人自由使用

4.4. 證書認證機構

  • 4.4.1. Certification Authority,CA

  • 4.4.2. 新的CA需要廣泛地釋出自己的公鑰

  • 4.4.3. 作業系統和瀏覽器需要及時地預裝一系列可靠的CA根證書(root certificate),這些證書都用CA對應的公鑰進行了自簽名

5. 金鑰交換

5.1. key exchange

5.2. 讓雙方透過公開的通道來建立共享金鑰,不管是否有人在竊聽這個通道

5.3. 在RSA問世之後不久,懷特菲爾德·迪芙(Whitfield Diffie)和馬丁·赫爾曼(Martin Hellman)開發了一個非常實用的金鑰交換演算法

5.4. 在網際網路上建立安全通訊通道(比如透過TLS協議)方面,金鑰交換是一種特別方便的機制

5.5. 一旦擁有了共享金鑰,雙方就可以透過加密通訊來建立安全的私有通道

6. 使用加密

6.1. 從密碼學的角度來看,安全隨機數增加了不可預測性,從而緩解了透過猜測進行的攻擊

6.2. 摘要提供了一種安全的方式,可以提取唯一的資料來對原始資料執行完全性檢查

  • 6.2.1. 安全摘要提供了一種理想的方式來驗證資料是否遭到了改動,而不需要我們為資料儲存一份完整的副本

6.3. 加密包括對稱加密和非對稱加密兩種方式,其目的都是保護資料的機密性

  • 6.3.1. 在這些敏感資料進入前端Web伺服器的一剎那就對所有入站敏感資料執行加密

  • 6.3.2. 在獨立的站點同步儲存加密的資料和金鑰

  • 6.3.2.1. 一家企業希望把長期資料儲存外包給第三方備份

  • 6.3.2.2. 他們可以把加密資料交接出去進行妥善儲存,同時把金鑰儲存在自己的保險庫中待用,以備他們需要從備份中恢復資料

  • 6.3.3. 加密也不是靈丹妙藥

  • 6.3.3.1. 如果攻擊者可以觀測到加密資料或者其他後設資料的頻率或者規模,我們可能也會給攻擊者洩露一些資訊

  • 6.3.4. 加密的安全性依賴於數學上的未知領域,以及當前最先進的數字硬體技術,這兩個領域仍在不斷髮展和進步

  • 6.3.4.1. 如果某位數學家未來發現了一種高效的方法可以破解當前的演算法,這位數學家必然聲名鵲起

  • 6.3.4.2. 不同型別計算技術(譬如量子計算)的前景也是另一個潛在的威脅

  • 6.3.5. 加密也和其他所有緩解方法一樣,一定會包含一些取捨權衡和未知風險,但加密仍然是絕對值得一用的偉大工具

6.4. 數字簽名是一種對訊息進行認證的方式

6.5. 數字證書可以利用對CA的信任,來簡化共享真實公鑰的方式

6.6. 金鑰交換完善了加密工具箱,讓通訊雙方可以透過公共網路連線安全地遠端協商金鑰

6.7. 正確使用加密演算法非常重要,因為你可以避免給對手提供發起這類攻擊的機會

相關文章