对称加密与非对称加密
- 定义:
- 对称加密:使用单一密钥进行加密和解密,加密方和解密方共享同一密钥。
- 非对称加密:使用一对密钥(公钥和私钥),公钥加密的数据只能由对应的私钥解密,反之亦然。
- 核心区别:
- 对称加密速度快但密钥分发困难;非对称加密安全但计算开销大。
- 应用:
- 对称加密:数据传输(如 HTTPS 的会话数据)。
- 非对称加密:密钥交换、数字签名(如 TLS 证书验证)。
核心点
- 对称加密依赖共享密钥,适合大数据加密;非对称加密基于密钥对,适合安全分发和认证。
1. 对称加密与非对称加密的区别
以下从多个维度对比对称加密和非对称加密:
特性 | 对称加密 | 非对称加密 |
---|---|---|
密钥数量 | 单一密钥(加密和解密相同) | 一对密钥(公钥加密,私钥解密,或反之) |
密钥管理 | 需安全分发密钥,易泄露 | 公钥公开,私钥保密,无需分发公钥 |
速度 | 快,适合大数据加密 | 慢,计算复杂,适合小数据或密钥交换 |
算法示例 | AES、DES、3DES、ChaCha20 | RSA、ECC、DSA、DH |
安全性 | 依赖密钥保密,安全性较低 | 基于数学难题(如大整数分解),安全性较高 |
用途 | 数据传输、文件加密 | 密钥交换、数字签名、身份认证 |
计算开销 | 低,硬件加速支持(如 AES-NI) | 高,涉及复杂运算(如模幂) |
密钥长度 | 较短(如 AES-128、AES-256) | 较长(如 RSA-2048、ECC-256) |
2. 详细说明
(1) 对称加密
- 工作原理:
- 使用同一密钥对明文加密生成密文,解密时用相同密钥还原。
- 加密/解密算法高效,基于位运算或替换。
- 优点:
- 速度快:算法简单,适合加密大文件或流数据。
- 低开销:计算资源需求小,硬件优化普遍。
- 缺点:
- 密钥分发问题:密钥需通过安全通道共享,易被拦截。
- 密钥管理复杂:多方通信需为每对生成唯一密钥(n 方需 n*(n-1)/2 个密钥)。
- 示例:
// Java AES 加密示例
SecretKey key = new SecretKeySpec("16-byte-key".getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal("Hello".getBytes());
- 场景:
- HTTPS 的会话数据加密。
- 磁盘加密(如 BitLocker)。
(2) 非对称加密
- 工作原理:
- 公钥和私钥成对生成,公钥加密的数据只能由私钥解密,私钥加密的数据只能由公钥解密。
- 基于数学难题(如 RSA 的大整数分解,ECC 的椭圆曲线离散对数)。
- 优点:
- 安全性高:公钥可公开,无需安全分发。
- 支持认证:私钥签名,公钥验证(如数字签名)。
- 缺点:
- 速度慢:算法复杂,加密大数据效率低。
- 密钥长度长:如 RSA 2048 位,增加存储和计算成本。
- 示例:
// Java RSA 加密示例
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair pair = keyGen.generateKeyPair();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pair.getPublic());
byte[] encrypted = cipher.doFinal("Hello".getBytes());
- 场景:
- TLS 握手中的密钥交换。
- SSH 认证、PGP 邮件加密。
3. 结合使用(混合加密)
- 背景:
- 对称加密速度快但密钥分发不安全;非对称加密安全但速度慢。
- 实际应用(如 HTTPS)结合两者,称为混合加密。
- 过程(以 HTTPS 为例):
- 非对称加密交换密钥:
- 客户端用服务器公钥加密对称密钥(如 AES 密钥)。
- 服务器用私钥解密获取对称密钥。
- 对称加密传输数据:
- 双方使用对称密钥加密通信内容。
- 优势:
- 结合对称加密的高效和非对称加密的安全性。
- 示例:
- TLS 握手:客户端生成预主密钥,用 RSA 或 ECDH 交换,生成会话密钥(AES)。
4. 使用场景
- 对称加密:
- 文件加密:如 AES 加密数据库备份。
- 网络传输:HTTPS 的数据加密、VPN 隧道。
- 非对称加密:
- 数字签名:验证软件包完整性(如 JAR 签名)。
- 密钥交换:TLS 握手、SSH 登录。
- 认证:X.509 证书验证服务器身份。
5. 面试角度
- 问“区别”:
- 提密钥数量、速度、安全性、用途,表格对比。
- 问“场景”:
- 对称:大数据加密;非对称:密钥交换、签名。
- 问“混合加密”:
- 提 HTTPS 的 TLS 握手,结合对称和非对称。
- 问“算法”:
- 对称:AES、ChaCha20;非对称:RSA、ECC。
6. 总结
对称加密使用单一密钥,速度快但密钥分发不安全,适合大数据加密(如 AES 加密 HTTPS 数据)。非对称加密使用公钥和私钥,安全性高但速度慢,适合密钥交换和认证(如 RSA 签名)。两者在 HTTPS 等场景中结合使用,通过非对称加密分发对称密钥,再用对称加密传输数据。面试可提对比表格、混合加密流程或代码示例,清晰展示理解。