概叙

科普文:Java基础系列之【java加密/解密、签名】-CSDN博客

前面梳理了密码、以及国外的加解密算法、签名算法,这里我们继续看看国密SM。

国密即国家密码局认定的国产密码算法,即商用密码

商用密码,是指能够实现商用密码算法的加密、解密和认证等功能的技术。(包括密码算法编程技术和密码算法芯片、加密卡等的实现技术)。

商用密码技术是商用密码的核心,国家将商用密码技术列入国家秘密,任何单位和个人都有责任和义务保护商用密码技术的秘密。

商用密码的应用领域十分广泛,主要用于对不涉及国家秘密内容但又具有敏感性的内部信息、行政事务信息、经济信息等进行加密保护。

比如:商用密码可用于企业门禁管理、企业内部的各类敏感信息的传输加密、存储加密,防止非法第三方获取信息内容;也可用于各种安全认证、网上银行、数字签名等。

为了保障商用密码安全,建设行业网络安全环境,增强我国行业信息系统的“安全可控”能力,国家密码管理局发布了一系列国产商用密码标准算法,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)等。

国密算法,即国家商用密码算法,是由 国家密码管理局 认定和公布的密码算法标准及其应用规范,其中部分密码算法已经称为国际标准。

国家密码局的密码标准列表 http://www.gmbz.org.cn/main/bzlb.html,此列表中可以找到一系列国密算法标准文档。

如:SM系列 密码,SM 代表 商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。

  • SM1、SM4、SM7、祖冲之密码(ZUC)属于对称算法;
    • 备注:SM1、SM7算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
  • SM2、SM9属于非对称算法;
  • SM3属于哈希算法。

基于国密算法使用的推广普及,目前国密算法已广泛应用于金融、电子政务及安防等领域,提供身份认证和数据加密等服务。

1.SM1算法

SM1 算法是分组密码算法,该算法是由国家密码管理局编制的一种商用密码分组标准对称算法,分组长度为128位,密钥长度都为 128 比特,算法安全保密强度及相关软硬件实现性能与 AES 相当,算法不公开,仅以IP核的形式存在于芯片中。

采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。

2.SM2算法

SM2算法全称为椭圆曲线算法,是一种非对称密钥算法,其加密强度为256位,其安全性与目前使用的RSA1024相比具有明显的优势。
它是基于椭圆曲线密码的公钥密码算法标准,其秘钥长度256bit,包含数字签名、密钥交换和公钥加密,用于替换RSA/DH/ECDSA/ECDH等国际算法。可以满足电子认证服务系统等应用需求,由国家密码管理局于2010年12月17号发布。

SM2采用的是ECC 256位的一种,其安全强度比RSA 2048位高,且运算速度快于RSA。

  SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSAECDH等国际标准,而是采取了更为安全的机制。另外,SM2推荐了一条256位的曲线作为标准曲线。

  SM2标准包括总则,数字签名算法,密钥交换协议,公钥加密算法四个部分,并在每个部分的附录详细说明了实现的相关细节及示例。

SM2算法主要考虑素域FpF2m上的椭圆曲线,分别介绍了这两类域的表示,运算,以及域上的椭圆曲线的点的表示,运算和多倍点计算算法。然后介绍了编程语言中的数据转换,包括整数和字节串,字节串和比特串,域元素和比特串,域元素和整数,点和字节串之间的数据转换规则。详细说明了有限域上椭圆曲线的参数生成以及验证,椭圆曲线的参数包括有限域的选取,椭圆曲线方程参数,椭圆曲线群基点的选取等,并给出了选取的标准以便于验证。最后给椭圆曲线上密钥对的生成以及公钥的验证,用户的密钥对为(ssP),其中s为用户的私钥,sP为用户的公钥,由于离散对数问题从sP难以得到s,并针对素域和二元扩域给出了密钥对生成细节和验证方式。总则中的知识也适用于SM9算法。在总则的基础上给出了数字签名算法(包括数字签名生成算法和验证算法),密钥交换协议以及公钥加密算法(包括加密算法和解密算法),并在每个部分给出了算法描述,算法流程和相关示例。

数字签名算法,密钥交换协议以及公钥加密算法都使用了国家密管理局批准的SM3密码杂凑算法和随机数发生器。数字签名算法,密钥交换协议以及公钥加密算法根据总则来选取有限域和椭圆曲线,并生成密钥对。

