国密算法介绍

一、简述

商用密码

        商用密码中华人民共和国政府用于非国家机密信息保护所采用的一系列密码技术和密码产品的总称,其相关技术为国家秘密。商用密码的研发及使用由国家密码管理局统一管理。

国密算法

        国密算法是指中国自主设计和使用的密码算法标准,其目的是保障信息安全和国家利益。目前,国密算法包括以下几个主要的密码算法:

二、SM1 分组加密算法

        SM1 为分组加密算法,对称加密,分组长度和密钥长度都为 128 位,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。算法安全保密强度及相关软硬件实现性能与 AES 相当,该算法不公开,仅以 IP 核的形式存在于芯片中,调用该算法时,需要通过加密芯片的接口进行调用,采用该算法已经研制了系列芯片、智能 IC 卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。

三、SM2 椭圆曲线公钥加密算法

        SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。

        该算法是一种基于ECC算法的非对称密钥算法,其加密强度为256位,其安全性与目前使用的RSA1024相比具有明显的优势。

        

        SM2算法和RSA算法都是公钥密码算法,SM2算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换RSA算法

        随着密码技术和计算机技术的发展,目前常用的1024位RSA算法面临严重的安全威胁,我们国家密码管理部门经过研究,决定采用SM2椭圆曲线算法替换RSA算法。

SM2算法和RSA算法比较

SM2性能更优更安全:密码复杂度高、处理速度快、机器性能消耗更小。

SM2

RSA

算法结构

基本椭圆曲线(ECC)

基于特殊的可逆模幂运算

计算复杂度

完全指数级

亚指数级

存储空间

192-256bit

2048-4096bit

秘钥生成速度

较RSA算法快百倍以上

解密加密速度

较快

一般

四、SM3 杂凑算法

        SM3是国家采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。

        该算法也叫密码杂凑算法,属于哈希(摘要)算法的一种,杂凑值为256位,和SM2算法一起被公布。功能与MD5,SHA-1相同。产生256位的编码。该算法为不可逆的算法。具体算法也是保密。

        在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开。据国家密码管理局表示,其安全性及效率与SHA-256相当。

密码散列函数

        密码散列函数(英语:Cryptographic hash function),又译为密码散列函数加密散列函数,是散列函数的一种。它被认为是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的数据是什么。这样的单向函数被称为“现代密码学的驮马”。这种散列函数的输入数据,通常被称为消息(message),而它的输出结果,经常被称为消息摘要(message digest)或摘要(digest)。

        在信息安全中,有许多重要的应用,都使用了密码散列函数来实现,例如数字签名消息认证码

特性

一个理想的密码散列函数应该有四个主要的特性:

  • 对于任何一个给定的消息,它都很容易就能运算出散列数值。

  • 难以由一个已知的散列数值,去推算出原始的消息。

  • 在不更动散列数值的前提下,修改消息内容是不可行的。

  • 对于两个不同的消息,它不能给与相同的散列数值。

五、SM4 分组加密算法

        SM4.0(原名SMS4.0)是国家采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。

        该算法为对称加密算法,随WAPI标准一起被公布,其加密强度为128位。此算法是一个分组算法,用于无线局域网产品。该算法的分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

        在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构,S盒为固定的8比特输入8比特输出。

        SM4.0中的指令长度被提升到大于64K(即64×1024)的水平,这是SM 3.0规格(渲染指令长度允许大于512)的128倍。

相关概念

        在密码学中,分组加密(英语:Block cipher),又称分块加密块密码,是一种对称密钥算法。它将明文分成多个等长的模块(block),使用确定的算法和对称密钥对每组分别加密解密。分组加密是极其重要的加密协议组成,其中典型的如DESAES作为美国政府核定的标准加密算法,应用领域从电子邮件加密到银行交易转帐,非常广泛。       

六、SM7 分组加密算法

        SM7算法,是一种分组密码算法,分组长度为128比特,密钥长度为128比特。SM7适用于非接触式IC卡,应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通等)。

产品特点

SM7国密算法的安全特性

1、真随机数发生器

2、采用SM7国密算法加密保护数据交互的安全

3、采用SM7国密算法三重相互安全认证机制

4、具有8个相互独立的128位密码,支持一卡一密和一卡多用

5、每张卡具有4字节的唯一序列号

应用

        SM7适用于非接IC卡应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通、公交一卡通)。

