公司密评培训 - 2023/09/09 第一课

2023-09-07
2023-09-09
8 min read
Hits

  本文是公司质量部杨总组织的密评培训第二课《密码算法》的讲义,著作权归属于杨总,博主仅为适配 post 修改格式。

XOR 异或

  由于后续的分组模式都涉及到 XOR,因此简单介绍下 XOR。异或的标识符号为⊕。详细的内容不多介绍,仅需要知道如下规则即可:对同一个比特序列进行两次 XOR 之后就会回到最初的状态。

$$A⊕B=C$$

$$C⊕B=A$$

密码杂凑算法

  密码杂凑算法对任意长度的消息进行压缩,输出定长的消息摘要或杂凑值。

  杂凑算法具有以下特质:

  • 抗原像攻击(单向性):给定杂凑值 h,找到消息 M 使得 h=H(M) 是困难的。
  • 抗第二原像攻击(弱抗碰撞性):给定消息 M1,找到另外一个消息 M2 使得 H(M2)=H(M1) 是困难的。
  • 强抗碰撞性:找到两个消息 M1 和 M2(M1 不同于 M2),使得 H(M2)=H(M1) 是困难的。

  常见的杂凑算法结构

  1. M-D结构:MD5、SHA-1、SHA-2、SM3
  2. 海绵结构:SHA-3

  密码杂凑算法的直接应用是产生消息摘要。进一步与密钥一同使用保护消息的完整性,与公钥密码算法一同使用产生数字签名。

算法结构输入消息长度输出长度分组长度迭代次数密码安全强度
SM3M-D<$2^{64}$25651264128
MD5M-D不限制12851264不安全
SHA-1M-D<$2^{64}$1605128060
SHA-224M-D<$2^{64}$22451264112
SHA-256M-D<$2^{64}$25651264128
SHA-384M-D<$2^{128}$384102480192
SHA-512M-D<$2^{128}$512102480256
SHA3-224海绵不限制22414424112
SHA3-256海绵不限制25613624128
SHA3-384海绵不限制38410424192
SHA3-512海绵不限制5127224256

公钥密码算法

  公钥密码算法很好的解决了对称密码算法中存在的密钥管理难题。公钥密码算法包括公钥加密和私钥签名两种主要用途。公钥和私钥是密切关联的,从私钥可以推导出公钥,但从公钥推导出私钥在计算上是不可行的。

  公钥加密算法使用公钥对数据进行加密,使用私钥对数据进行解密。

  私钥签名算法使用私钥对消息进行签名,使用公钥对签名进行验证。

  常见的公钥密码体制:

  • RSA、RABin:基于大整数因子分解困难性
  • ElGamal:基于有限域离散对数问题困难性
  • SM2、SM9、ECDH、ECDSA、ECC:椭圆曲线上的离散对数问题
  • 后量子密码:基于格的密码

SM2 算法的安全性:

  • 算法具备单向性
  • 算法产生的明文和密文具备不可区分性
  • 密文具备不可延展性
密钥长度密码安全强度
ECC算法RSA算法
11251256
160102480
2242048112
2563072128
3847680192
51215360256

对称密码算法

序列密码(流密码)

  将密钥和初始向量作为输入,通过密钥流生成算法输出密钥流(也称扩展密钥序列),然后将明文序列和密钥流进行异或,得到密文序列。

  • ZUC
  • SNOW(SNOW2.0、SNOW 3G)
  • RC4

  优点:密钥流可以在明文序列到来之前生成,执行速度快,计算资源的占用较少,便于硬件实施,常用于功耗或计算能力受限的系统中,没有或只有有限的错误传播。可用于实时性要求高的场景

  缺点:低扩散、插入及修改的不敏感性

算法密钥长度(bit)种子密钥(bit)初始向量(bit)密钥流(bit)
ZUC12812812832
SNOW 3G12812812832

ZUC 算法分为加密算法 128-EEA3 和完整性算法 128-EIA3。

SNOW 算法分为加密算法 UEA2 和完整性算法 UIA2。

