1、SM1

  • SM1 是中国国家密码管理局(SCA)发布的国密算法之一,属于对称加密算法,其分组长度、秘钥长度都是128bit
    • 【注】对称加密算法是一种使用相同密钥进行数据加密和解密的加密方式。在这种算法中,发送方和接收方共享同一个密钥,发送方使用该密钥对明文进行加密,生成密文;接收方则使用相同的密钥对密文进行解密,恢复出原始的明文。
  • 由于 SM1 是机密算法,其具体实现细节未公开,仅以IP核的形式存在于芯片中,需要通过加密芯片的接口进行调用。主要用于高安全性要求的场合,如金融和政务系统。
  • 不过,SM1 类似于其他对称加密算法(如 AES),可以进行高效的数据加密和解密操作,保证数据的机密性和完整性。
    • 【注】AES(高级加密标准)是目前全球广泛使用的一种对称加密算法。
      • AES 工作原理:AES 通过对数据进行多轮次的复杂数学变换来加密。每个轮次包括四个主要步骤:
        • 字节替代(SubBytes):通过 S 盒对数据块(128bit,16字节)中的每个字节进行替换,这是一个非线性替换过程。
        • 行移位(ShiftRows):将数据块中的字节按行循环左移不同的位数,增加混淆性。
        • 列混淆(MixColumns):将每列数据进行数学变换,使得字节之间的关系更加复杂。
        • 轮密钥加(AddRoundKey):将数据块与密钥进行异或操作,添加密钥的影响。
  • 具体来说,SM1算法将明文数据进行分组,把每个分组进行多次迭代进行加密。解密同理。

2、SM2

  • SM2 是中国国家密码管理局发布的一种基于椭圆曲线密码的公钥密码算法标准,其秘钥长度256bit,包含数字签名、密钥交换和公钥加密。SM2 常被用于替代国外的 RSA 算法。
    • 数字签名:SM2可以用于生成和验证数字签名,确保数据的完整性、真实性和不可否认性。
    • 加密解密:SM2支持公钥加密,允许发送方用接收方的公钥对信息加密,只有接收方可以用其私钥解密。
    • 密钥交换:SM2可以用于安全的密钥交换协议,确保通信双方能够在不泄露密钥的情况下协商出一个共享的加密密钥。
    • 【注】椭圆曲线在密码学中是指一种由特定数学方程定义的曲线,用于构建公钥加密算法。具体而言,椭圆曲线的方程形式通常为:y^2=x^3+ax+b
      • 其中,a 和 b 是常数,x 和 y 是曲线上的坐标点。椭圆曲线的关键特性在于:当我们在这条曲线上选取两个点并进行特定的数学操作(如“加法”或“点乘”),结果仍然会是曲线上的另一个点。这种特性为密码学算法提供了所需的代数结构。
  • SM2采用的是ECC 256位的一种。相比RSA,它在同等安全强度下需要更小的密钥长度,因此计算速度更快。

3、SM3

  • SM3 是中国国家密码管理局发布的一种密码杂凑算法,适用于数字签名和验证、消息认证码的生成与验证以及随机数的生成。
    • 【注】密码杂凑算法,也称为哈希函数,是一种将任意长度的输入数据通过特定算法转换为固定长度的输出数据(杂凑值或哈希值)的算法。哈希值具有固定的长度且看似随机,即便是输入数据的一点细微变化,输出的哈希值也会产生巨大的不同。这使得哈希算法在确保数据完整性和安全性方面扮演着重要角色。
  • SM3 是在SHA-256基础上改进实现的一种算法,采用Merkle-Damgard结构,消息分组长度为512bit,输出的摘要值长度为256bit。
    • 【注】SHA-256是SHA-2系列中最广泛使用的密码杂凑算法。工作原理:
      • 消息填充:首先将输入消息进行填充,使其长度达到512位的整数倍。填充方法是在消息末尾附加一个“1”位,接着添加若干“0”位,最后附加消息的原始长度。
      • 消息分块:填充后的消息被分成多个512位的块,逐块进行处理。
      • 初始化哈希值:算法使用固定的8个32位初始哈希值,作为处理每个数据块的基础。
      • 压缩函数:将每个消息块与这8个初始哈希值结合,经过64轮的迭代计算,将数据压缩成一个新的哈希值。
      • 最终哈希值:处理完所有的消息块后,生成最终的256位(32字节)哈希值。
  • SM3和SHA-256的差异:​​​​​​​
    • 消息扩展机制
      • SM3:采用了一种更复杂的消息扩展过程。每个消息块(512位)在处理时会被扩展为132个32位的字(相当于4224位),而这些扩展字是通过线性和非线性函数组合产生的。消息扩展的复杂性使得SM3在抗差分攻击和线性攻击方面具有较强的抵抗力。
      • SHA-256:消息扩展相对简单,将512位的消息块扩展为64个32位字(即2048位)。SHA-256使用简单的位操作和位移来完成扩展。
    • 压缩函数
      • SM3:采用了基于Merkle-Damgard结构的压缩函数,但与SHA-256不同的是,SM3的压缩函数包含了更多复杂的非线性操作,包括两种不同的消息混合函数。这些混合函数的设计使SM3在某些攻击下的抗性得到增强。
      • SHA-256:SHA-256也使用了基于Merkle-Damgard结构的压缩函数,但其压缩函数相对较简单,使用了更多的循环移位、与运算、异或等操作。
    • 非线性函数设计
      • SM3:在消息处理过程中使用了两个不同的非线性函数,称为布尔函数T1和T2。这些函数在不同的阶段被调用,分别用于增强消息扩展和压缩阶段的复杂性和随机性。
      • SHA-256:使用了少量的非线性布尔函数,这些函数在压缩过程中主要由按位与、异或、或非等逻辑运算组合而成,相对较为简单。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