3、密码学基础:对称加密与非对称加密原理、常见算法(DES、AES、RSA、ECC)、哈希函数与数字签名

密码学是信息安全技术的核心基石,它通过数学算法将可读的明文转换为不可读的密文,从而保障数据的机密性、完整性与真实性。本章将系统讲解对称加密与非对称加密的底层原理、典型算法(DES、AES、RSA、ECC)的工程特性,以及哈希函数与数字签名的协同工作机制。理解这些基础概念,是后续学习PKI体系、SSL/TLS协议、安全认证与数据防泄露技术的必要前提。

密码学基础体系与核心算法关系图 对称加密 加密密钥 = 解密密钥 典型算法:DES / 3DES / AES 特点:速度快、适合大数据量 密钥分发与管理是难点 代表:AES-128/192/256 非对称加密 公钥加密 / 私钥解密 典型算法:RSA / ECC / ElGamal 特点:安全性高、密钥管理简单 计算开销大、适合小数据量 代表:RSA-2048 / ECC-256 哈希函数 任意长度输入 → 固定长度输出 典型算法:MD5 / SHA-1 / SHA-256 特性:单向性、抗碰撞性 代表:SHA-256(256位摘要) 数字签名 私钥签名 + 公钥验签 提供:完整性 + 真实性 + 不可否认性 典型应用:代码签名、电子合同 代表:RSA签名 / ECDSA 密钥交换 公钥分发 摘要输入 混合加密(HTTPS) 非对称加密传递会话密钥 对称加密加密业务数据 PKI / 证书体系 CA签发数字证书 绑定公钥与身份信息 核心关系:对称加密解决效率,非对称加密解决密钥分发,哈希保障完整性,数字签名提供认证与不可否认 实际系统(如TLS 1.3)通常组合使用上述技术

3.1 对称加密:原理与典型算法

3.1.1 核心原理

对称加密(Symmetric Cryptography)是指加密和解密过程使用同一把密钥的加密体制。发送方使用密钥K将明文P加密为密文C,接收方使用相同的密钥K将密文C解密还原为明文P。其安全性完全依赖于密钥的保密性,一旦密钥泄露,整个加密体系即告失效。

对称加密的数学表达为:C = E_K(P),P = D_K(C)。其中E为加密函数,D为解密函数。由于加解密使用相同密钥,算法设计上通常追求高吞吐量和低计算开销,因此对称加密在处理大规模数据时具有显著性能优势。

3.1.2 常见算法对比

算法 密钥长度 分组大小 安全性状态 典型应用场景
DES 56位 64位 已破解(1999年) 历史遗留系统,不推荐使用
3DES 112/168位 64位 逐渐淘汰 金融IC卡、旧版支付系统
AES 128/192/256位 128位 安全(当前标准) HTTPS、磁盘加密、WiFi加密

DES(Data Encryption Standard)诞生于1977年,采用Feistel网络结构,通过16轮迭代的置换、代换和异或运算实现加密。其56位密钥在现代计算能力下已可被暴力破解,1999年EFF在22小时内即破解了DES密钥。DES的64位分组大小也使其容易受到生日攻击等密码分析。

AES(Advanced Encryption Standard)于2001年由NIST正式发布,采用SPN(Substitution-Permutation Network)结构,支持128位分组和128/192/256位密钥。AES在硬件和软件实现上均表现出极高的效率,目前尚未发现有效的攻击方法,是国际公认的对称加密标准。AES-128的安全强度已满足绝大多数商业应用需求,AES-256则用于政府机密级数据保护。

工程经验:在实际系统中,对称加密通常与分组模式配合使用。ECB模式不安全(相同明文产生相同密文),推荐使用GCM或CTR模式,它们能同时提供机密性和完整性校验。

3.1.3 案例拆解:数据库字段加密

场景:某电商平台需要加密存储用户手机号,要求查询时能精确匹配,且加密性能不能影响接口响应时间(P99 < 200ms)。

方案分析:手机号属于敏感个人信息,需加密存储。但业务方需要按手机号精确查询用户,若直接使用AES加密,密文不可索引。解决方案是采用AES-GCM加密 + 哈希索引的双字段设计:

  1. 使用AES-256-GCM加密手机号,生成密文和认证标签,存储于encrypted_phone字段。
  2. 同时计算手机号的HMAC-SHA256值(使用独立密钥),存储于phone_hash字段用于索引查询。
  3. 查询时先计算输入手机号的HMAC值,通过索引定位候选记录,再解密验证。