3.SM3算法

SM3是一种密码杂凑算法,用于替代MD5/SHA-1/SHA-2等国际算法,适用于数字签名和验证、消息认证码的生成与验证以及随机数的生成,可以满足电子认证服务系统等应用需求,该算法也叫密码杂凑算法,属于哈希(摘要)算法的一种,于2010年12月17日被中国国家密码管理局公布

它是在SHA-256基础上改进实现的一种算法,采用Merkle-Damgard结构,消息分组长度为512bit,输出的摘要值长度为256bit。

SM3是在SHA-256基础上改进实现的一种算法,SM3算法的压缩函数与SHA-256的压缩函数具有相似的结构,但是SM3算法的设计更加复杂,比如压缩函数的每一轮都使用2个消息字。

SM3密码杂凑(哈希、散列)算法给出了杂凑函数算法的计算方法和计算步骤,并给出了运算示例。此算法适用于商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。在SM2,SM9标准中使用。

此算法对输入长度小于2的64次方的比特消息,经过填充和迭代压缩,生成长度为256比特的杂凑值,其中使用了异或,模,模加,移位,与,或,非运算,由填充,迭代过程,消息扩展和压缩函数所构成。具体算法及运算示例见SM3标准。

该算法为不可逆的算法,具体算法也是保密。

SM3算法适用于商用密码应用中的数字签名和验证。

在数字签名的时候会采用两个国密算法, 先对数据取hash, 再使用私钥签名, 即先使用SM3取hash, 再对hash使用SM2进行签名。

4.SM4算法

SM4是分组加密算法,跟SM1类似,是我国自主设计的分组对称密码算法,用于替代DES/AES等国际算法。

SM4算法与AES算法具有相同的密钥长度、分组长度,都是128bit。于2012年3月21日发布,适用于密码应用中使用分组密码的需求。

该算法为对称加密算法,随WAPI标准一起被公布,其加密强度为128位。此算法是一个分组算法,用于无线局域网产品。

该算法的分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

此算法采用非线性迭代结构,每次迭代由一个轮函数给出,其中轮函数由一个非线性变换和线性变换复合而成,非线性变换由S盒所给出。其中rki为轮密钥,合成置换T组成轮函数。轮密钥的产生与上图流程类似,由加密密钥作为输入生成,轮函数中的线性变换不同,还有些参数的区别。

与国际的DES算法对比如下表5-3所示:

表5-3 SM4算法与DES算法对比情况表

 

DES算法

SM4算法

计算基础

二进制

二进制

算法结构

使用标准的算术和逻辑运算,先替代后置换,不含非线性变换。

基本轮函数加迭代,含非线性变换。

加解密算法是否相同

计算轮数

16轮

32轮

分组长度

64位

128位

密钥长度

64位

128位

有效密钥长度

56位

128位

实现难度

易于实现

易于实现

实现性能

软件实现慢、硬件实现快

软件实现和硬件实现都快

安全性

较低

较高

5.SM7对称密码

SM7算法是一种分组密码算法,分组长度为128比特,密钥长度为128比特。

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

6.SM9非对称算法

SM9是基于非对称密码体制的标识密码算法。

与SM2类似,SM9算法共包含五个部分:总则、数字签名算法、密钥交换协议以及密钥封装机制和公钥加密算法。

与其它标识密码算法相同,SM9算法的安全性是基于椭圆曲线双线性映射的性质。

不同于传统意义上的SM2算法,SM9不需要申请数字证书,从而比传统意义上的公钥密码体制有许多优点,省去了证书管理等。双线性对的双线性的性质是基于对的标识密码SM2中的总则部分同样适用于SM9,由于SM9总则中添加了适用于对的相关理论和实现基础。

用椭圆曲线对实现的基于标识的数字签名算法、密钥交换协议、密钥封装机制和公钥加密与解密算法,包括数字签名生成算法和验证算法,并给出了数字签名与验证算法及其相应的流程。并提供了相应的流程。可以替代基于数字证书的PKI/CA体系。

SM9主要用于用户的身份认证。据新华网公开报道,SM9的加密强度等同于3072位密钥的RSA加密算法,于2016年3月28日发布。

