密码应用基础知识
对称算法
加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加密解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接受者在安全通信之前,商定一个密钥。
对称算法的安全性依赖于密钥,泄露密钥就意味着任何人都能对消息进行加密解密。
分组算法
对数据块运算,如果数据长度不够一块,则需要填充;加密之后数据长度可能会变长,某些场景下不适用;需要对数据进行缓存,某些场景下不适用。
分组算法的工作模式
- ECB 模式,最简单,加密长数据有风险;
- CBC 模式,最常用的工作模式,但本身并没有什么优势,单纯因为过去用的人多,属于历史遗留问题;
- OFB 模式,效果类似于流密码,适合处理音视频数据;
- CFB 模式,效果类似于流密码,几乎没人用;
- CTR 模式,可并行加速,只要有条件就推荐使用,广泛应用于 ATM 网络安全和 IPSec 应用中;
- GCM、CCM 认证加密模式,既能加密又能防篡改防重放;
- XTS 存储加密模式,适合随机读写模式;
流密码算法
对数据一位一位的运算,不需要填充;加密之后数据长度不变;不需要对数据进行缓存。
常见对称算法
商用算法(国产的)
-
SM1,保密算法,常用于特殊行业,如社保卡、电力行业;
-
SM4,公开算法,最常用的商密对称算法;
-
SM7,保密算法,轻量级算法,RFID 电子标签常用,如地铁卡;
-
ZUC,流密码算法,4G 通信可用;
国际算法(国际的)
-
AES,应用最广泛的算法,设计精良;
-
DES,历史遗留算法,强度有限,不推荐;
-
RC4,历史遗留算法,强度有限,不推荐;
-
MD5,历史遗留算法,不是对称算法;
-
Snow3G,流密码算法,3G、4G 通信使用;
对称算法的特点
运算速度快,适合对大量数据进行加密解密,以及完整性保护(防篡改);需要解决密钥管理问题——如何确保通信双方使用相同的密钥进行加解密;
非对称算法
指一个加密算法的加密密钥和解密密钥是不一样的,或者来说不能由其中一个密钥推导出另一个密钥。它是用两个数学相关的密钥对信息进行编码,在此系统中,其中一个密钥叫公钥,可随意发给期望同密钥持有者进行安全通信的人。公钥用于对信息进行加密。第二个密钥是私钥,属于密钥持有者,此人要安全保存私有密钥。密钥持有者用私钥对收到的加密信息进行解密。
公钥加密私钥解密
任何人都知道公钥,都可以做加密运算,只有持有私钥的人能解密,密钥管理非常简单,实际场景如下:A 要向 B 发送信息
- A 使用 B 的公钥对信息加密,生成密文;
- A 将密文发送给 B;
- B 接收到来自 A 的密文后,使用自己的私钥对密文进行解密,获取信息;
私钥签名公钥验证签名
只有持有私钥的人能签名,任何人都知道公钥,都可以验证签名,密钥管理非常简单,通常用于验证数据来源并对数据进行完整性保护,实际场景如下:A 要向 B 发送信息
- A 先对信息进行哈希运算得到 hash 值,称为摘要,命名为 h0;
- A 用自己的私钥对摘要进行加密,生成数字签名;
- A 将数字签名加在信息后面,一起发送给 B;
- B 收到信息后,用 A 的公钥对数字签名解密,解密成功则代表信息确实来自 A,失败则说明有人冒充 A 发送该信息;
- B 对信息进行哈希运算得到 hash 值,命名 h1;
- B 对比 h1 和 h0,一致则说明邮件未被篡改。
特点和应用场景
-
用法独特,密钥管理简单;
-
运算复杂,速度慢,功耗高,很多场景不适用;
-
典型用法:与对称算法搭配使用
- A 使用 B的公钥加密一个对称算法的密钥 K,发送给 B;
- B 使用自己的私钥解密,获得密钥 K;
- A 和 B 使用密钥 K 进行对称算法的加密、解密;
-
存在公钥被冒用的风险,比如 A 和 B 通信时,B 的公钥被替换成 C 的公钥
- A 想使用 B 的公钥加密一个对称算法的密钥 K,却被替换成了 C 的公钥,加密后发送给了 B;
- B 使用自己的私钥解密,获得密钥乱码;
- C 使用自己的私钥解密,获得密钥 K;
- A 和 B 使用密钥 K 进行对称算法的加解密,通信失败;
- C 截获 A 发送的信息,使用密钥 K 解密获得正确的明文;
常见非对称算法
商用算法
- SM2,公开算法,国内最常用
- SM9,公开算法,“基于标识的非对称算法”,特殊用处,运算复杂;
国际算法
- RSA,应用广泛,但性能并不好,同等效果下密钥长度是 SM2 的 8 倍;
- ECC,未来会逐渐取代 RSA,与 SM2 原理一致;
摘要算法
也称为杂凑算法、哈希算法,是一种单向算法,要由散列函数输出的结果,回推输入的资料是什么,是非常困难的。这种散列函数的输入资料,通常被称为讯息,而它的输出结果,经常被成为讯息摘要或摘要,也被称为数字指纹。
- 不需要密钥参与运算,因此不具备加密解密能力,不能保护数据的机密性;
- 杂凑算法也被称为“哈希(Hash)算法”;
- 把任意长度的数据变为固定长度的“杂凑值”;
- 常与非对称算法搭配,用于降低数字签名运算的数据长度;
- 在密码应用中不起眼,但其“单向性”有许多妙用;
常见杂凑算法
商用算法
- SM3,公开算法;
国际算法
- SHA3,性能出色,应用较少;
- SHA256,未来会逐渐成为主流;
- SHA1,曾经是主流算法,目前被认为强度有限,慎用;
总结
对称算法
- 1 个密钥,大量数据加解密与完整性保护;
- 典型算法 SM4/AES;
非对称算法
- 2 个密钥,数字签名或公钥加密分发对称密钥;
- 典型算法 SM2/ECC
杂凑算法
- 0 个密钥,单向性使其适用于部分特殊场景,如验证消息完整性、辅助数字签名;
- 典型算法 SM3/SHA256
推荐阅读
- 《应用密码学:协议、算法与C源程序》,作者:(美)Bruce Schneier