国密算法sm代码java 国密算法sm全称

mt4的otp密码是什么

mt4的otp密码是(OTP,One-Time Password)又称一次性密码,是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术

创新互联公司"三网合一"的企业建站思路。企业可建设拥有电脑版、微信版、手机版的企业网站。实现跨屏营销,产品发布一步更新,电脑网络+移动网络一网打尽,满足企业的营销需求!创新互联公司具备承接各种类型的成都网站设计、成都网站制作项目的能力。经过10多年的努力的开拓,为不同行业的企事业单位提供了优质的服务,并获得了客户的一致好评。

目前,国际上动态口令OTP有2大主流算法,一个是RSA SecurID ,一个是OATH组织的OTP算法。如果在国内来说的话,另一个是国密的OTP密码算法。RSA SecurID使用AES对称算法,OATH使用HMAC算法,国密算法使用的国密SM1(对称)和SM3(HASH)算法。

硬件加密和国密算法的区别

随着智能手机普及率越来越高,虽然目前国内智能手机市场已经出现饱和,但并不代表智能手机产品本身就已经无懈可击,事实上,目前主流智能手机产品仍存在很多问题有待解决,对用户隐私信息安全的保护问题就是其中之一。但是,金立手机即将发布的“安全手机”,就可以达到硬件信息加密的目的。在这款手机的使用的技术中,有提到过一个技术:硬件加密

国密算法硬件加密到底是什么?今天,小编就给大家进行一下简单的科普!

国密算法由国家密码局发布的一系列算法、其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法。这里以某款手机为例:这款手机加密芯片具体包含SM1、SM2、SM3、SM4、SSF33等主流国密算法。

其中,SM1为对称分组加密算法,分组长度和密钥长度都为128位,算法安全保密强度及相关软硬件实现性能与美国AES加密标准相当,该算法不公开,仅以IP核的形式存在于芯片中。

SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,也是非对称算法,加密解密一对密钥,即一个密钥加密,另一个密钥解密。密钥长度256位。目前算法已公开,使用著名的ECC,即椭圆曲线算法。靠的就是计算椭圆曲线的复杂度来保障安全性。

SM3密码摘要算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准,也就是密码杂凑算法,杂凑值长度为32字节,此算法适用于商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。该算法中,对输入长度小于2的64次方的比特消息,经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特。

SM7算法也是一种分组密码算法,分组长度为128比特,密钥长度为128比特。SM7的算法文本目前没有公开发布。SM7适用于非接IC卡应用包括门禁卡等身份识别类应用,票务类应用,支付与通卡类应用,如校园一卡通等。

SSF33算法是以128位分组为单位进行运算,密钥长度为16字节,该算法也可以用于安全报文传送,和MAC机制密文运算。使用SSF33算法和基于3-DES(三重数据加密算法)的对称加密机制使用相同长度的密钥,能够同原有的基于3-DES的密钥管理兼容,其区别在于分组长度不同。SSF33的具体算法机制并未公开。

对于这些高大上的知识,相信大多数的读者还是看得云里雾里。总而言之,如果你是一位偏向于商务的用户,或许对智能手机的安全性能有着很高的需求,或者对个人隐私信息的安全非常在意,选用一款配备硬件加密技术的手机就显得十分重要了,现阶段,手机硬件加密是有所欠缺的,但小编也相信,以后会有更多的手机厂商会采用这种硬件加密技术,我们的隐私也会越来越安全!

常见密码技术简介

##

密码技术在网络传输安全上的应用

随着互联网电子商务和网络支付的飞速发展,互联网安全已经是当前最重要的因素之一。作为一名合格的软件开发工程师,有必要了解整个互联网是如何来保证数据的安全传输的,本篇文章对网络传输安全体系以及涉及到的算法知识做了一个简要的介绍,希望大家能够有一个初步的了解。

###密码技术定义