为了降低公开密钥系统中密钥和证书管理的复杂性,以色列科学家、RSA算法发明人之一Adi Shamir在1984年提出了标识密码(Identity-Based Cryptography)的理念。标识密码将用户的标识(如邮件地址、手机号码、QQ号码等)作为公钥,省略了交换数字证书和公钥过程,使得安全系统变得易于部署和管理,非常适合端对端离线安全通讯、云端数据加密、基于属性加密、基于策略加密的各种场合。2008年标识密码算法正式获得国家密码管理局颁发的商密算法型号:SM9(商密九号算法),为我国标识密码技术的应用奠定了坚实的基础。

SM9算法不需要申请数字证书,适用于互联网应用的各种新兴应用的安全保障。如基于云技术的密码服务、电子邮件安全、智能终端保护、物联网安全、云存储安全等等。这些安全应用可采用手机号码或邮件地址作为公钥,实现数据加密、身份认证、通话加密、通道加密等安全应用,并具有使用方便,易于部署的特点,从而开启了普及密码算法的大门。

由于SM系列算法在多个领域都有应用,因此其安全性也非常重要。为了确保它们的安全性,国家密码管理局制订了多项严格的安全标准,包括密码机安全评测标准、密码产品及其商业密码管理规范、密码产品及其认证管理规范等。这些标准和规范可以确保SM系列算法在应用中能够达到最高的安全性和可靠性。

7.ZUC祖冲之算法

祖冲之密码算法是一种流加密算法,它是中国自主研究的流密码算法,该机密性算法可适用于3GPP LTE通信中的加密和解密,该算法包括祖冲之算法(ZUC)、加密算法(128-EEA3)和完整性算法(128-EIA3)三个部分。

目前已有对ZUC算法的优化实现,有专门针对128-EEA3和128-EIA3的硬件实现与优化,由国家密码管理局于2012年3月21日发布。

祖冲之序列密码算法是中国自主研究的流密码算法,是运用于移动通信4G网络中的国际标准密码算法。

为进一步扩大我国密码技术、产品的影响力,增强我国密码技术国际竞争力,提升国际话语权,在全国信息安全标准化技术委员会和密码行业标准技术委员会等相关单位的大力推动下,我国在密码算法标准国际化进程中也取得重要进展。

ZUC算法已经成为3GPP LTE 国际标准,ZUC-256 有望成为5G标准,含有我国SM2、SM9 数字签名算法的ISO/IEC14888-3/AMD1正式成为ISO/IEC国际标准,SM4算法以补篇形式纳入 ISO/IEC18033-3 标准中。

国密算法实现

为什么需要国密算法?

国密算法的产生背景

在网络信息传输和存储过程中,数据的保密性和安全性是一项重要的需求。传统的国际标准加密算法虽然安全可靠,但由于无法保证源代码的安全性,因此存在着源代码被外部恶意攻击者渗透或篡改的风险。为了构建安全的行业网络环境并增强国家行业信息系统的“安全可控”能力,中国积极开展了针对信息安全需求的研究和探索。自2007年开始,中国制定了国密算法标准,并于2010年正式发布。

经过多年的发展、改进和完善,国密算法已成为中国自主研发的密码算法标准,并在各行业得到广泛应用。它的诞生不仅显著提升了中国在密码技术领域的核心竞争力,还为国家信息安全建设作出了重要贡献。

国密算法的特点

国密算法具备如下特点:

•安全性高:国密算法采用了严密的密码学原理和复杂的运算方式,具有较高的安全性。它在加密、数字签名和哈希等功能上都能提供可靠的保护,抵抗了各种传统和现代密码攻击手段。

•高效性与灵活性:国密算法在保证安全性的同时,注重算法的效率。它的加密速度和运行效率相对较高,同时也能适应不同的密码长度和密钥长度,以满足不同场景的需求。

•标准化广泛:国密算法已被国家标准化机构认可和采用。它符合国际密码学标准的基本要求,具备与国际算法相媲美的能力。同时,国密算法也在国内推广和应用广泛,成为中国信息安全领域的基础核心算法之一。

•自主创新:国密算法是中国自主研发的密码算法,所以对于算法的实现和推广都具有独立的掌控能力。这意味着中国可以更好地保护自己的国家信息安全,减少对外依赖,提高自主抵抗能力。

•面向多领域应用:国密算法不仅局限于某个特定领域的应用,它适用于金融业、电子商务、通信、物联网、区块链等不同领域的信息安全保护。它的广泛应用范围使得国密算法可以满足不同行业的安全需求。

