加解密算法

204 阅读6分钟

前言

主要是国密算法相关的知识。

基础知识储备

加解密算法都有哪些?

加解密算法从大类上分为对称加密非对称加密摘要加密消息认证签名和验证URL编码等等;

  1. 对称加密主要分为:AESDESSm4三种,特点是加解密都使用一个秘钥;
  2. 非对称加密主要分为:SM2RSA等等,特点是使用两个秘钥,一个加密一个解密;
  3. 摘要加密主要分为:MD5SHA1SM3等等,特点是不可逆;
  4. 消息认证摘要思路类似,区别是有一个秘钥;
  5. 签名和验证一般采用RSA,所以需要一对秘钥;
  6. URL编码是前后端数据传输解决中文乱码或浏览器未知字符的常用手段。

什么是强/弱加解密算法/密钥?

弱加密算法

弱加密算法有:

  1. 哈希算法MD4MD5SHA1,可使用SM3替代
  2. 对称加密算法DESAES CBC模式、AES ECB模式,可使用SM4AES CBC模式+HMAC替代
  3. 非对称加密算法RSA1024RSA nopadding,可使用SM2SM9RSA2048(需要使用RSA_PKCS1_OAEP_PADDINGOAEPPadding)替代

弱密钥

弱密钥指的是容易被破解的密码,如“123456”等非常常用的密码。强密码规则:密码要包含包含数字、字母和特殊字符,长度要求8以上。

什么是SM4算法?

SM4是国产的对称分组加密算法,通过128位的密钥对数据进行加密或解密,其特点是效率高,适合硬件实现。特别是在移动通信和物联网等场景中,它的使用日益广泛。

SM4的加解密过程?

加密过程

SM4算法的加密过程,分为明文分块密钥扩展轮加密输出状态返回密文五个步骤:

  1. 明文分块:将输入的明文分成每个8字节(64位)一块,存储在名为cipher的字符串数组中的前四个元素中。
  2. 密钥扩展:调用KeyExtension函数生成轮密钥,将生成的轮密钥存储在名为rks的字符串中。
  3. 轮加密:循环执行32轮的加密操作。在每一轮中,进行一系列的XORT运算,然后将结果存储在cipher数组中的相应位置。
  4. 输出状态:在每一轮加密后,输出当前轮轮密钥和输出状态。
  5. 返回密文:最后,将最后一轮的输出状态连接起来,形成最终的密文,并将其作为函数的返回值。

解密过程

SM4算法的解密过程,分为密文分块密钥扩展轮解密输出状态返回明文五个步骤:

  1. 密文分块:将输入的密文分成每个8字节(64位)一块,存储在名为plain的字符串数组中的前四个元素中。
  2. 密钥扩展:调用KeyExtension函数生成轮密钥,将生成的轮密钥存储在名为rks的字符串中。
  3. 轮解密:循环执行32轮的解密操作。在每一轮中,进行一系列的XORT运算,然后将结果存储在plain数组中的相应位置。
  4. 输出状态:在每一轮解密后,输出当前轮的轮密钥和输出状态。
  5. 返回明文:最后,将最后一轮的输出状态连接起来,形成最终的明文,并将其作为函数的返回值。

SM4的工作模式是什么?

SM4的核心加密过程是基于分组的,但在实际应用中,数据往往不是单个固定的128位分组,因此需要结合不同的工作模式来处理任意长度的数据块。工作模式定义了如何将数据分块,并控制加密块之间的依赖性。

SM4都有哪些工作模式?

  1. ECB( 电子密码本模式 ECB将明文划分为独立的128位分组,对每个分组独立进行加密。它简单但安全性较低,适合结构化数据。
  2. CBC( 密码分组链接模式 ):CBC 通过引入链式依赖来提高安全性。它将每个明文块与前一个密文块异或后再进行加密,第一个分组需要一个初始化向量(IV)来开始链式加密。它具有良好的安全性,适合大多数应用。
  3. CFB( 加密反馈模式 CFB是一种流模式,允许加密不满128位的数据块。CFB的基本思想是,先将初始化向量加密,然后将输出与明文进行异或操作生成密文。
  4. OFB( 输出反馈模式 OFBCFB类似,但加密过程不依赖于前一个密文块。OFB通过将上一个加密结果作为输入,生成伪随机流。
  5. CTR( 计数器模式 ): 通过计数器生成伪随机流,每个分组的加密是独立的,因此可以并行处理,且是安全的。
  6. GCMGCM是一种结合了CTR模式和身份验证的加密模式。它提供了加密和认证功能,适合对数据进行加密时也需要验证数据完整性(对安全性要求极高)的场景。

什么是SM2算法?

SM2算法是国产的非对称加密算法,采用椭圆曲线密码体系,适用于数字签名、密钥交换和公钥加密等场景。

SM2算法的主要特点如下:

  1. 安全性高SM2算法基于椭圆曲线离散对数问题,具有较高的安全性。
  2. 算法效率高SM2算法的计算量相对较小,适合在资源受限的环境中使用。
  3. 适用性广泛SM2算法可用于数字签名、密钥交换和公钥加密等多种密码应用场景。
  4. 算法标准化SM2算法已被国际电信联盟(ITU-T)和国际标准化组织(ISO)认可为国际标准。

SM2的算法步骤?

  1. 密钥生成: 首先,选择一个椭圆曲线和基点。然后,用户随机生成一个私钥,并计算公钥。
  2. 加密:使用公钥加密原文
  3. 解密:使用私钥解密密文
  4. 签名:使用私钥对数据进行签名
  5. 验签:使用公钥验证签名

业务相关问题

你的数据都各自用了什么加密方式?

  • 姓名、证件号码、手机号等敏感数据使用SM4对称加密;
  • 前后端接口数据传递使用SM2非对称加密。
  • 前端向后端数据传输先进行URL编码,后端接收数据后URL解码。

非对称加密在你的项目中有什么作用?

  1. 安全通信:数据传输过程中不被窃取或篡改。
  2. 密钥交换:适用于需要双方分别保管密钥的场景。
  3. 数字签名:创建数字签名,验证文件或消息的完整性和来源的真实性。