简单的理解,密码技术就是编制密码和破译密码的一门技术,也即是我们常说的加密和解密。常见的结构如图:

其中涉及到的专业术语:

1.秘钥:分为加密秘钥和解密秘钥,两者相同的加密算法称为对称加密,不同的称为非对称加密;

2.明文:未加密过的原文信息,不可以被泄露;

3.密文:经过加密处理后的信息,无法从中获取有效的明文信息;

4.加密:明文转成密文的过程,密文的长度根据不同的加密算法也会有不同的增量;

5.解密:密文转成明文的过程;

6.加密/解密算法:密码系统使用的加密方法和解密方法;

7.攻击:通过截获数据流、钓鱼、木马、穷举等方式最终获取秘钥和明文的手段。

###密码技术和我们的工作生活息息相关

在我们的日常生活和工作中,密码技术的应用随处可见,尤其是在互联网系统上。下面列举几张比较有代表性的图片,所涉及到的知识点后面都会一一讲解到。

1.12306旧版网站每次访问时,浏览器一般会提示一个警告,是什么原因导致的? 这样有什么风险呢?

2.360浏览器浏览HTTPS网站时,点开地址栏的小锁图标会显示加密的详细信息,比如百度的话会显示```AES_128_GCM、ECDHE_RSA```,这些是什么意思?

3.在Mac系统的钥匙串里有很多的系统根证书,展开后有非常多的信息,这些是做什么用的?

4.去银行开通网上支付都会附赠一个U盾,那U盾有什么用呢?

##如何确保网络数据的传输安全

接下来我们从实际场景出发,以最常见的客户端Client和服务端Server传输文件为例来一步步了解整个安全体系。

####1. 保密性

首先客户端要把文件送到服务端,不能以明文形式发送,否则被黑客截获了数据流很容易就获取到了整个文件。也就是文件必须要确保保密性,这就需要用到对称加密算法。 

** 对称加密: **加密和解密所使用的秘钥相同称为对称加密。其特点是速度快、效率高,适用于对较大量的数据进行加密。常见的对称加密算法有DES、3DES、AES、TDEA、RC5等,让我们了解下最常见的3DES和AES算法:

** DES(Data Encryption Standard): **1972年由美国IBM研制,数学原理是将明文以8字节分组(不足8位可以有不同模式的填充补位),通过数学置换和逆置换得到加密结果,密文和明文长度基本相同。秘钥长度为8个字节,后有了更安全的一个变形,使用3条秘钥进行三次加密,也就是3DES加密。

**3DES:**可以理解为对明文进行了三次DES加密,增强了安全程度。

** AES(Advanced Encryption Standard): **2001年由美国发布,2002年成为有效标准,2006年成为最流行的对称加密算法之一。由于安全程度更高,正在逐步替代3DES算法。其明文分组长度为16字节,秘钥长度可以为16、24、32(128、192、256位)字节,根据秘钥长度,算法被称为AES-128、AES-192和AES-256。

对称加密算法的入参基本类似,都是明文、秘钥和模式三个参数。可以通过网站进行模拟测试:[]()。其中的模式我们主要了解下ECB和CBC两种简单模式,其它有兴趣可自行查阅。

** ECB模式(Electronic Codebook Book): **这种模式是将明文分成若干小段,然后对每一段进行单独的加密,每一段之间不受影响,可以单独的对某几段密文进行解密。

** CBC模式(Cipher Block Chaining): **这种模式是将明文分成若干小段,然后每一段都会和初始向量(上图的iv偏移量)或者上一段的密文进行异或运算后再进行加密,不可以单独解密某一断密文。

** 填充补位: **常用为PKCS5Padding,规则为缺几位就在后面补几位的所缺位数。,比如明文数据为```/x01/x01/x01/x01/x01/x01```6个字节,缺2位补```/x02```,补完位```/x01/x01/x01/x01/x01/x01/x02/x02```。解密后也会按照这个规则进行逆处理。需要注意的是:明文为8位时也需要在后面补充8个```/x08```。