七、SM9 标识加密算法

        SM9是国家采用的一种标识密码标准,由国家密码管理局于2016年3月28日发布,相关标准为“GM/T 0044-2016 SM9标识密码算法”。

        SM9是基于对的标识密码算法,与SM2类似,包含四个部分:总则,数字签名算法,密钥交换协议以及密钥封装机制和公钥加密算法。在这些算法中使用了椭圆曲线上的对这一个工具,不同于传统意义上的SM2算法,可以实现基于身份的密码体制,也就是公钥与用户的身份信息即标识相关,从而比传统意义上的公钥密码体制有许多优点,省去了证书管理等。
        双线性对的双线性的性质是基于对的标识密码SM2中的总则部分同样适用于SM9,由于SM9总则中添加了适用于对的相关理论和实现基础。

        在商用密码体系中,SM9主要用于用户的身份认证。据新华网公开报道,SM9的加密强度等同于3072位密钥的RSA加密算法

八、ZUC 祖冲之算法

        ZUC 为流密码算法,对称加密,该机密性算法可适用于 3GPP LTE 通信中的加密和解密,该算法包括祖冲之算法(ZUC)、机密性算法(128-EEA3)和完整性算法(128-EIA3)三个部分。已经被国际组织 3GPP 推荐为 4G 无线通信的第三套国际加密和完整性标准的候选算法。

        据了解,在日本福冈召开的第53次3GPP系统架构组会议上,我国祖冲之密码算法(ZUC)被批准成为新一代宽带无线移动通信系统(LTE)国际标准。祖冲之密码算法的名字源于我国古代数学家祖冲之,祖冲之算法集是由我国学者自主设计的加密和完整性算法,是一种流密码。它是两个新的LTE算法的核心,这两个LTE算法分别是加密算法128-EEA3和完整性算法128-EIA3。ZUC算法由3个基本部分组成,依次为:1、比特重组;2、非线性函数F;3、线性反馈移位寄存器(LFSR)。

        相关人士认为ZUC成为国际标准提高了我国在移动通信领域的地位和影响力,对我国移动通信产业和商用密码产业发展均具有重大而深远的意义。

        据悉,祖冲之密码算法是我国商用密码算法首次走出国门,参与国际标准竞争,扩大了祖冲之算法的公开评估范围。

九、几种算法对比

对称/可逆

算法名称是否可逆是否对称
SM2可逆非对称
SM2签名不可逆对称
SM3签名不可逆-
SM4可逆对称
SM9可逆对称
SM9签名不可逆-

秘钥长度

算法名称秘钥长度
SM2256位(64位16进制数)
SM2签名256位(64位16进制数)
SM3签名-
SM4128位(32位16进制数)
SM9不限制
SM9签名不限制

明/密文长度

算法名称算法模式是否补足(isPadding)长度关系
SM2可逆--M=(m-1)/3*8+202
SM2签名--M=140/142/144
SM3签名--M=64
SM4ECBm<10时,M=32;
m>=10时,M=[(m-10)/12+2]*32
SM4ECBM=[(m-1)/12+1]*32
SM4CBC-m<10时,M=32;
m>=10时,M=[(m-10)/12+2]*32

算法模式列:-表示不相关
是否补足列:-表示无此参数
长度关系列:M表示密文长度m表示明文长度

优势分析

国密算法作为推荐使用的加密算法,有它们自身与其他算法相较的优势:

SM2与RSA相比,SM2的密码强度更高,由于SM2算法是基于椭圆曲线上点群离散的对数难题,256位的SM2密码强度已经比2048位 RSA密码强度要高;

SM3与MD5和SHA-1相比,产生的杂凑值长度不同,SM3输出长度为256比特,MD5为128比特,SHA-1为160比特,作为杂凑算法,杂凑值越高,安全性越高,因此SM3算法的安全性要高于MD5算法和SHA-1算法;