国密算法如何工作?

国密算法包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9以及祖冲之密码算法(ZUC)等。其中,SM1、SM4、SM7、祖冲之密码(ZUC)属于对称算法;SM2、SM9属于非对称算法;SM3属于杂凑算法。

下文将主要介绍国密算法中的常用算法SM1、SM2、SM3和SM4的实现和应用。

图1 国密算法分类

SM1算法的实现和应用

SM1算法是国密算法中的一种对称加密算法,其特点是加解密使用相同密钥。利用SM1对称加密算法加解密数据的过程如图2所示。

SM1算法未公开,仅以IP核(Intellectual Property Core,一种预先做好的集成电路功能模块)的形式存在于芯片中。SM1算法主要用于小数据量的加密保护,因此被广泛用于研制智能IC卡、智能密码钥匙、门禁卡、加密卡等安全产品。

图2 对称加密算法加解密原理示意图

SM2算法的实现和应用

SM2算法是基于ECC(Elliptic Curve Cryptography)椭圆曲线的非对称加密算法,包括了SM2-1椭圆曲线数字签名算法、SM2-2椭圆曲线密钥交换协议和SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名、密钥协商和数据加密等功能。

SM2算法在许多领域都有广泛的应用。

在电子商务领域,SM2算法被用于保护用户个人信息的安全传输,确保用户在网上交易过程中的隐私和财产的安全。在互联网金融领域,SM2算法被用于数字支付、电子银行等场景,实现用户身份认证和交易的安全性。此外,SM2算法还适用于物联网领域,保护物联网设备之间的通信安全,确保数据的可靠传输。

中办2018年36号文件《金融和重要领域密码应用与创新发展工作规划(2018-2022年)》要求,在金融银行、电子政务、教育、交通运输、民生保障等关键领域全面推进自主可控密码技术的应用,大大推动了国密算法的在各类应用场景中的普及应用。

1、金融服务领域:国密算法在金融行业的应用极为广泛,特别是在银行卡和电子支付系统中。通过使用国密算法,金融机构能够为用户的账户安全和交易过程提供强有力的保护,有效防止未授权访问和交易欺诈,确保资金的安全性和交易的完整性。

2、电子政务领域:国密算法在电子政务中的应用,为政府机关和公共事业部门的信息安全提供坚实的保障。它被用于政务应用系统网络通信和数据存储的安全性。

3、互联网服务领域:随着互联网服务的普及,国密算法在加密通信和数据存储方面发挥着重要作用。无论是web系统或网站都可以采用国密算法确保用户信息的保密性和完整性,通过自主可控的密码技术,防止数据泄露和网络攻击。

4、物联网(IoT)领域:国密算法密钥长度短、计算效率高,在智能家居、智能交通等IoT场景中也能得到很好的应用,为设备间的通信提供加密保护,同时也增强系统的可靠性和抗攻击能力。

5、工业控制系统:国密算法也被应用于工业控制系统,保护工业自动化和智能制造过程中的数据交换,防止工业间谍活动和网络攻击,确保工业系统的稳定运行。

6、医疗健康领域:在医疗健康领域,国密算法用于保护病人的隐私数据和医疗记录,确保数据的安全性和合规性,同时支持远程医疗服务的安全实施。

SM2算法的工作原理

1、椭圆曲线数学基础:SM2算法首先基于椭圆曲线的数学特性。椭圆曲线是定义在有限域上的一个代数结构,它具有加法和标量乘法操作,这些操作满足特定的性质,如封闭性、结合性和交换性。

2、选择曲线和基点:在SM2算法中,首先需要选择一个合适的椭圆曲线和一个基点。曲线的选择需要满足特定的安全条件,以确保曲线上的点群离散对数问题(ECDLP)的难度足够高,从而保证算法的安全性。

3、密钥生成机制:用户首先随机生成一个私钥,私钥是一个在一定范围内的整数。然后,使用私钥与基点进行标量乘法运算,得到公钥。公钥是椭圆曲线上的一个点,它与私钥一一对应。

4、数字签名机制:SM2算法的数字签名过程包括生成签名和验证签名两个步骤。生成签名时,首先对消息进行哈希处理,然后使用私钥对哈希值进行签名,生成一对签名值。验证签名时,使用对应的公钥和消息的哈希值对签名进行验证。