####2. 真实性

客户端有了对称秘钥,就需要考虑如何将秘钥送到服务端,问题跟上面一样:不能以明文形式直接传输,否则还是会被黑客截获到。这里就需要用到非对称加密算法。

** 非对称加密: **加密和解密秘钥不同,分别称为公开秘钥(publicKey)和私有秘钥(privateKey)。两者成对出现,公钥加密只能用私钥解密,而私钥加密也只能用公钥加密。两者不同的是:公钥是公开的,可以随意提供给任何人,而私钥必须保密。特点是保密性好,但是加密速度慢。常见的非对称加密算法有RSA、ECC等;我们了解下常见的RSA算法:

** RSA(Ron Rivest、Adi Shamir、Leonard Adleman): **1977年由麻省理工学院三人提出,RSA就是他们三个人的姓氏开头字母拼在一起组成的。数学原理是基于大数分解。类似于```100=20x5```,如果只知道100的话,需要多次计算才可以试出20和5两个因子。如果100改为极大的一个数,就非常难去试出真正的结果了。下面是随机生成的一对公私钥:

这是使用公钥加密后结果:

RSA的这种特性就可以保证私钥持有者的真实性,客户端使用公钥加密文件后,黑客就算截获到数据因为没有私钥也是无法解密的。

** Tips: **

+** 不使用对称加密,直接用RSA公私钥进行加密和解密可以吗? **

答案:不可以,第一是因为RSA加密速度比对称加密要慢几十倍甚至几百倍以上,第二是因为RSA加密后的数据量会变大很多。

+** 由服务端生成对称秘钥,然后用私钥加密,客户端用公钥解密这样来保证对称秘钥安全可行吗? **

答案:不可行,因为公钥是公开的,任何一个人都可以拿到公钥解密获取对称秘钥。

####3. 完整性

当客户端向服务端发送对称秘钥加密后的文件时,如果被黑客截获,虽然无法解密得到对称秘钥。但是黑客可以用服务端公钥加密一个假的对称秘钥,并用假的对称秘钥加密一份假文件发给服务端,这样服务端会仍然认为是真的客户端发送来的,而并不知道阅读的文件都已经是掉包的了。

这个问题就需要用到散列算法,也可以译为Hash。常见的比如MD4、MD5、SHA-1、SHA-2等。

** 散列算法(哈希算法): **简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。而且该过程是不可逆的,无法通过摘要获得原文。

** SHA-1(Secure Hash Algorithm 1): **由美国提出,可以生成一个20字节长度的消息摘要。05年被发现了针对SHA-1的有效攻击方法,已经不再安全。2010年以后建议使用SHA-2和SHA-3替代SHA-1。

** SHA-2(Secure Hash Algorithm 2): **其下又分为六个不同算法标准:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA512/256。其后面数字为摘要结果的长度,越长的话碰撞几率越小。SHA-224的使用如下图:

客户端通过上面的散列算法可以获取文件的摘要消息,然后用客户端私钥加密后连同加密的文件发给服务端。黑客截获到数据后,他没有服务端私钥无法获取到对称秘钥,也没有客户端私钥无法伪造摘要消息。如果再像上面一样去掉包文件,服务端收到解密得到摘要消息一对比就可以知道文件已经被掉包篡改过了。

这种用私钥对摘要消息进行加密的过程称之为数字签名,它就解决了文件是否被篡改问题,也同时可以确定发送者身份。通常这么定义:

** 加密: **用公钥加密数据时称为加密。

** 签名: **用私钥加密数据时称为签名。

####4. 信任性

我们通过对称加密算法加密文件,通过非对称加密传输对称秘钥,再通过散列算法保证文件没被篡改过和发送者身份。这样就安全了吗?