结果:加密解密耗时约0.5ms/次,满足性能要求;即使数据库泄露,攻击者无法从密文或哈希值还原手机号。该方案已在生产环境稳定运行两年,未发生数据泄露事件。

3.1.4 常见误区与总结

  • 误区一:认为密钥越长越安全。实际上,AES-128已足够抵御暴力破解,密钥管理流程的安全性往往比密钥长度更重要。
  • 误区二:将ECB模式用于生产环境。ECB模式会泄露明文的结构信息,必须使用CBC、GCM等安全模式。
  • 误区三:硬编码密钥在代码中。密钥应存储在HSM、KMS或环境变量中,并定期轮换。

3.2 非对称加密:原理与典型算法

3.2.1 核心原理

非对称加密(Asymmetric Cryptography)使用一对数学相关的密钥:公钥(Public Key)和私钥(Private Key)。公钥可以公开分发,私钥必须严格保密。用公钥加密的数据只能用对应的私钥解密,反之亦然。这一特性解决了对称加密中密钥分发的难题。

非对称加密的安全性基于数学难题,如大整数因子分解(RSA)或椭圆曲线离散对数问题(ECC)。其计算复杂度远高于对称加密,因此通常只用于加密少量关键数据(如会话密钥、数字签名),而非直接加密大体积业务数据。

3.2.2 常见算法对比

算法 数学基础 密钥长度 安全强度 性能特点
RSA 大整数因子分解 2048/3072/4096位 2048位≈112位对称密钥 加密慢,签名验证较快
ECC 椭圆曲线离散对数 256/384/521位 256位≈128位对称密钥 密钥短、计算快、带宽占用低

RSA是最经典的非对称算法,由Rivest、Shamir和Adleman于1977年提出。其安全性依赖于大整数因子分解的困难性。RSA-2048目前仍被广泛使用,但NIST已建议在2030年前迁移到RSA-3072或更高强度。RSA的典型应用包括HTTPS证书、SSH认证、电子邮件加密(PGP)等。

ECC(Elliptic Curve Cryptography)基于椭圆曲线上的点群运算,在相同安全强度下,ECC密钥长度远短于RSA。例如,ECC-256与RSA-3072提供相当的安全级别,但ECC密钥更短、计算更快、存储和传输开销更小。ECC已成为现代密码学的首选,广泛应用于区块链(ECDSA签名)、移动设备安全、TLS 1.3等场景。

安全强度对照:ECC-256 ≈ RSA-3072 ≈ AES-128;ECC-384 ≈ RSA-7680 ≈ AES-192;ECC-521 ≈ RSA-15360 ≈ AES-256。在同等安全级别下,ECC密钥长度仅为RSA的1/6至1/10。

3.2.3 案例拆解:HTTPS握手过程中的密钥协商

场景:用户访问银行网站,浏览器与服务器建立TLS连接,需要安全地协商出会话密钥。

过程分析:

  1. 服务器向浏览器发送数字证书(包含服务器公钥,由CA签名)。
  2. 浏览器验证证书合法性后,生成一个随机数作为预主密钥(Pre-Master Secret)。
  3. 浏览器使用服务器公钥加密该随机数并发送给服务器。
  4. 服务器使用私钥解密得到预主密钥。
  5. 双方基于预主密钥通过PRF函数派生出会话密钥,后续通信改用AES对称加密。

关键点:非对称加密仅用于传输一个256位的随机数,传输完成后即被丢弃。实际业务数据全部使用AES-GCM加密,兼顾安全性与性能。整个握手过程在TLS 1.3中仅需1-RTT(往返时延),大幅提升了连接建立速度。

3.2.4 常见误区与总结

  • 误区一:认为公钥加密比对称加密更安全。实际上,两者安全性取决于密钥长度和算法实现,非对称加密的优势在于密钥管理而非算法强度。
  • 误区二:使用RSA直接加密大数据。RSA加密有长度限制(RSA-2048最多加密245字节),且性能差,应使用混合加密方案。
  • 误区三:忽略ECC的曲线选择。不同椭圆曲线参数安全性差异巨大,应使用NIST P-256、Curve25519等经过充分验证的标准曲线。

