Skip to content

00_总纲

一、 密码学的核心演进与分类

密码类型 代表算法/机制 核心原理与特征 历史局限性与突破
古典密码 恺撒、维吉尼亚 基于字母表的移位与多表替换 易受频率分析法攻击,密钥空间极小
机械密码 Enigma 密码机 齿轮转动改变电路,Message Key 实现动态偏移 机械结构导致双步进等规律,最终被图灵机攻破
对称加密 DES, AES, RC4 混淆与扩散,加解密使用同一密钥 速度极快,但无法安全地在公开信道分发密钥
非对称加密 RSA, ECC 基于数学难题,公钥加密、私钥解密 解决了密钥分发与数字签名问题,但运算极慢

二、 数学基石:从模运算到有限域

现代密码学早已脱离了单纯的字符替换,完全建立在严密的抽象代数与数论基础之上。

  • 整数与模运算: 裴蜀定理与扩展欧几里得算法是求解乘法逆元的关键,这不仅是破解古典仿射密码的工具,更是构建 RSA 算法(求解私钥指数)的核心基石。

  • 有限域 (Galois Field): 现代密码学摒弃了传统连续实数,建立在离散域之上。AES 依赖于 \(GF(2^8)\) 及不可约多项式 \(x^8 + x^4 + x^3 + x + 1\) 保证运算不溢出且可逆;而 ECC 则依赖于素数域 \(GF(p)\) 进行点运算。

  • 计算复杂性(单向陷门函数): 密码学的安全屏障在于“正向计算容易,逆向破解极难”。RSA 依赖于大整数分解问题,而 ECC 依赖于椭圆曲线离散对数问题 (ECDLP)。

三、 信息的混淆与扩散:对称加密体制

对称加密旨在将明文数据快速转换为密文,分为流密码与分组密码两大阵营。

  • 流密码 (RC4): 通过密钥调度 (KSA) 和伪随机生成 (PRGA) 产生密钥流,与明文逐字节异或。加密解密使用相同函数,没有误差传播。

  • 分组密码工作模式: 分组密码每次只能处理固定长度数据。ECB 模式相互独立但会泄漏数据模式;CBC 模式引入初始向量 (IV) 进行链式异或,最为常用;CFB 模式则将分组密码转化为流密码形态,具备错误自恢复能力。

核心分组密码算法对比:

比较维度 DES (数据加密标准) AES (高级加密标准)
网络结构 Feistel 网络 (仅右半区参与非线性运算) 替代-置换网络 (SPN,全矩阵参与运算)
分组/密钥长度 64位明文 / 56位有效密钥 128位明文 / 128, 192, 256位密钥
核心非线性部件 S盒 (6位输入映射为4位输出) S盒 (基于 \(GF(2^8)\) 乘法逆元与仿射变换)
安全现状 密钥过短,易被暴力破解,3DES 效率低下 目前最安全且高效的对称加密行业标准

四、 信任的建立与密钥分发:非对称加密体制

非对称加密不仅用于数据保密,更重要的是解决了身份认证与防篡改(数字签名)。

  • RSA 算法: 基于欧拉定理。加密公式为 \(c \equiv m^e \pmod n\),解密公式为 \(m \equiv c^d \pmod n\)。加解密过程不直接用到质因子,安全性极高。

  • ECC 椭圆曲线密码: 基于点加法与标量乘法的交换律。发送方与接收方利用临时密钥与长期公私钥,可以在不泄露私钥的前提下独立计算出共享秘密点。

  • 机制对比: 相比于 RSA,ECC 能够在提供相同安全级别的情况下使用极短的密钥(例如 256 位的 ECC 安全性媲美 3072 位的 RSA),是移动互联网时代的趋势。

  • 数字签名机制: 利用“私钥加密(签名)、公钥解密(验签)”的特性,结合哈希算法生成消息摘要,接收方通过比对摘要来验证信息的完整性与来源,如 ECDSA 与 RSA 签名。

五、 数据指纹:单向散列 (Hash) 函数

哈希函数不需要密钥,其作用是将任意长度的明文“有损压缩”为固定长度的摘要,用于验证数据完整性。

  • 分块与填充机制: MD5 与 SHA-1 均采用固定大小的数据块(64 字节)进行迭代运算。当数据长度不足时,需按照严密的规则(补 0x80、补零、追加原始位数)进行填充。

  • MD5: 输出 128 位摘要。极易遭受碰撞攻击,黑客可通过彩虹表(空间换时间算法,构建哈希链)进行逆向破解。

  • SHA-1: 输出 160 位摘要。计算过程中严格遵循大端序,内部需扩展 80 个变量并进行四轮混合运算。

六、 密码学在工程中的落地与实践

密码学算法在理论上完美,但在代码实现(如 OpenSSL)时需要兼顾性能与安全工程学。

  • 混合加密架构: 工业界普遍采用 AES 等对称算法加密海量业务数据(速度快),然后使用 RSA/ECC 非对称算法加密 AES 的密钥(解决分发问题),这被称为数字信封技术。

  • 内存与大数运算管理: 在 C 语言生态中,非对称加密涉及几百位的整数,必须利用 BIGNUM 与 BN_CTX 结构进行内存调度与运算。