答案是否定的,因为公钥是要通过网络送到对方的。在这期间如果出现问题会导致客户端收到的公钥并不一定是服务端的真实公钥。常见的** 中间人攻击 **就是例子:

** 中间人攻击MITM(Man-in-the-MiddleAttack): **攻击者伪装成代理服务器,在服务端发送公钥证书时,篡改成攻击者的。然后收到客户端数据后使用攻击者私钥解密,再篡改后使用攻击者私钥签名并且将攻击者的公钥证书发送给服务器。这样攻击者就可以同时欺骗双方获取到明文。

这个风险就需要通过CA机构对公钥证书进行数字签名绑定公钥和公钥所属人,也就是PKI体系。

** PKI(Privilege Management Infrastructure): **支持公钥管理并能支持认证、加密、完整性和可追究性的基础设施。可以说整个互联网数据传输都是通过PKI体系进行安全保证的。

** CA(Certificate Authority): **CA机构就是负责颁发证书的,是一个比较公认的权威的证书发布机构。CA有一个管理标准:WebTrust。只有通过WebTrust国际安全审计认证,根证书才能预装到主流的浏览器而成为一个全球可信的认证机构。比如美国的GlobalSign、VeriSign、DigiCert,加拿大的Entrust。我国的CA金融方面由中国人民银行管理CFCA,非金融CA方面最初由中国电信负责建设。

CA证书申请流程:公司提交相应材料后,CA机构会提供给公司一张证书和其私钥。会把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式写到证书里面,然后用一个指纹算法计算出这些数字证书内容的一个指纹,并把指纹和指纹算法用自己的私钥进行加密。由于浏览器基本都内置了CA机构的根证书,所以可以正确的验证公司证书指纹(验签),就不会有安全警告了。

但是:所有的公司其实都可以发布证书,甚至我们个人都可以随意的去发布证书。但是由于浏览器没有内置我们的根证书,当客户端浏览器收到我们个人发布的证书后,找不到根证书进行验签,浏览器就会直接警告提示,这就是之前12306打开会有警告的原因。这种个人发布的证书,其实可以通过系统设置为受信任的证书去消除这个警告。但是由于这种证书机构的权威性和安全性难以信任,大家最好不要这么做。

我们看一下百度HTTPS的证书信息:

其中比较重要的信息:

签发机构:GlobalSign Root CA;

有效日期:2018-04-03到2019-05-26之间可用;

公钥信息:RSA加密,2048位;

数字签名:带 RSA 加密的 SHA-256 ( 1.2.840.113549.1.1.11 )

绑定域名:再进行HTTPS验证时,如果当前域名和证书绑定域名不一致,也会出现警告;

URI:在线管理地址。如果当前私钥出现了风险,CA机构可以在线吊销该证书。

####5. 不可抵赖性

看起来整个过程都很安全了,但是仍存在一种风险:服务端签名后拒不承认,归咎于故障不履行合同怎么办。

解决方法是采用数字时间戳服务:DTS。

** DTS(digital time-stamp): **作用就是对于成功的电子商务应用,要求参与交易各方不能否认其行为。一般来说,数字时间戳产生的过程为:用户首先将需要加时间戳的文件用Hash算法运算形成摘要,然后将该摘要发送到DTS。DTS在加入了收到文件摘要的日期和事件信息后再对该文件进行数字签名,然后送达用户。

####6. 再次认证

我们有了数字证书保证了身份的真实性,又有了DTS提供的不可抵赖性。但是还是不能百分百确定使用私钥的就是合法持有者。有可能出现被别人盗用私钥进行交易的风险。

解决这个就需要用到强口令、认证令牌OTP、智能卡、U盾或生物特征等技术对使用私钥的当前用户进行认证,已确定其合法性。我们简单了解下很常见的U盾。

