密碼學深度解析
Nudge 如何保護您的訊息(以及為什麼這很重要)
Nudge 為高風險通訊而構建:端對端加密的訊息和通話,設計為即使對手和能力不斷演進也能保持安全。本頁面在詳細的技術層面解釋密碼學——包括所有密碼原語、Swift 套件以及它們如何協同工作。
訊息內容在您的裝置上加密,僅由預期接收者解密。伺服器可以中繼資料,但無法讀取。
如果裝置金鑰在未來被洩露,由於訊息金鑰持續演進,過去的訊息仍將受到保護。
洩露後,隨著新秘密的引入,協定可以「癒合」——限制攻擊者能夠持續讀取流量的時間。
Swift 套件與架構
Nudge 的密碼堆疊由多個開源 Swift 套件構建,每個套件在提供安全的後量子訊息傳遞方面都有特定作用。
PostQuantumSolace
github.com/needletails/post-quantum-solace
編排所有密碼操作的高階會話管理 SDK。PostQuantumSolace 提供 PQSSession API,用於建立會話、傳送訊息、管理裝置和處理金鑰輪換。它將 Double Ratchet 協定執行與後量子金鑰交換相結合,以提供具有前向保密性和洩露後安全性的端對端加密訊息傳遞。
相依項: DoubleRatchetKit, NeedleTailLogger, NeedleTailAlgorithms
DoubleRatchetKit
github.com/needletails/double-ratchet-kit
實作帶有後量子 X3DH (PQXDH) 整合的 Double Ratchet 演算法。此套件提供前向保密性和洩露後安全性的核心協定。它處理混合金鑰交換(Curve25519 + MLKEM1024)、訊息金鑰派生、標頭加密和安全訊息會話的狀態管理。DoubleRatchetStateManager 參與者管理棘輪狀態並提供執行緒安全的加密/解密操作。
相依項: NeedleTailCrypto, NeedleTailLogger, BinaryCodable
NeedleTailCrypto
github.com/needletails/needletail-crypto
圍繞 Swift Crypto (swift-crypto) 和 CryptoKit 的全面密碼包裝器。NeedleTailCrypto 提供用於金鑰生成(Curve25519、P256、P384、P521、MLKEM1024)、對稱加密/解密(AES-GCM)、金鑰協商(ECDH)、金鑰派生(HKDF)以及透過 Apple 平台上的 Keychain 和 Secure Enclave 進行安全金鑰儲存的高階 API。此套件抽象了低階密碼操作並提供一致的生產就緒介面。
相依項: swift-crypto (Apple), swift-collections
NeedleTailAlgorithms
github.com/needletails/needletail-algorithms
提供在整個密碼堆疊中使用的演算法實作,包括用於密碼操作的資料結構和實用程式。此套件包含 PostQuantumSolace 和其他 NeedleTails 套件使用的共享演算法元件。
NeedleTailLogger
github.com/needletails/needletail-logger
在整個密碼堆疊中用於除錯、監控和稽核追蹤的日誌框架。提供具有可設定日誌級別和執行緒安全日誌操作的結構化日誌記錄。
BinaryCodable
github.com/needletails/binary-codable
為密碼資料結構提供高效的二進位編碼和解碼。用於以緊湊的、與平台無關的格式序列化金鑰、訊息和協定狀態。
swift-crypto
github.com/apple/swift-crypto
提供基礎密碼原語的 Apple 跨平台密碼庫。此套件實作 MLKEM1024 (Kyber)、Curve25519、AES-GCM、SHA-256、SHA-512、HKDF、HMAC 和其他標準演算法。它是為 NeedleTailCrypto 和整個堆疊提供動力的低階密碼引擎。
密碼原語
Nudge 使用精心選擇的密碼原語集合,每個原語都針對特定的安全屬性、效能特徵以及對經典和量子攻擊的抵抗能力而選擇。
MLKEM-1024 (Kyber-1024)
它是什麼: MLKEM-1024 是基於 Kyber 演算法的 NIST 標準化後量子金鑰封裝機制 (KEM)。它設計用於抵抗經典和量子電腦的攻擊。
它做什麼: MLKEM-1024 使兩方能夠在不安全通道上建立共享金鑰。一方生成公鑰/私鑰對,另一方使用公鑰封裝共享秘密。私鑰持有者然後可以解封裝秘密。這即使對擁有量子電腦的對手也提供安全性。
為什麼重要: 經典金鑰交換演算法(如 RSA、ECC)將被大規模量子電腦破解。MLKEM-1024 提供「現在收集,稍後解密」保護——即使攻擊者今天記錄加密流量,他們也無法在未來使用量子電腦解密。
實作: 由 swift-crypto (Apple) 提供,在 PQXDH 握手時使用
Curve25519
它是什麼: Curve25519 是為橢圓曲線 Diffie-Hellman (ECDH) 金鑰協商而設計的高效能橢圓曲線。它提供 128 位安全性,並在現代密碼系統中廣泛部署。
它做什麼: 使兩方能夠透過交換公鑰來建立共享秘密。每一方將其私鑰與對方的公鑰組合以派生相同的共享秘密。Curve25519 在 Nudge 中用於金鑰協商 (ECDH) 和數位簽章 (Ed25519)。
為什麼重要: 雖然不具有量子抗性,但 Curve25519 對經典攻擊者提供即時安全性並且非常快速。在 Nudge 的混合 PQXDH 設計中,Curve25519 提供當今的安全性,而 MLKEM-1024 提供對未來量子威脅的安全性。攻擊者要破壞會話,兩者都必須被破解。
實作: 由 swift-crypto (Apple) 提供,在 PQXDH 握手和裝置金鑰簽章時使用
HKDF (基於 HMAC 的金鑰派生函數)
它是什麼: HKDF 是一個金鑰派生函數,可以從單個共享秘密或高熵輸入安全地派生多個金鑰。它使用 HMAC(基於雜湊的訊息認證碼)作為其基礎原語。
它做什麼: 取得共享秘密(來自金鑰交換)並為加密、認證和其他用途派生特定用途的金鑰。HKDF 使用鹽(用於域分離)和可選的上下文資訊,以確保為不同目的派生不同的金鑰。Nudge 使用帶 SHA-512 的 HKDF 從 PQXDH 共享秘密派生會話金鑰。
為什麼重要: 金鑰派生防止在不同上下文之間重用金鑰,這對安全性至關重要。每個派生的金鑰在密碼學上是獨立的,因此洩露一個金鑰不會影響其他金鑰。HKDF 還在 Double Ratchet 協定中用於從鏈金鑰派生訊息金鑰。
實作: 來自 swift-crypto 的 HKDF<SHA512> 和 HKDF<SHA256>,在整個協定中使用
AES-GCM (進階加密標準 - Galois/計數器模式)
它是什麼: AES-GCM 是一種認證加密演算法,在單個操作中提供機密性(加密)和完整性(認證)。它在 Galois/計數器模式中使用 AES 分組密碼。
它做什麼: 加密訊息內容並生成證明訊息未被篡改的認證標籤。AES-GCM 用於加密 Nudge 中的所有訊息負載,確保訊息不能被攻擊者讀取或修改。
為什麼重要: 認證加密防止竊聽和篡改。如果攻擊者修改加密訊息,認證標籤將無效,解密將失敗。Nudge 使用 AES-256-GCM,提供 256 位安全性。
實作: 由 swift-crypto (Apple) 提供,透過 NeedleTailCrypto 用於所有訊息加密
SHA-256 和 SHA-512 (安全雜湊演算法)
它是什麼: SHA-256 和 SHA-512 是從任意輸入產生固定大小輸出(分別為 256 和 512 位)的密碼雜湊函數。它們是單向函數——易於計算但計算上不可逆。
它做什麼: 在整個密碼堆疊中用於各種目的:SHA-256 在 Double Ratchet 中用於 HMAC 中的鏈金鑰派生,SHA-512 在 HKDF 中用於從 PQXDH 共享秘密派生會話金鑰,兩者都用於完整性驗證和金鑰派生。
為什麼重要: 雜湊函數是基本構建塊。它們確保金鑰被確定性地派生,可以驗證資料完整性,並且密碼操作產生一致的結果。SHA-512 為金鑰派生操作提供額外的安全餘量。
實作: 由 swift-crypto (Apple) 提供,在 HKDF、HMAC 和金鑰派生中使用
HMAC (基於雜湊的訊息認證碼)
它是什麼: HMAC 是一種訊息認證碼,使用密碼雜湊函數(如 SHA-256)與秘密金鑰組合,以產生驗證訊息的真實性和完整性的標籤。
它做什麼: 在 Nudge 中,HMAC-SHA256 在 Double Ratchet 協定中用於派生鏈金鑰和訊息金鑰。每個棘輪步驟使用 HMAC 推進金鑰鏈,確保金鑰確定性地和安全地演進。
為什麼重要: HMAC 確保金鑰派生是安全且確定性的。它在 Double Ratchet 中廣泛使用以提供前向保密性——每個訊息使用從先前金鑰派生的唯一金鑰,因此洩露一個金鑰不會洩露過去或未來的金鑰。
實作: 來自 swift-crypto 的 HMAC<SHA256>,在 Double Ratchet 金鑰派生中使用
一切如何協同工作
1) 後量子握手 (PQXDH)
當兩個使用者開始對話時,Nudge 執行混合金鑰交換:
- Curve25519 ECDH: 雙方交換 Curve25519 公鑰並使用橢圓曲線 Diffie-Hellman 派生共享秘密
- MLKEM-1024 封裝: 一方使用另一方的 MLKEM-1024 公鑰封裝共享秘密
- 秘密組合: Curve25519 共享秘密和 MLKEM-1024 共享秘密被連接
- HKDF 派生: HKDF-SHA512 從組合的秘密派生根金鑰和初始鏈金鑰
這種混合方法確保對經典攻擊者(Curve25519)和量子攻擊者(MLKEM-1024)的安全性。兩者都必須被破解才能破壞會話。
2) 持續金鑰演進 (Double Ratchet)
握手後,Double Ratchet 協定提供前向保密性:
- 對稱棘輪: 每個訊息使用 HMAC-SHA256 推進鏈金鑰,派生唯一的訊息金鑰
- 訊息加密: 訊息金鑰與 AES-256-GCM 一起使用以加密訊息負載
- DH 棘輪: 定期地,新的 Diffie-Hellman 金鑰交換更新根金鑰並建立新的鏈金鑰
- 金鑰輪換: 舊金鑰被丟棄,確保前向保密性——洩露當前金鑰不會洩露過去的訊息
Double Ratchet 確保每個訊息使用唯一的加密金鑰,並且金鑰持續演進以提供洩露後安全性。
什麼被加密(以及什麼沒有)
強密碼學保護訊息內容。與所有訊息系統一樣,某些網路級別的元資料(例如 IP 路由)可能仍然存在。Nudge 的堆疊還支援元資料保護技術,例如加密標頭,以減少流量分析信號。
- 已加密: 訊息內容、會話秘密、敏感元資料(在支援的情況下)
- 減少暴露: 透過標頭加密的計數器/金鑰識別符(在適用的情況下)
- 仍然可能: 傳輸級別的觀察(時序、端點),取決於網路條件
安全屬性
Nudge 的密碼設計提供多層安全性:
- 後量子安全性: MLKEM-1024 保護免受未來量子攻擊
- 前向保密性: 即使當前金鑰被洩露,過去的訊息也保持安全
- 洩露後安全性: 會話可以從金鑰洩露中恢復
- 認證加密: AES-GCM 防止竊聽和篡改
- 元資料保護: 標頭加密減少流量分析
想要私有 Nudge 社群?
NeedleTails 為需要私有部署、治理控制和運營責任的組織提供付費伺服器實施服務。