对称算法

加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加密解密密钥是相同的。这些算法也叫秘密密钥算法单密钥算法,它要求发送者和接受者在安全通信之前,商定一个密钥。

对称算法的安全性依赖于密钥,泄露密钥就意味着任何人都能对消息进行加密解密。

分组算法

对数据块运算,如果数据长度不够一块,则需要填充;加密之后数据长度可能会变长,某些场景下不适用;需要对数据进行缓存,某些场景下不适用。

分组算法的工作模式

  • 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 发送信息

  1. A 使用 B 的公钥对信息加密,生成密文;
  2. A 将密文发送给 B;
  3. B 接收到来自 A 的密文后,使用自己的私钥对密文进行解密,获取信息;

私钥签名公钥验证签名

只有持有私钥的人能签名,任何人都知道公钥,都可以验证签名,密钥管理非常简单,通常用于验证数据来源并对数据进行完整性保护,实际场景如下:A 要向 B 发送信息

  1. A 先对信息进行哈希运算得到 hash 值,称为摘要,命名为 h0;
  2. A 用自己的私钥对摘要进行加密,生成数字签名
  3. A 将数字签名加在信息后面,一起发送给 B;
  4. B 收到信息后,用 A 的公钥对数字签名解密,解密成功则代表信息确实来自 A,失败则说明有人冒充 A 发送该信息;
  5. B 对信息进行哈希运算得到 hash 值,命名 h1;
  6. B 对比 h1 和 h0,一致则说明邮件未被篡改。

特点和应用场景

  • 用法独特,密钥管理简单;

  • 运算复杂,速度慢,功耗高,很多场景不适用;

  • 典型用法:与对称算法搭配使用

    1. A 使用 B的公钥加密一个对称算法的密钥 K,发送给 B;
    2. B 使用自己的私钥解密,获得密钥 K;
    3. 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