** USB Key(U盾): **刚出现时外形比较像U盘,安全性能像一面盾牌,取名U盾。其内部有一个只可写不可读的区域存储着用户的私钥(也有公钥证书),银行同样也拥有一份。当进行交易时,所有涉及到私钥的运算都在U盾内部进行,私钥不会泄露。当交易确认时,交易的详细数据会显示到U盾屏幕上,确认无误后通过物理按键确认就可以成功交易了。就算出现问题黑客也是无法控制U盾的物理按键的,用户可以及时取消避免损失。有的U盾里面还有多份证书,来支持国密算法。

** 国密算法: **国家密码局针对各种算法制定了一些列国产密码算法。具体包括:SM1对称加密算法、SM2公钥算法、SM3摘要算法、SM4对称加密算法、ZUC祖冲之算法等。这样可以对国产固件安全和数据安全进行进一步的安全控制。

## HTTPS分析

有了上面的知识,我们可以尝试去分析下HTTPS的整个过程,用Wireshark截取一次HTTPS报文:

Client Hello: 客户端发送Hello到服务端443端口,里面包含了随机数、客户端支持的加密算法、客户端的TLS版本号等;

Server Hello: 服务端回应Hello到客户端,里面包含了服务端选择的加密套件、随机数等;

Certificate: 服务端向客户端发送证书

服务端计算对称秘钥:通过ECDH算法得到对称秘钥

客户端计算对称秘钥:通过ECDH算法得到对称秘钥

开始用对称秘钥进行加密传输数据

其中我们又遇到了新的算法:DH算法

** DH(Diffie-Hellman): **1976年由Whitefield与Martin Hellman提出的一个奇妙的秘钥交换协议。这个机制的巧妙在于可以通过安全的方式使双方获得一个相同的秘钥。数学原理是基于原根的性质,如图:

*** DH算法的用处不是为了加密或解密消息,而是用于通信双方安全的交换一个相同的秘钥。 ***

** ECDH: **基于ECC(椭圆曲线密码体制)的DH秘钥交换算法,数学原理是基于椭圆曲线上的离散对数问题。

** ECDHE: **字面少了一个E,E代表了临时。在握手流程中,作为服务器端,ECDH使用证书公钥代替Pb,使用自身私钥代替Xb。这个算法时服务器不发送server key exchange报文,因为发送certificate报文时,证书本身就包含了Pb信息。

##总结

| 算法名称  | 特点 | 用处 | 常用算法名 |

| --- | :--- | :---: | ---: |

| 对称加密  | 速度快,效率高| 用于直接加密文件 | 3DES、AES、RC4 |

| 非对称加密  | 速度相对慢,但是确保安全 | 构建CA体系 | RSA、ECC |

| 散列算法 | 算出的摘要长度固定,不可逆 | 防止文件篡改 | SHA-1、SHA-2 |

| DH算法 | 安全的推导出对称秘钥 | 交换对称秘钥 | ECDH |

----

解析|国密SSL特性 :属于中国的密码算法和传输层安全协议

国密SSL产生背景

随着互联网技术的兴盛和网络应用的普及,网络安全问题日益突出,大量的数据在网络上传递并遭受攻击和威胁,数据的安全性受到越来越多人的重视,因此产生了多种安全协议和相关规范。SSL协议就是在这种背景下由Netscape提出的,其中SSLv3.0自1996提出并得到大规模应用成为了业界标准,在2015年才被弃用。1999年,IETF收纳了SSLv3.0并以此为基础提出TLS规范,版本已由TLS1.0发展到如今的TLS3.0,是被应用最广泛的安全协议之一。

安全协议的核心和基础就是密码算法,为了确保我国的信息安全,国内的相关安全产品以及协议如HTTPS、SSL VPN、STMPS等就不能直接使用TLS标准规范和密码算法,因此必须要有一个属于中国的密码算法和传输层安全协议,国密SSL协议顺势产生。

   国密SSL协议概述

目前TLS版本包含TLS1.0、TLS1.1、TLS1.2、TLS1.3以及GMTLS1.1。