SM4与3DES相比,SM4与AES具有相同的密钥长度(AES密钥长度为128位时)和分组长度,因此SM4安全性显著高于3DES。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SSM2国密算法是一种国家密码算法,也被称为SM2(无线局域网密码算法)和MIL-STD-1756A算法。它是由国家密码管理局提出的一种非对称加密算法。下面介绍一下SSM2国密算法在不同JDK版本中的对应情况。 在JDK版本8之前,SSM2国密算法并没有被原生支持。但是,可以通过使用第三方的Bouncy Castle等库来实现SSM2国密算法。你需要下载相应版本的Bouncy Castle库,然后通过配置文件来使用该库提供的SSM2国密算法功能。 在JDK版本9及以上,Java原生库开始原生支持SSM2国密算法。你可以直接使用Java原生库来实现SSM2国密算法。可以使用如下代码来生成SSM2密钥对: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.Security; import org.bouncycastle.jce.provider.BouncyCastleProvider; public class SSM2Example { public static void main(String[] args) throws NoSuchAlgorithmException { Security.addProvider(new BouncyCastleProvider()); KeyPairGenerator generator = KeyPairGenerator.getInstance("SM2", "BC"); generator.initialize(256); // 设置密钥长度 KeyPair keyPair = generator.generateKeyPair(); System.out.println("PrivateKey: " + keyPair.getPrivate()); System.out.println("PublicKey: " + keyPair.getPublic()); } } ``` 上述代码在JDK版本9及以上中可以直接运行并输出SSM2密钥对。注意该代码中的算法名为"SM2",使用了Bouncy Castle作为提供者。 总结来说,SSM2国密算法在不同JDK版本中的对应情况为:在JDK版本8及以下需要使用第三方库(如Bouncy Castle)来实现;在JDK版本9及以上,可以直接使用Java原生库实现。 ### 回答2: ssm2国密算法是一种对称加密算法,也是中国国家密码管理办公室颁布的SM2密码算法的一个实现。SM2密码算法是基于椭圆曲线加密的一种算法,具有高度的安全性和效率。 SSM2国密算法在Java开发中可以与各个版本的JDK一起使用。但需要注意的是,首先要确保JDK支持椭圆曲线算法(ECC),因为SM2密码算法基于椭圆曲线加密。自JDK 7u71和JDK 8u31以后的版本中,JDK开始支持ECC算法。 具体来说,对应不同JDK版本使用SSM2国密算法的步骤如下: 1. 在项目的依赖管理中引入相关的国密算法库,如Bouncycastle(BC)。 2. 在代码中导入相关的包和类,如org.bouncycastle.crypto.CipherParameters、org.bouncycastle.crypto.params.ECPrivateKeyParameters、org.bouncycastle.crypto.params.ECPublicKeyParameters等。 3. 使用具体版本的JDK提供的API来生成SM2参数,如生成SM2密钥对等。 4. 使用SSM2算法进行加密、解密、签名、验签等操作,可以通过调用相应的方法实现。 需要注意的是,由于SSM2国密算法是中国特有的算法,不被国际通用密码标准所接受,因此在使用过程中需要特别注意相关法律和政策的约束。另外,为了确保安全性,建议使用最新版本的JDK和国密算法库,并及时更新补丁。 总之,SSM2国密算法可以与不同版本的JDK一起使用,只需根据相应的JDK版本选择合适的库和API进行集成和开发。 ### 回答3: ssm2国密算法是中国自主研发的一种密码算法集合,由国家密码管理局发布。它是对原有的sm2国密算法进行了改进和优化,提供了更高的安全性和可靠性。 ssm2国密算法主要用于数字签名、密钥交换和公钥加密等密码应用场景。其中,数字签名算法可以用于确保数据的完整性和身份认证,密钥交换算法可以用于确保通信双方的密钥安全,公钥加密算法可以用于确保通信内容的机密性。 对于ssm2国密算法的jdk版本支持,目前常用的JDK版本都具备了对于国密算法的支持。例如,jdk 1.7及以上版本都可以通过引入相关的国密算法库来实现对ssm2国密算法的调用和使用。 在使用ssm2国密算法时,我们可以采用以下步骤来搭建国密环境和调用算法: 1. 首先,需要从官方渠道下载相应的国密算法实现库,如GM-Tools或者BCTLS。 2. 将下载好的库文件导入项目的classpath中,确保可以正常访问。 3. 在代码中引入相关的国密算法工具类,比如SM2Util或者SM2Cipher。 4. 根据具体的功能需求,调用相应的国密算法方法,比如生成密钥对、进行数字签名或者解密操作等。 需要注意的是,由于国密算法涉及到一些加密和解密的敏感操作,建议在正式使用前咨询相关的法律和安全专业人士,确保符合国家相关法律法规的要求,并确保密钥和算法的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值