ZUC 算法由线性反馈移位寄存器(LFSR)、比特重组(BR)、非线性函数 F 三个基本部分组成。

分组密码(块密码)

  首先对明文消息根据分组大小进行分组,再将明文分组、密钥和初始向量(如有)一起作为输入,通过分组加密算法直接输出密文分组。

  • SM4
  • DES、3DES
  • AES

  优点:明文信息良好的扩展性,对插入的敏感性,不需要密钥同步,较强的适用性,适合作为加密标准

  缺点:加密速度慢,错误扩散和传播

算法分组大小(位)密钥大小(位)运算轮数结构密码强度
SM412812832非平衡 Feistel128
AES-12812812810SPN128
AES-19212819212SPN192
AES-25612825614SPN256
Twofish128128~25616Feistel/
DES645616Feistel不安全
3DES-26411248(16*3)Feistel80~112
3DES-36416848(16*3)Feistel112
Blowfish6432-44816Feistel不安全
IDEA641288Lai–Massey128

分组密码的模式

  1. ECB(Electronic CodeBook mode)电子密码本模式
  2. CBC(Cipher Block Chaining mode)密码分组链接模式
  3. CFB(Cipher FeedBack mode)密文反馈模式
  4. OFB(Output FeedBack mode)输出反馈模式
  5. CTR(CounTeR mode)计数器模式

ECB(Electronic CodeBook mode)电子密码本模式

ECB 是最直接的消息加密方法,明文分组加密之后的结果将直接成为密文分组。

特性
  1. 对某一个分组的加密或解密可独立于其他分组进行;
  2. 对密文分组的重排将导致明文分组的重排;
  3. 不能隐蔽数据模式,即相同的明文分组会产生相同的密文分组;
  4. 不能抵抗对分组的重放、嵌入和删除等攻击;
  5. 需明确一点,ECB 模式加密调用加密操作,解密调用解密操作;
  6. ECB 模式加解密均可以并行操作;
  7. 由于分组需要填充数据,密文数据长度大于等于明文数据长度。

CBC(Cipher Block Chaining mode)密码分组链接模式

CBC 模式的密文分组像链条一样互相连接在一起,将明文分组与前一个密文分组进行 XOR 运算,然后再进行加密。加密第一个明文分组时,通过事先准备好的与分组长度相同的初始向量(IV)进行 XOR。初始向量无需保密,但需要随着消息的更换而更换,且收发双方必须选用同一个初始向量。

需明确一点,CBC 模式加密调用加密操作,解密调用解密操作。

特性
  1. 链接操作使得密文分组依赖于当前的和以前的明文分组,因此对密文分组的重新编排不会导致对相应明文分组的重新编排;
  2. 每次加密使用不同的初始向量(IV)可以避免 ECB 模式下每次对相同明文使用相同密钥加密生成相同密文的弊端;
  3. 加密是串行的,无法并行化;解密可以并行操作;
  4. 如果密文分组中某一个分组损坏,但长度不变,则解密时最多影响两个分组;如果密文分组的一些数据丢失,长度发生了变化,那么后续的所有密文分组均受影响;
  5. 由于分组需要填充数据,密文数据长度大于等于明文数据长度。

CFB(Cipher FeedBack mode)密文反馈模式

CFB 模式的前一个密文分组会被送回到密码算法的输入端。反馈就是指返回输入端的意思。

在 ECB 和 CBC 模式中,明文分组都是通过密码算法进行加密的,但在 CFB 模式中,明文分组和密文分组之间仅执行了 XOR 运算。

特别注意,CFB 模式的加密和解密流程中,均只调用了密码算法的加密操作。

特性
  1. CFB 模式的加密是串行的,解密可以并行;
  2. 与 CBC 模式一样,每次加密时需要生产一个不同的随机向量(IV);
  3. CFB 模式下的消息长度可以不是分组长度的整数倍,即在加密前不需要进行填充操作;
  4. CFB 模式无法抵御重放攻击;
  5. 由于分组不需要填充,密文数据长度等于明文数据长度。