国密 SSL协议在GM/T中不是一个独立的协议标准[1],而是按照相关密码政策、法规结合我国实际情况并参照RFC4346 TLS1.1规范,在GM/T 0024-2014《SSLVPN技术规范》中对其进行了相关定义。主要不同体现在以下几方面:

注[1]:随着国家越发重视信息安全,在2020年11月1日正式实施了《GB/T38636-2020信息安全技术传输层密码协议(TLCP)》,现阶段使用者相对较少,因此本文依旧按照《SSL VPN技术规范》进行介绍。

国密SSL协议包括记录层协议、握手协议族(握手协议、密码规格变更协议、报警协议)和网关到网关协议。

记录层协议是分层次的,每一层都包括长度字段、描述字段和内容字段;其会接收将要被传输的消息,将数据分段、压缩(可选)、计算HMAC、加密,然后传输,接收到的数据经过解密、验证、解压缩(可选)、重新封装然后传送给高层应用。

国密SSL握手协议族由密码规格变更协议、握手协议和报警协议3个子协议组成,用于通信双方协商出供记录层使用的安全参数,进行身份验证以及向对方报告错误等。

密码规格变更协议用于通知密码规格的改变,即通知对方使用刚协商好的安全参数来保护揭晓了的数据。客户端和服务端都要在安全参数协商完毕之后、握手结束消息之前发送此消息。

报警协议用于关闭连接的通知以及对整个连接过程中出现的错误行为进行报警,其中关闭通知由发起者发送,错误报警由错误的发现者发送。报警消息的长度为两个字节,分别为报警级别和报警内容。

握手协议是在记录层协议之上的协议,用于协商安全参数,是通过记录层协议传输的。握手消息应当按照规定流程顺序进行发送,否则将会导致致命错误,不需要的握手消息可以被接收方忽略。

在Client支持的密码套件列表中,Client会按照密码套件使用的优先级顺序进行排列,优先级最高的密码套件会排在首位。国密SSL支持的密码套件列表如下所示:

在国密SSL标准中实现ECC和ECDHE的算法是SM2,实现IBC和IBSDH的算法是SM9,RSA算法的使用需要符合国家密码管理主管部门的要求。

注[2]:在《GB/T38636-2020信息安全技术传输层密码协议(TLCP)》标准中增加了GCM的密码套件,并且删除了涉及SM1和RSA的密码套件。

网关到网关协议定义了SSL VPN之间建立网关到网关的传输层隧道,对IP数据报文进行安全传输时所采用的报文格式(包括控制报文与数据报文)以及控制报文交换过程和数据报文封装过程。

国密SSL测试的需求

为了保障数据安全,国家密码管理局要求相关系统均要进行国密改造,改用国密的密码算法,目前国密算法已经成为了数据安全保障的基础。因此国密设备在实验室的概念设计、研发设计、生产、部署验收都有测试的必要。

在概念设计和研发阶段需要确定设备是否符合相关要求,能否正常的进行国密SSL加密以对数据进行保护;设备研发成型阶段还需要进行整机测试,验证设备各项功能和性能是否满足实际应用;在部署验收阶段也需要进行整体测试,验证国密设备在真实网络环境中能否正常对数据进行传输以及与整网的兼容适配。

国密测试分为功能测试和性能测试,目前市场上针对功能测试主要采用的是利用具备同样国密功能的设备与被测设备对接测试,而性能测试则是采用自研类软件模拟多终端进行测试,测试能力相对较弱且操作复杂,因此专业的测试工具在国密SSL的研发和推广过程中就愈发重要。

信而泰国密SSL测试方案

信而泰经过多年潜心研制,推出了基于PCT架构的新一代B/S架构测试平台ALPS,该平台支持真实的应用层流量仿真。HTTPS /SMTPS Application Simulator是一个7层测试组件,可基于国密SSL模拟现实网络环境中的HTTPS/SMTPS协议流量,进而测试设备处理客户端应用层流量的能力。该平台可以针对防火墙、负载均衡、VPN、网关等应用层安全设备进行相关测试,测试拓扑如下图所示:

