双棘轮算法 (Double Ratchet Algorithm) 详解
双棘轮算法 (Double Ratchet Algorithm, DRA) 是 Signal Protocol 的核心密码学机制,由 Moxie Marlinspike 和 Trevor Perrin 设计。它旨在为异步、双向、端到端加密 (E2EE) 的消息会话提供前向保密性 (Forward Secrecy) 和未来保密性 (Post-Compromise Security / Future Secrecy)。通过结合对称密钥棘轮和Diffie-Hellman 棘轮,该算法能够确保即使会话中的某些密钥被攻击者窃取,过去和未来的消息内容依然保持安全,极大地增强了通讯的韧性。 核心思想:双棘轮算法通过两种交织的密钥更新机制——每条消息更新的对称密钥棘轮和定期更新的 Diffie-Hellman 棘轮——来不断地“棘轮前进”会话密钥,保证即使攻击者在任意时刻攻破了通信方的一些秘密,也无法解密所有过去或所有未来的消息。 一、为什么需要双棘轮算法?在传统的 E2EE 方案中,如果用于加密整个会话的唯一共享秘密密钥被泄露,那么所有通过该密钥加密的消息都可能被解密。为了提...
椭圆曲线密码学 (ECC) 详解
椭圆曲线密码学 (Elliptic Curve Cryptography, ECC) 是一种基于椭圆曲线数学理论的公钥加密算法 (Public-Key Cryptosystem)。它提供了一种替代传统 RSA 和 Diffie-Hellman 的强大加密方法,其核心优势在于在更短的密钥长度下提供同等或更高的安全强度。ECC 的安全性基于椭圆曲线离散对数问题 (Elliptic Curve Discrete Logarithm Problem, ECDLP) 的计算复杂性。 核心思想:利用椭圆曲线上的点运算构建单向函数,使得正向计算容易,逆向计算(ECDLP)困难,从而实现非对称加密。 一、为什么需要 ECC?传统的公钥密码算法如 RSA 和 Diffie-Hellman 的安全性基于大整数分解问题 (FIP) 和离散对数问题 (DLP)。随着计算能力的提升,为了维持相同的安全级别,RSA 和 DH 的密钥长度需要不断增加(例如,从 1024 位到 2048 位,再到 3072 位)。这会带来以下问题: 性能开销:更长的密钥意味着更复杂的数学运算,导致加密、解密和签名验证...
X3DH 密钥协商协议详解
X3DH (Extended Triple Diffie-Hellman) 协议是 Signal Protocol 的一个核心组件,由 Open Whisper Systems(现为 Signal Foundation 和 Signal Messenger LLC)设计。它是一种异步密钥协商协议,旨在在两个用户之间建立一个安全的、经过认证的共享密钥,即使一方或双方不在线也能完成。X3DH 巧妙地结合了长期身份密钥、中期签名预密钥和短期一次性预密钥,以提供强大的前向保密性 (Forward Secrecy) 和未来保密性 (Future Secrecy),同时能够抵抗中间人攻击和密钥妥协。 核心思想:X3DH 解决了在异步通信环境中首次建立安全端到端加密会话的关键挑战。它通过使用不同生命周期的密钥(身份、签名预密钥、一次性预密钥)进行多次 Diffie-Hellman 交换,确保了即使在一方不在线的情况下,也能安全地协商出一个共享的初始根密钥,并提供双方身份的认证。 一、背景与动机传统的 Diffie-Hellman (DH) 密钥交换协议需要在通信双方同时在线才能进行。然...
RSA (Rivest–Shamir–Adleman) 加密算法详解
RSA (Rivest-Shamir-Adleman) 是一种基于大素数分解困难性的公钥加密算法 (Public-Key Cryptosystem)。它于 1977 年由 Ron Rivest、Adi Shamir 和 Leonard Adleman 三位科学家首次提出,并以他们姓氏的首字母命名。RSA 广泛应用于数据加密、数字签名和密钥交换等领域,是目前应用最广泛的非对称加密算法之一。 核心思想:利用数学单向函数(大整数分解在计算上是困难的),生成一对关联的公钥 (Public Key) 和私钥 (Private Key)。公钥公开用于加密,私钥保密用于解密。 一、为什么需要公钥密码学?在传统的对称加密中(如 AES、DES),通信双方必须共享同一个秘密密钥。这会带来密钥分发难题:如何在不安全的信道上安全地将密钥传递给对方? 公钥密码学(也称为非对称加密)解决了这个问题: 密钥对:每个用户拥有一个公钥和一个私钥。 公钥公开:公钥可以安全地发布给任何人。 私钥保密:私钥必须严格保密,只有所有者知道。 加密:发送方使用接收方的公钥加密消息。 解密:接收方使用自己的私钥解密...
Diffie-Hellman 密钥交换算法 (DH 算法) 详解
Diffie-Hellman 密钥交换 (Diffie-Hellman Key Exchange, DH) 是一种特殊的密钥协商协议,它允许两个通信方在不安全的通信信道上,在没有预先共享任何秘密的情况下,共同建立一个安全的共享秘密密钥。这个共享密钥随后可以用于对称加密算法(如 AES)来加密后续的通信内容。DH 算法由 Whitfield Diffie 和 Martin Hellman 于 1976 年发表,是公钥密码学 (Public-Key Cryptography) 领域的开创性工作之一。 核心思想:在开放信道上,通过数学上的“单向函数”(易于计算,难以逆推)特性,协商生成共同的秘密密钥,而非直接传输秘密密钥。 一、为什么需要密钥交换?在加密通信中,如果希望使用对称加密(如 AES),通信双方(例如 Alice 和 Bob)需要共享一个相同的秘密密钥。然而,如何在不安全的、可能被窃听的公共信道(如互联网)上安全地将这个密钥传递给对方,是一个核心难题: 如果直接发送密钥:任何窃听者(Eve)都可以截获该密钥,并用它来解密后续的敏感信息。 如果预先共享密钥:需要双方提...
ChaCha20 流密码加密算法详解
ChaCha20 是一种高性能、高安全性的对称流密码算法,由 Google 的 Dan Bernstein 于 2008 年设计。它是 Salsa20 算法的改进版本,旨在提供比其前辈更高的抗攻击能力和更简洁的实现。ChaCha20 因其卓越的性能和安全性,已成为 TLS 协议中的重要组成部分,特别是在移动设备和低功耗环境中,替代了传统的 AES-GCM。 核心思想:通过一个密钥 (Key) 和一个随机数 (Nonce) 生成一个无限长的伪随机密钥流,然后将密钥流与明文进行异或 (XOR) 操作得到密文。解密时,使用相同的密钥和随机数生成相同的密钥流,再与密文异或即可还原明文。 一、流密码 (Stream Cipher) 简介流密码是一种对称加密算法,它将明文的每个比特或每个字节与一个伪随机密钥流的对应比特或字节进行组合(通常是异或)来生成密文。 1.1 与分组密码 (Block Cipher) 的区别 特性 流密码 (Stream Cipher) 分组密码 (Block Cipher) 工作方式 逐位/逐字节加密 将明文分成固定大小的块,逐块加密 ...
AES (Advanced Encryption Standard) 加密算法详解
AES (Advanced Encryption Standard),即高级加密标准,是当今最广泛使用的对称密钥分组密码算法之一。它由比利时密码学家 Joan Daemen 和 Vincent Rijmen 设计,原名为 Rijndael 算法。2001 年,美国国家标准与技术研究院 (NIST) 选定 Rijndael 算法作为新的联邦信息处理标准 (FIPS 197),取代了 DES (Data Encryption Standard),并将其命名为 AES。AES 具有出色的安全性、高效的性能和广泛的硬件及软件支持,已成为保护敏感数据的事实标准。 核心思想:AES 是一种对称密钥分组密码,它采用 SPN (Substitution-Permutation Network) 结构,通过反复迭代四种基本操作:SubBytes (替换)、ShiftRows (行移位)、MixColumns (列混合) 和 AddRoundKey (密钥加),将固定大小的明文块加密成相同大小的密文块,并支持 128、192 或 256 位密钥,从而提供强大的安全性。 一、引言:对称加密的王...
Substitution-box (S-box) 详解
在现代对称密钥密码算法,特别是分组密码 (Block Ciphers) 中,Substitution-box (S-box) 是一个至关重要的组件。S-box 的引入是为了提供算法的非线性性 (Non-linearity),这是确保密码安全性的核心要素之一。如果一个密码算法是线性的,攻击者可以利用线性代数方法轻松破解它。S-box 通过将输入位模式映射到不同的输出位模式,使得整个加密过程变得高度复杂和混沌,从而抵抗各种密码分析攻击。 核心思想:S-box 的核心作用是在分组密码中引入非线性变换,将输入位序列替换为与输入不呈线性关系的输出位序列,从而增强密码的混淆性 (confusion) 和扩散性 (diffusion),抵抗线性密码分析和差分密码分析等攻击。 一、什么是 S-box?1.1 定义Substitution-box (S-box),也称为替换盒,是一个查找表 (lookup table),它接受一个固定长度的输入位序列(通常是若干位),并生成一个不同或相同长度的输出位序列。S-box 的设计目的是实现非线性变换:它不是一个简单的位移、异或 (XOR) 或加法...
SHA-256 算法详解
SHA-256 (Secure Hash Algorithm 256-bit) 是密码学哈希函数家族 SHA-2 (Secure Hash Algorithm 2) 的成员。它是一个单向 (One-way) 函数,能够接收任意长度的输入数据,并生成一个固定长度为 256 位的(32 字节)哈希值(或称为“消息摘要”)。SHA-256 广泛应用于数字签名、证书验证、数据完整性检查、区块链技术(如比特币)等领域,是目前最受信任和广泛部署的哈希算法之一。 核心思想:SHA-256 通过将输入消息进行填充、分块、迭代压缩,最终生成一个固定长度的 256 位哈希值。其设计利用了一系列复杂的位运算(逻辑运算、循环移位),以确保哈希值的单向性、抗碰撞性、抗原像攻击和抗第二原像攻击,从而提供数据的完整性和身份验证。 一、加密哈希函数的基本特性在深入 SHA-256 之前,理解一个安全的加密哈希函数应具备的关键特性至关重要: 确定性 (Deterministic):相同的输入消息总是产生相同的哈希值。 计算效率 (Computational Efficiency):对于任意输入消息,计算...
SHA (Secure Hash Algorithm) 系列算法详解
SHA (Secure Hash Algorithm) 是一系列由美国国家安全局 (NSA) 设计,并由美国国家标准与技术研究院 (NIST) 发布的安全散列算法。与 MD5 类似,SHA 算法家族将任意长度的输入数据(消息)转换为固定长度的小型字节串,即消息摘要 (Message Digest) 或 哈希值 (Hash Value)。SHA 系列算法在密码学和信息安全领域扮演着至关重要的角色,广泛应用于数字签名、数据完整性校验、密码存储和区块链等场景。 核心思想:通过设计精密的数学和逻辑运算,确保输入数据的微小改变会导致输出哈希值的巨大、不可预测的变化(雪崩效应),并使其具有单向性和抗碰撞性,从而提供数据的完整性和认证功能。 一、SHA 算法家族概述SHA 家族包括以下主要算法版本: SHA-0:1993 年发布,很快发现安全漏洞,被 SHA-1 取代。 SHA-1:1995 年发布,输出 160 位哈希值。曾被广泛使用,但现在已被认为不安全。 SHA-2:2001 年发布,是一个包含多个变体的家族,包括 SHA-224, SHA-256, SHA-384, SHA-...
MD5 (Message-Digest Algorithm 5)算法详解
MD5 (Message Digest Algorithm 5) 是一种广泛使用的加密散列函数,由 Ronald Rivest 于 1991 年设计。它能够将任意长度的输入数据(通常称为“消息”或“原文”)通过哈希运算转换成一个固定长度的 128 位(16 字节)散列值,通常以 32 位十六进制字符串表示。MD5 的设计初衷是用于验证数据完整性,即确保数据在传输或存储过程中未被篡改。 重要安全提示: MD5 算法已被证实存在严重的碰撞漏洞。这意味着可以找到两个不同的输入数据,它们会产生完全相同的 MD5 散列值。因此,MD5 已不再被认为是安全的加密哈希函数,不应再用于需要密码学安全性的场景,如数字签名、密码存储(即使加盐也不推荐)或生成 SSL 证书。 它主要仍用于非安全敏感场景下的文件完整性校验和快速数据比对。 一、引言:哈希函数的基本概念哈希函数 (Hash Function),也称为散列函数,是一类将任意大小的数据映射到固定大小值的函数。在密码学领域,加密哈希函数 (Cryptographic Hash Function) 需要满足更严格的特性: 确定性 (De...