OFB(Output FeedBack mode)输出反馈模式

OFB 模式中密码算法的输出会反馈到密码算法的输入中。

与 CFB 模式类似,明文分组和密文分组之间仅执行了 XOR 运算。

特别注意,OFB 模式的加密和解密流程中,均只调用了密码算法的加密操作。

特性
  1. 与 CBC 模式一样,每次加密时需要生产一个不同的随机向量(IV);
  2. OFB 模式与 CFB 模式的区别仅在于密码算法的输入,CFB 模式密码算法的输入是前一个密文分组,OFB 模式密码算法的输入则是密码算法的前一个输出;
  3. OFB 模式下的消息长度可以不是分组长度的整数倍,即在加密前不需要进行填充操作;
  4. OFB 模式 XOR 所需的密钥流可以事先通过密码算法生成,相比较以上的密码算法,加密和解密运算效率非常高;
  5. 由于分组不需要填充,密文数据长度等于明文数据长度。

CTR(CounTeR mode)计数器模式

CTR 模式是将逐次累加的计数器进行加密来生成密钥流的密码模式。

与 CFB 和 OFB 模式类似,明文分组和密文分组之间仅执行了 XOR 运算。

特别注意,CTR 模式的加密和解密流程中,均只调用了密码算法的加密操作。

特性
  1. 支持加密和解密并行计算,可事先生成密钥流,进行加密和解密准备;
  2. 错误密文中的对应比特只会影响解密后明文中的对应比特,即错误不会传播;
  3. 每次加密都会生成一个不同的值(nonce)作为计数器的初始值。当分组长度为 128 比特(16 字节)时,前 8 个字节为 nonce,这个值在每次加密时必须都是不同的。后 8 个字节为分组序号,逐次累加;
  4. CTR 模式下的消息长度可以不是分组长度的整数倍,即在加密前不需要进行填充操作;
  5. 在 OFB 模式中,如果对密钥流的一个分组进行加密后其结果恰巧和加密前是相同的,那么这一分组之后的密钥流就会变成同一值的不断反复。在 CTR 模式中不存在该问题;
  6. 由于分组不需要填充,密文数据长度等于明文数据长度。

汇总比较

  1. ECB(Electronic CodeBook mode)电子密码本模式
    • 优点
      1. 简单
      2. 快速
      3. 支持并行计算(加密、解密)
    • 缺点
      1. 明文中的重复排列会反映在密文中
      2. 通过删除、替换密文分组可以对明文进行操作
      3. 对包含某些比特错误的密文进行解密时,对应的分组会出错
      4. 不能抵御重放攻击
    • 不推荐使用
  2. CBC(Cipher Block Chaining mode)密码分组链接模式
    • 优点
      1. 明文中的重复排列不会在密文中
      2. 支持并行计算(仅解密)
      3. 能够解密任意密文分组
    • 缺点
      1. 对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错
      2. 加密不支持并行计算
  3. CFB(Cipher FeedBack mode)密文反馈模式
    • 优点
      1. 不需要填充
      2. 支持并行计算(仅解密)
      3. 能够解密任意密文分组
    • 缺点
      1. 加密不支持并行计算
      2. 对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错
      3. 不能抵御重放攻击
  4. OFB(Output FeedBack mode)输出反馈模式
    • 优点
      1. 不需要填充
      2. 可事先进行加密、解密的准备
      3. 加密、解密使用相同结构
      4. 对包含某些错误比特的密文进行解密时,只有明文中相对应的比特会出错
    • 缺点
      1. 不支持并行计算
      2. 主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转
  5. CTR(CounTeR mode)计数器模式
    • 优点
      1. 不需要填充
      2. 可事先进行加密、解密的准备
      3. 加密、解密使用相同结构
      4. 对包含某些错误比特的密文进行解密时,只有明文中相对应的比特会出错
      5. 支持并行计算(加密、解密)
    • 缺点
      1. 主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转
Avatar

Hui.Ke

❤ Cyber Security | Safety is a priority.