信而泰国密SSL支持以下测试功能和特性:

HTTPS/SMTPS应用流配置界面:

SSL Client Session统计界面:

SSL Server Session统计界面:

https国秘承认么

https国秘承认的,自去年2月24日俄罗斯正式开始对乌克兰实施特别军事行动,一场看不见硝烟的网络战也悄然上演。不论是俄罗斯还是乌克兰均遭到多起网络攻击,其中主要涉及外交部、教育部、内政部、能源部、安全局等政府部门和国防部、武装部队等多个军方网站以及银行、电信、电力、交通等关键基础设施。随着国际和民间黑客组织的加入,两方的战争快速蔓延成一场全球化的网络信息战。此外,相关利益方发起了对俄罗斯的制裁:国际上主流CA机构不再为俄罗斯提供数字证书服务,甚至吊销俄罗斯相关的一些国家基础设施网站的证书。这让俄罗斯不得不开始建立国家CA机构,寻求自主可控的国家化网络安全解决方案。(部分俄罗斯金融银行机构的SSL证书被吊销列表)我国政府其实早在10年前已经对网络安全引起高度重视,并随之相继出台了《密码法》、《网络安全法》、《数据安全法》、《关键信息基础设施保护条例》等重要法规,这些法规从不同层面强调了实现网络安全技术自主可控的重要性,明确了对关键信息基础设施的保护是世界各国网络空间博弈的重要战场。国密算法就是我国在密码核心领域自主研发的一套数据加密处理系列算法,主要有SM1,SM2,SM3,SM4,密钥长度和分组长度均为128位,是国家密码局认定的国产密码算法。在应用环境不可控的情况下,使用自主可控的国产密码技术加密网络重要信息数据,对提升我国网络信息安全与自主可控水平,具有重要战略意义。随着国家相关监管机构出台多项措施推广国密算法应用,我国金融银行、电子政务、教育、交通运输、民生保障等关键设施领域的企事业单位对国密算法的HTTPS应用需求也与日俱增。

使用sm3摘要的信息要如何还原

先介绍一下HASH吧

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。(来自百度百科)

哈希函数由于其特性,在密码学中占有重要地位

由于具有前图像抗性和抗碰撞性,因此哈希函数非常适合用于存储密码。 因此,存储在数据库中的值是原始形式的用户ID和密码的哈希值。 因此,每当您将Id和密码输入系统时,它都会搜索user-Id(如果可用),它将与输入密码的哈希值和数据库中已经存在的密码匹配。 如果两者相同,则授予访问权限。

为了保持数据完整性,发送方将消息及其哈希值发送给用户。 然后,接收方检查消息的哈希值是否与发送方发送的哈希值相同。 这样可以确保在发送时未对数据进行任何修改。 完整性检查过程可以在电子邮件系统,消息传递应用程序等中看到。但是,由于一切都在后端进行,因此用户无法识别此过程。

签名通常用于将签名者绑定到消息。 因此,数字签名是将个人或实体绑定到数字数据的技术。 此绑定确保发送数据的人对此负全责,并且此绑定可以由接收方和第三方验证。 此数字签名也使用哈希函数存储,因此任何人的签名都不会被盗用或滥用。

SM3算法大致过程

简单来说就是:填充-迭代压缩-输出选裁,之后生成长度为256bit的杂凑值。

以下SM3算法过程来源于GMT 0004-2012 SM3密码杂凑算法.pdf

1、填充

2、迭代压缩

其中CF压缩函数内容比较复杂,也是SM3算法的主题内容之一。下面为CF函数的实现过程。

GMSSL中SM3算法的实现

GMSSL中在实现了SM3散列函数的同时,也把SM3算法集成进了MAC即消息认证码中实现了基于SM3的HMAC函数。

