密码学深度解析
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 为需要私有部署、治理控制和运营责任的组织提供付费服务器实施服务。