5、密钥协商机制:SM2算法支持ECDH密钥交换协议,允许两个通信方在不安全的通道上协商出一个共享的密钥。这个过程涉及到使用各自的私钥与对方的公钥进行标量乘法运算,得到相同的共享密钥。

6、加密和解密过程:虽然SM2算法本身主要用于数字签名和密钥协商,但它可以与其他对称加密算法结合使用,进行数据的加密和解密。在加密过程中,使用共享密钥对数据进行对称加密;在解密过程中,使用相同的共享密钥对加密后的数据进行解密。

数据加密

在非对称加密算法中,可对外公布的密钥称为“公钥”,只有持有者所知的密钥称为“私钥”。发送者使用接收者的公钥来加密消息,接收者用自己的私钥解密和读取该消息。

利用SM2非对称加密算法加解密数据的过程如图3所示。

图3 非对称加密算法加解密原理示意图

密钥协商

由于椭圆曲线的计算复杂性高,破解难度大,因此SM2算法在密钥协商技术领域也起着关键作用。利用SM2算法进行密钥协商的过程如图4所示。

(1) 会话双方生成自己的私钥(随机数)。

(2) 会话双方由私钥、ECC椭圆曲线参数G各自计算出公钥。

(3) 会话双方将自己的公钥传递给对方,传递过程公开。由于椭圆曲线的计算复杂性高,破解难度大,因此攻击者难以通过公钥和椭圆曲线参数G反推出私钥。

(4) 双方将自己的私钥与对方的公钥进行运算,最终得到相同的会话密钥,该会话密钥可作为共享密钥用于对称加密(例如SM4算法)通信。

图4 SM2算法密钥协商原理示意图

数字签名

数字签名是一种用于验证信息完整性、真实性和来源的技术手段。它通常用于确保数据在传输或存储过程中没有被篡改,并且可以追溯到特定的发送方。发送方使用自己的私钥对消息进行加密,生成数字签名。接收方使用发送方的公钥对签名进行解密和验证,以验证消息的完整性和真实性。

在数字签名应用中,SM2算法通常与SM3摘要算法一起使用,具体的实现过程请参见SM3算法的实现和应用中的图5。

SM3算法的实现和应用

SM3杂凑(Hashing)算法是国密算法中的一种摘要算法。SM3算法通过哈希函数将任意长度的消息压缩成固定长度的摘要。摘要具有唯一性,即不同信息生成的摘要不同,且无法由摘要恢复出原始信息,更无法伪造信息获得相同摘要,因此SM3算法被广泛用于实现数字签名、数据完整性检测及消息验证等功能。

基于SM3算法的特点,在信息安全领域,SM3算法被用于保护密码学协议、数字证书和电子签名等数据的完整性。在区块链领域,SM3算法被用于加密货币的区块生成和链上交易的校验,确保区块链的安全性。此外,SM3算法还可以应用于密码学随机数的生成和伪随机序列的校验等领域,增加了数据的安全性和可靠性。

利用SM2算法和SM3算法对用户数据进行数字签名认证及完整性校验的过程如图5所示。

(1) 用户A发送的数据A经过SM3哈希算法运算生成摘要A。

(2) 摘要A经过用户A的私钥加密生成数字签名。

(3) 用户A的明文数据和数字签名经加密算法(SM1/SM2/SM4)加密成密文后发送给用户B。图5中加密算法以非对称加密算法SM2为例,即加解密使用不同密钥。

(4) 密文到达用户B处,经加密算法(SM1/SM2/SM4)解密后,还原成明文数据和数字签名。

(5) 用户B使用用户A的公钥解密数据包中的数字签名:

ο解密成功,数据来源合法,得到摘要A;

ο解密失败,数据来源非用户A,丢弃本次数据。

(6) 收到的数据包中的明文数据经过SM3哈希运算生成摘要A’。对比摘要A和摘要A’:

ο摘要A’=摘要A,数据完整;

ο摘要A’≠摘要A,数据被篡改,丢弃本次数据。

图5 SM2/SM3算法数字签名认证及完整性校验原理示意图

 

SM4算法的实现和应用

与SM1算法分类相同,SM4算法同样为分组对称加密算法,但SM4算法实现公开。

分组加密算法是将明文数据按固定长度进行分组,用同一密钥逐组加密,密文解密时同样使用相同密钥逐组解密。SM4算法实现简单,因此加解密速度较快,消耗资源少,主要用于大数据量的加密和解密,例如静态储存或数据信号传输通道中数据的加解密。