\GmSSL-master\crypto\sm3\sm3.c文件定义了算法中的一系列函数,用于压缩函数的实现与计算。

经过一层层封装调用,最后集成了一个void sm3函数,其中实现了对消息块进行压缩的函数、CF函数的实现等底层函数,不再在此赘述。

void sm3(const unsigned char *msg, size_t msglen,

unsigned char dgst[SM3_DIGEST_LENGTH])

{

sm3_ctx_t ctx;

sm3_init(ctx);

sm3_update(ctx, msg, msglen);

sm3_final(ctx, dgst);

memset(ctx, 0, sizeof(sm3_ctx_t));

}

登录后复制

简单介绍一下消息认证码

消息认证码MAC可以简单的理解成带有密钥的哈希函数:密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。构造方法由M.Bellare提出,安全性依赖于Hash函数,故也称带密钥的Hash函数。消息认证码是基于密钥和消息摘要所获得的一个值,可用于数据源发认证和完整性校验。

在发送数据之前,发送方首先使用通信双方协商好的散列函数计算其摘要值。在双方共享的会话密钥作用下,由摘要值获得消息验证码。之后,它和数据一起被发送。接收方收到报文后,首先利用会话密钥还原摘要值,同时利用散列函数在本地计算所收到数据的摘要值,并将这两个数据进行比对。若两者相等,则报文通过认证。

一般的HMAC函数是基于MD5、SHA-1等国际主流HASH函数,王小云院士破解了MD5算法之后,基于MD5的MAC函数、签名等便不再安全。于是以王小云、李铮为主设计了SM3哈希算法,并基于SM3构造了SM3-HMAC函数,作为国密的MAC函数。

下面为HMAC的伪代码:

HMAC_k(m) = H((k ^ opad), H((k ^ ipad), m))

function hmac(key, message)

opad = [0x5c * blocksize]

ipad = [0x36 * blocksize]

if (length(key) blocksize) then

key = hash(key)

end if

for i from 0 to length(key) - 1 step 1

ipad[i] = ipad[i] XOR key[i]

opad[i] = opad[i] XOR key[i]

end for

return hash(opad || hash(ipad || message))

end function

与SM3算法的实现差不多,也是由init update final三个主要函数构成。整体架构并没有与国际上通用的HMAC函数有比较大的差别,就是把国际上的MD5和SHA-1算法换成了SM3算法,并嵌入了GMSSL中,可以与OPENSSL通用。

小结

由于MD5和SHA-1的破解,对新型更加安全的密码杂凑算法的需求更加迫切。美国在2010年之前逐步替换MD5和SHA-1,改用新型的SHA-224、SHA-256、SHA-384及SHA-512函数,而我国,经过王小云院士的努力,SM3应运而生。

SM3是我国自主研发的一种新型的哈希算法,打破了西方国家在哈希密码上的垄断。2018年11月22日,国家密码管理局公布我国的SM3杂凑密码算法已经进入到国际标准中,我国SM2/3/9密码算法正式成为ISO/IEC国际标准。

SM3算法适用于商用密码应用中的数字签名和验证,是在SHA-256基础上改进实现的一种算法。SM3算法采用Merkle-Damgard结构,消息分组长度为512位,摘要值长度为256位。SM3算法的压缩函数与SHA-256的压缩函数具有相似的结构,但是SM3算法的设计更加复杂,比如压缩函数的每一轮都使用2个消息字。现今为止,SM3算法的安全性相对较高。

哈希函数在密码学中的地位不必多说,而纯国产哈希函数SM3对于我国密码行业更是非常重要。在对GMSSL中SM3实现的源代码的分析以及上网搜集资料并学习的过程中,使我对SM3有了初步的认识,对于以后基于GMSSL编程的学习有一定的帮助。


当前名称:国密算法sm代码java 国密算法sm全称
分享网址:http://pwwzsj.com/article/docogds.html