商用密码算法简介

商密算法概述

现代密码技术中,常见的密码算法包括对称密码算法、公钥密码算法和杂凑算法三种。常见的对称算法包括ZUC、SM1、SM4、SM7、DES、TDES、AES,常见的非对称算法包括SM2、SM9、RSA、ECC等,常见的密码杂凑算法包括SM3、SHA1、SHA256、SHA512、MD5等。
上述所有算法中其中的ZUC、SM1、SM2、SM3、SM4、SM7、SM9是国内认可的商密算法,其余为国际算法。截止至本文当日,SM1和SM7仍然未公开,使用SM1和SM7只能借助于具备商密资质的安全芯片。ZUC、SM2、SM3、SM4、SM9算法已经公开,网上也可找到公开的源码。实际使用中尽量使用已经公开的商密算法,其他未公开的商密算法和国际算法只有在特定需求中才使用。在商密产品认证过程中,原则上都要使用商密算法,尽量避免使用国际算法。
这里贴出ZUC、SM2、SM3、SM4、SM9部分源码地址供参考。
ZUC:link
SM2:link
SM3:link
SM4:link
SM9:link
如有问题可站内联系或微信号:symmrz 。

对称密码算法

对称算法概述

对称密码算法加密过程与解密过程使用相同的或容易互相推导的密钥,即加密和解密两方的密钥是对称的。这如同往一个上了锁的箱子里放物品,放入时需要钥匙打开,取出时需要同样的钥匙打开。早期的密码算法都是对称形式的密码算法。对称密码算法的加密和解密流程如下图所示。
对称算法应用流程

针对不同的数据类型和应用环境,对称密码有两种主要形式:一是序列密码算法(流密码),另一种是分组密码算法。序列密码算法包括商密算法中的ZUC,国际算法中的SNOW和RC4等。分组密码算法包括商密算法中的SM1、SM4、SM7,国际算法中的DES、TDES(3DES)和AES等。

序列密码和分组密钥的区别

序列密码和分组密钥的区别在于序列密码是将密钥和初始向量作为输入,通过密钥流生成算法输出密钥流,然后将明文序列和密钥流进行异或,得到密文序列。分组密码首先对明文消息根据分组大小进行分组,再将明文分组、密钥和初始向量(如果有)一起作为输入,通过分组加密算法直接输出密文分组。
序列算法和对称算法区别

序列密码算法的特点在于密钥流可以在明文序列到来之前生成。序列密码对于每个明文序列的加密操作仅仅是一次异或,因此序列密码的执行速度非常快,对计算资源占用也少,常用于功耗或计算能力受限的系统中。

分组密码的工作模式

我国与于2008年发布了规定分组密码算法的国家标准GB/T 17964-2008《信息安全技术 分组密码算法的工作模式》。根据分组数据块链接的组合模式不同,可以分为ECB、CBC、CFB、OFB、、CTR、BC、OFBNLF七种模式。其中应用较广泛的为ECB和CBC两种模式。
ECB模式
CBC模式

公钥密码算法

公钥密码算法也叫非对称密码算法,由于其公钥和私钥不一样,且由通信双方持有,所以称为非对称算法。公钥密码算法既可以用于加密和解密,也可以用于数字签名和签名验证,打破了对称密码算法中加密和解密使用相同密钥的限制,很好的解决了对称算法中存在的密钥管理难题。SM2和SM9算法是商密认可的公钥密码算法,其中SM2已在电子认证领域广泛应用。

公钥密码算法模型

公钥密码算法的密钥分为公钥和私钥,公钥可以公开,私钥需要保密。公钥可以进行加密、签名验证,私钥可以进行解密和数字签名。

公钥密码算法一般建立在公认的计算困难之上,这样才能证明算法是安全的。一般来说,通过私钥和确定的算法F,可以简单的推导出公钥PubKey = F(PriKey);反之,通过公钥和算法F,很难推导出私钥。目前比较常见国际公钥算法RSA是基于大整数因子分解实现了算法安全性,而商密SM2算法是基于离散对数问题困难性。因此,RSA算法和SM2算法的安全性建立在不同的数学难题之上,无法直接比较哪种算法更加安全;若从暴力破解的角度来看,SM2的私钥为随机数,穷举SM2私钥的难度要大于RSA2048。
由于公钥密码运算的操作计算复杂度较高,公钥密码算法的加密速度一般比对称加密算法慢很多,因此公钥加密算法主要用于短数据的加密,例如产生数字信封等。
数字签名主要用于确认数据的完整性、签名者身份的真实性和签名行为的不可否认性。数字签名使用私钥对消息进行签名,使用公钥对签名值进行验证。需要注意的是,为提升效率和安全性,数字签名算法中一般都需要先使用密码杂凑算法对原始消息进行杂凑运算,在对得到的消息摘要进行数字签名。