在网络安全领域,SM4算法被用于保护网络传输和存储的敏感数据,如银行卡信息、密码等。在物联网领域,SM4算法被用于物联网设备之间的通信和数据加密,确保物联网数据的隐私安全。此外,SM4算法还可以应用于区块链领域,保护加密货币的交易安全等领域,为相关系统和数据的安全提供了保障。

加解密模式

SM4算法支持ECB、CBC、CFB等多种分组模式,下文将介绍ECB和CBC两种基础模式。

•ECB模式

SM4算法基于ECB模式对数据加解密的过程如图6、图7所示。

(1) 发送端将明文按固定长度分组,对每个明文分组分别使用相同的密钥进行加密生成密文分组。完整的密文由所有密文分组按序排列组合而成。

(2) 接收端将密文按固定长度分组,对每个密文分组分别使用相同的密钥进行解密生成明文分组。所有明文分组按序排列组合而成完整的明文数据。

ECB模式实现简单,各段数据间互不影响,有利于并行运算,但相同的明文块会被加密成相同的密文块,不能提供严格的数据保密性。

图6 基于ECB模式加密明文示意图

图7 基于ECB模式解密密文示意图

•CBC模式

SM4算法基于CBC模式对明文加密的过程如图8所示。

(1) 将明文按固定长度分组。

(2) 明文分组1与初始向量IV进行异或运算,异或运算的结果经密钥加密后得到密文分组1。

(3) 剩余的明文分组依次与前一个密文分组进行异或运算后再加密,得到对应的密文分组。

(4) 完整的密文由所有密文分组按序排列组合而成。

图8 基于CBC模式加密明文示意图

 SM4算法基于CBC模式对密文解密的过程如图9所示。

(1) 将密文按固定长度分组后,对密文分组进行倒序处理。

(2) 对密文分组n先使用密钥进行解密,密文分组n解密后的数据与密文分组n-1进行逻辑逆运算,得到明文分组n。

(3) 同理,剩余的密文分组解密后再与前一个密文分组进行逻辑逆运算,得到对应的明文分组。

(4) 最后,密文分组1用密钥解密后的数据是与初始向量进行逻辑逆运算,然后得到明文分组1。

(5) 完整的明文由所有明文分组按序排列组合而成。

CBC模式安全性高于ECB,但明文块不能并行计算,且误差会传递下去。

图9 基于CBC模式解密明文示意图

SM2、SM3、SM4示例

一般使用SM2+3,或者SM3+4。

参考:国密算法SM2,SM3,SM4-java实现_基于java的sm2签名算法,sm4加密算法工具类-CSDN博客

非对称加密:

SM2+3使用两套SM2公私钥-请求加密使用一套,返回参数加密使用一套,SM3秘钥前后端协商一致

对称加密:

SM3+4使用SM4秘钥.SM3秘钥前后端协商一致

 

Maven引入包 

使用国密加密需要引入jar包,网上可以使用的jar包哟很多,本文使用bcprov-jdk15to18.jar,这个jar包适用于jdk1.5到jdk1.8,大家在使用bcprov的要主要版本对应,否则可能出现版本冲突或某些功能无法使用的问题。

        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15to18</artifactId>
            <version>1.79</version>
        </dependency>

bcprov-jdk15to18.jar的版本请前往Maven中央库搜索,查找对应JDK的版本。目前最新的是1.79.

 

package com.zxx.study.algorithm.datastruct.Algorithm.sm.sm;

import java.util.Map;

/**
 * @author zhouxx
 * @create 2024-12-04 10:33
 */