3.3 哈希函数与数字签名

3.3.1 哈希函数核心原理

哈希函数(Hash Function)将任意长度的输入数据映射为固定长度的输出值(摘要)。理想的哈希函数具有以下特性:

  • 单向性:由哈希值无法反推出原始数据。
  • 抗碰撞性:难以找到两个不同输入产生相同哈希值。
  • 雪崩效应:输入微变,输出剧变。
  • 高效性:计算速度快,适合处理大数据。

常见哈希算法包括MD5(128位,已不安全)、SHA-1(160位,已破解)、SHA-256(256位,安全)、SHA-3(最新标准)。哈希函数本身不提供机密性,但它是数据完整性校验、密码存储、数字签名等应用的基础组件。

3.3.2 数字签名原理与流程

数字签名(Digital Signature)结合哈希函数与非对称加密,提供完整性、真实性和不可否认性三重保障。签名流程如下:

  1. 发送方计算消息M的哈希值H(M)。
  2. 使用私钥对哈希值进行加密,生成签名S = E_priv(H(M))。
  3. 将消息M和签名S一起发送给接收方。
  4. 接收方使用发送方的公钥解密签名,得到哈希值H'(M)。
  5. 接收方重新计算消息M的哈希值H(M),若H'(M) = H(M),则签名验证通过。

数字签名与加密不同:签名使用私钥生成、公钥验证,而加密使用公钥加密、私钥解密。签名验证通过意味着:消息确实来自声称的发送方(真实性)、消息未被篡改(完整性)、发送方无法否认发送行为(不可否认性)。

3.3.3 案例拆解:软件发布完整性验证

场景:某软件公司发布安装包,需要确保用户下载的文件未被恶意篡改。

实施方案:

  1. 开发团队计算安装包的SHA-256哈希值。
  2. 使用团队私钥(RSA-2048)对哈希值进行签名,生成.sig签名文件。
  3. 将安装包、签名文件和团队公钥证书一同发布在官网。
  4. 用户下载后,使用公钥验证签名,再计算安装包哈希值比对。

攻击场景分析:若攻击者篡改安装包并植入恶意代码,由于攻击者没有私钥,无法生成有效签名。用户验证签名时会失败,从而发现文件被篡改。即使攻击者同时替换了公钥,由于公钥证书由CA签发,浏览器会警告证书无效。

3.3.4 常见误区与总结

  • 误区一:使用MD5或SHA-1进行安全校验。这些算法已被证明存在碰撞攻击,必须使用SHA-256及以上强度算法。
  • 误区二:混淆加密与哈希。加密是可逆的,哈希是不可逆的;哈希不提供机密性保护。
  • 误区三:在密码存储中使用明文哈希。应使用加盐哈希(如bcrypt、scrypt、Argon2)来抵御彩虹表攻击。
安全警示:2020年SHA-1碰撞攻击已实际可行(SHAttered攻击),任何依赖SHA-1的签名或完整性校验都应立即迁移至SHA-256或SHA-3。同时,MD5已被完全攻破,仅可用于非安全场景(如文件去重)。

3.4 混合加密体系与工程实践

实际信息系统几乎从不单独使用某一种密码技术,而是采用混合加密方案:利用非对称加密安全地传递对称密钥,利用对称加密高效地加密业务数据,利用哈希函数校验数据完整性,利用数字签名提供认证与不可否认性。HTTPS、SSH、IPSec等协议均采用此设计模式。

以HTTPS为例,完整的安全链路为:CA证书验证(非对称)→ 会话密钥协商(非对称加密)→ 业务数据加密(AES-GCM)→ 消息认证(HMAC)→ 完整性校验(SHA-256)。每一层技术各司其职,共同构建纵深防御体系。

在工程实践中,密码算法的选择应遵循以下原则:优先使用经过广泛验证的标准算法(AES、RSA、ECC、SHA-256),避免自研算法;关注算法的最新安全动态,及时迁移到更安全的版本;密钥管理是密码体系安全性的核心,应使用KMS或HSM进行集中管理;定期进行安全审计和密钥轮换,确保长期安全性。