SM2公钥算法

SM2公钥算法是国家密码管理局发布的标准,目前已经转化为国家标准。该标准基于ECC算法,选取了固定的一条椭圆曲线。SM2公钥算法相关的国密规范包括:
GM/T 0003-2012《SM2椭圆曲线公钥密码算法》
GM/T 0009-2012《SM2 密码算法使用规范》
GM/T 0010-2012《SM2 密码算法加密签名消息语法规范》
GM/T 0015-2012《基于SM2密码算法的数字证书格式规范》
其中GM/T 0003包含五部分,分别介绍了SM2的算法原理、签名算法、密钥交换、加密算法和曲线参数及示例。

SM9公钥算法

SM9公钥算法是在传统公钥基础设施基础上发展来的标识密码算法(IBC)。除了具有PKI的技术优点之外,主要解决了具体安全应用中PKI需要大量交换数字证书的问题,使安全应用更加易于部署和使用。IBC中每个人的公钥就是他的身份标识,例如手机号、Email地址等。
SM9公钥算法的规范见GM/T 0044-2016《SM9标识密码算法》,该规范包含五部分,分别为算法原理、签名算法、密钥交换协议、密钥封装和公钥加密、参数定义。

对比

对比常见的公钥密码算法RSA2048、SM2和SM9,可以发现:
RSA公钥算法的优势:该算法具备先发优势,在国际和国内已经广泛应用。同时算法的安全性机制经历了长时间的考验。
RSA公钥算法劣势:其运算速度较慢,典型的应用环境下密钥生成和签名算法明显慢于同等强度的SM2算法,例如在常见的IC卡中,RSA2048的密钥生成一般以秒为单位,而SM2密钥生成以毫秒为单位,差距可达到千倍。密钥数据量较大,常见的RSA2048 CRT私钥至少达到640字节,而SM2私钥仅有32字节。RSA1024的安全性已经不被认可,一般不要使用。
SM2的优劣势:与RSA相对,SM2目前在国内有成熟的体系,但仍然处于替换RSA的过程中。在算法速度和密钥数据量方面,SM2有明显的优势,更适用于大数据量和资源小、功耗低的应用场景。
SM9的优劣势:SM9属于标识密码算法,不需要数字证书(CA)的支撑,可以有效减少对第三方的依赖,在成本和易于部署方面上更具优势。但该算法也存在明显的问题,即引入了用户私钥分发的问题,而公钥算法的本质就是要解决密钥管理的问题。另外SM9算法使用双线性对运算,对处理器的计算速度提出了较高的要求,难以适应低成本的场景。

杂凑算法

概述

密码杂凑算法也称作散列算法或哈希算法。密码杂凑算法对任意长度的消息进行压缩,输出定长的消息摘要或杂凑值。
h = H(M)
一般来说,杂凑算法具有如下性质:

  1. 抗原像攻击。为一个给定的输出找出能映射到该输出的一个输入在计算上是困难的。即给定一个明文消息“abcedfg”,可以很容易推导出其杂凑值h;但给定h,找到一个对应的M是非常困难的。
  2. 抗第二原像攻击。为一个给定的输入找出能映射到同一个输出的另一个输入在计算上是困难的。即给定h=H(M1),想找到M2使得H(M2)=H(M1)是困难的。
  3. 强抗碰撞性。要发现不同的输入映射到同一输出在计算上是困难的。
    SM3杂凑算法涉及的国密规范包括:
    GM/T 0004-2012《SM3密码杂凑算法》

密码杂凑算法的应用

密码杂凑算法的直接应用就是产生消息摘要,进一步可以验证数据的完整性,被广泛应用于各种不同的安全应用和网络协议中。例如,用户收到信息后,计算其杂凑值,并与发送方提供的结果做比对,如果二者一致,则基本认为消息在传送过程中没有遭到篡改。在进行完整性保护时,杂凑算法常常与密钥一同使用,生成的杂凑值成为MAC,这样的杂凑算法称为带密钥的杂凑算法。此外,杂凑算法也与公钥密码算法一同使用来产生数字签名。

对比

SM3杂凑算法是国家密码管理局公开发布的。国际上使用广泛的杂凑算法包括MD5、SHA0、SHA1、SHA2、SHA3等。目前MD5、SHA0、SHA1都已经不再安全,即将推出历史舞台。商密认证推荐使用SM3杂凑算法。

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值