3、密码学基础:对称加密与非对称加密原理、常见算法(DES、AES、RSA、ECC)、哈希函数与数字签名
密码学是信息安全技术的核心基石,它通过数学算法将可读的明文转换为不可读的密文,从而保障数据的机密性、完整性与真实性。本章将系统讲解对称加密与非对称加密的底层原理、典型算法(DES、AES、RSA、ECC)的工程特性,以及哈希函数与数字签名的协同工作机制。理解这些基础概念,是后续学习PKI体系、SSL/TLS协议、安全认证与数据防泄露技术的必要前提。
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则用于政府机密级数据保护。
3.1.3 案例拆解:数据库字段加密
场景:某电商平台需要加密存储用户手机号,要求查询时能精确匹配,且加密性能不能影响接口响应时间(P99 < 200ms)。
方案分析:手机号属于敏感个人信息,需加密存储。但业务方需要按手机号精确查询用户,若直接使用AES加密,密文不可索引。解决方案是采用AES-GCM加密 + 哈希索引的双字段设计:
- 使用AES-256-GCM加密手机号,生成密文和认证标签,存储于encrypted_phone字段。
- 同时计算手机号的HMAC-SHA256值(使用独立密钥),存储于phone_hash字段用于索引查询。
- 查询时先计算输入手机号的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等场景。
3.2.3 案例拆解:HTTPS握手过程中的密钥协商
场景:用户访问银行网站,浏览器与服务器建立TLS连接,需要安全地协商出会话密钥。
过程分析:
- 服务器向浏览器发送数字证书(包含服务器公钥,由CA签名)。
- 浏览器验证证书合法性后,生成一个随机数作为预主密钥(Pre-Master Secret)。
- 浏览器使用服务器公钥加密该随机数并发送给服务器。
- 服务器使用私钥解密得到预主密钥。
- 双方基于预主密钥通过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)结合哈希函数与非对称加密,提供完整性、真实性和不可否认性三重保障。签名流程如下:
- 发送方计算消息M的哈希值H(M)。
- 使用私钥对哈希值进行加密,生成签名S = E_priv(H(M))。
- 将消息M和签名S一起发送给接收方。
- 接收方使用发送方的公钥解密签名,得到哈希值H'(M)。
- 接收方重新计算消息M的哈希值H(M),若H'(M) = H(M),则签名验证通过。
数字签名与加密不同:签名使用私钥生成、公钥验证,而加密使用公钥加密、私钥解密。签名验证通过意味着:消息确实来自声称的发送方(真实性)、消息未被篡改(完整性)、发送方无法否认发送行为(不可否认性)。
3.3.3 案例拆解:软件发布完整性验证
场景:某软件公司发布安装包,需要确保用户下载的文件未被恶意篡改。
实施方案:
- 开发团队计算安装包的SHA-256哈希值。
- 使用团队私钥(RSA-2048)对哈希值进行签名,生成.sig签名文件。
- 将安装包、签名文件和团队公钥证书一同发布在官网。
- 用户下载后,使用公钥验证签名,再计算安装包哈希值比对。
攻击场景分析:若攻击者篡改安装包并植入恶意代码,由于攻击者没有私钥,无法生成有效签名。用户验证签名时会失败,从而发现文件被篡改。即使攻击者同时替换了公钥,由于公钥证书由CA签发,浏览器会警告证书无效。
3.3.4 常见误区与总结
- 误区一:使用MD5或SHA-1进行安全校验。这些算法已被证明存在碰撞攻击,必须使用SHA-256及以上强度算法。
- 误区二:混淆加密与哈希。加密是可逆的,哈希是不可逆的;哈希不提供机密性保护。
- 误区三:在密码存储中使用明文哈希。应使用加盐哈希(如bcrypt、scrypt、Argon2)来抵御彩虹表攻击。
3.4 混合加密体系与工程实践
实际信息系统几乎从不单独使用某一种密码技术,而是采用混合加密方案:利用非对称加密安全地传递对称密钥,利用对称加密高效地加密业务数据,利用哈希函数校验数据完整性,利用数字签名提供认证与不可否认性。HTTPS、SSH、IPSec等协议均采用此设计模式。
以HTTPS为例,完整的安全链路为:CA证书验证(非对称)→ 会话密钥协商(非对称加密)→ 业务数据加密(AES-GCM)→ 消息认证(HMAC)→ 完整性校验(SHA-256)。每一层技术各司其职,共同构建纵深防御体系。
在工程实践中,密码算法的选择应遵循以下原则:优先使用经过广泛验证的标准算法(AES、RSA、ECC、SHA-256),避免自研算法;关注算法的最新安全动态,及时迁移到更安全的版本;密钥管理是密码体系安全性的核心,应使用KMS或HSM进行集中管理;定期进行安全审计和密钥轮换,确保长期安全性。