public class SM234Demo {
    public static void main(String[] args) throws Exception {
        //参数
        String str = "{\"test\":\"001\"}";
        System.out.println("参数:" + str);

        byte[] sourceData = str.getBytes();
        //获取公私钥
        Map<String, String> keymap = SM2Utils.generateKeyPair();
        String public_key = keymap.get("public_key");
        String private_key = keymap.get("private_key");
        System.out.println("公钥:" + public_key);
        System.out.println("私钥:" + private_key);
        //sm2+3
        String cipherText = SM2Utils.encrypt(Util.hexToByte(public_key), sourceData);
        System.out.println("sm2密文:"+cipherText);
        String plainTextEncripted = SM2Utils.decrypt(private_key,cipherText);
        System.out.println("sm2解密:"+plainTextEncripted);

        //验签 密文完整性校验
        String sm23 = SM3Utils.encryptPlus(str, public_key);
        System.out.println("sm3加密:"+sm23);


        //sm3+4
        String key = public_key.substring(0,16);
        System.out.println("key:"+key);
        String encryptStr = SM4Utils.EncryptStr(str, key);
        System.out.println("sm4密文:"+encryptStr);
        String DecryptStr = SM4Utils.DecryptStr(encryptStr,key);
        System.out.println("sm4解密:"+DecryptStr);
        //验签 密文完整性校验
        String sm34 = SM3Utils.encryptPlus(str, public_key);
        System.out.println("sm3加密:"+sm34);

    }
}

国密算法与国际标准算法的对比

国密算法和国际标准算法都是现代密码学中常用的加密算法,但在技术和优劣方面存在一些区别。常见国密算法与国际标准算法各参数性能的对比如下:

表1 加密算法DES、AES、SM1、SM4对比

表2 SM2、RSA算法对比

表3 杂凑算法SM3、SHA对比

国密算法的典型应用场景有哪些?

AD-WAN纵向IP/MPLS组网

国密算法可以与AD-WAN技术结合,应用于IP/MPLS纵向网场景。通过AD-WAN智能运维平台,实现国密配置一键下发,在网络中构建国密数据加密通道,实现基于国密的端到端的IPsec隧道保护。

图10 AD-WAN纵向网场景

国密算法在端到端的IPsec隧道中的工作原理如下:

(1) 在IKE密钥协商阶段,使用IKE协议进行密钥协商过程中,采用SM2算法生成会话密钥。

(2) 在身份认证阶段,本端使用SM2和SM3算法生成身份信息的数字签名,并使用SM1或SM4算法和会话密钥对身份信息和数字签名进行加密;对端收到加密的身份信息后,使用相同的会话密钥解密,然后通过SM2和SM3算法进行身份认证。

(3) 在数据传输阶段,本端使用SM2和SM3算法生成用户数据的数字签名,并使用SM1或SM4算法以及会话密钥对用户数据和数字签名进行加密;对端收到加密的用户数据后,使用相同的会话密钥解密,然后通过SM2和SM3算法进行数据完整性检查。

图11 国密算法在端到端的IPsec隧道中的工作原理

 

4G/5G VPDN业务组网

4G/5G VPDN(Virtual Private Dialup Network,虚拟专有拨号网络)业务是在4G/5G无线网络中采用拨号方式实现的一种虚拟专有网络业务。它利用L2TP技术为客户构建与互联网隔离的隧道,以满足客户分支和总部内网通信的需求。VPDN组网同时支持将L2TP和IPsec技术结合,通过L2TP完成用户认证确保接入安全,并利用IPsec保障通信数据安全。

图12 4G/5G VPDN业务组网

(1) 4G/5G VPDN组网中分支网关由4G/5G路由设备担任,通过拨号接入运营商网络。

(2) 运营商对4G/5G路由设备的APN(Access Point Name,接入点名称)、账户、SIM/USIM卡信息进行认证。

(3) 4G/5G路由设备认证通过后被运营商判断是VPDN用户,同时由运营商AAA服务器向LAC(L2TP Access Concentrator,L2TP访问集中器)设备下发L2TP隧道属性,LAC设备将基于下发的L2TP隧道属性信息向该VPDN用户所属总部的LNS(L2TP Network Server,L2TP网络服务器)设备发起隧道建立请求。

(4) L2TP隧道建立后,LAC设备会通过此隧道向LNS设备透传用户的认证信息。LNS设备向总部内网的AAA服务器发起对VPDN用户的二次认证,认证通过后为VPDN用户分配一个企业内网IP地址。分支终端用户和总部可以开始通信。

(5) 分支网关与总部网关设备上均安装有国密板卡,通过IPsec协商建立起端到端的IPsec隧道,使用国密算法对传输的数据报文进行加密保护和数据完整性检查。

(6) 经IPsec加密后的数据报文在LAC设备处进行L2TP封装后,通过L2TP隧道传输到LNS。

(7) LNS收到数据报文后首先对L2TP报文进行解封装,然后经过IPsec解密还原出数据报文,根据报文目的IP地址转发报文。

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