浅谈DES、RAS、SHA-256与SM一、SM二、SM三、SM4区别

咱们今天浅谈一下,目前密码学中应用最为普遍的一些加密算法。并对这些算法作一些比较。
1、概念介绍web

国密算法是什么?
国密算法是由国家密码局发布,包含SM一、SM二、 SM三、 SM四、 SSF33算法。
国际算法是什么?
国际算法由美国的安全局发布,是现今最通用的商用算法。
密码学中应用最为普遍算法都有哪些?
密码学中应用最为普遍的的三类算法:
一、对称算法(分组密码算法)表明分组密码算法(DES和SM4);
二、非对称算法(公钥密码算法)表明公钥密码算法(RSA和SM2);
三、杂凑算法(摘要算法)表明摘要算法(HAS-256系列和SM3);
下面介绍一下国际算法、国密算法及二者的区别。算法

2、算法区别与比较windows

2.1分组密码算法(对称算法)——国际DES、国密SM4安全

分组密码就是将明文数据按固定长度进行分组,而后在同一密钥控制下逐组进行加密,从而将各个明文分组变换成一个等长的密文分组的密码。其中二进制明文分组的长度称为该分组密码的分组规模。
分组密码的实现原则以下:svg

(1) 必须实现起来比较简单,知道密钥时加密和脱密都十分容易,适合硬件和(或)软件实现.

(2) 加脱密速度和所消耗的资源和成本较低,能知足具体应用范围的须要.函数

分组密码的设计基本遵循混淆原则和扩散原则。工具

(1)混淆原则就是将密文、明文、密钥三者之间的统计关系和代数关系变得尽量复杂,使得敌手即便得到了密文和明文,也没法求出密钥的任何信息;即便得到了密文和明文的统计规律,也没法求出明文的任何信息。

(2)扩散原则就是应将明文的统计规律和结构规律散射到至关长的一段统计中去。也就是说让明文中的每一位影响密文中的尽量多的位,或者说让密文中的每一位都受到明文中的尽量多位的影响。性能

2.1.1 DES算法学习

DES算法是在美国NSA(国家安全局)资助下由IBM公司开发的密码算法,其初衷是为政府非机密的敏感信息提供较强的加密保护。它是美国政府担保的第一种加密算法,并在1977年被正式做为美国联邦信息处理标准。DES主要提供非军事性质的联邦政府机构和私营部门使用,并迅速成为名声最大,使用最广的商用密码算法。区块链

2.1.2 SM4算法
2006年我国公布了无限局域网产品使用的SM4密码算法。这是我国第一次公布本身的商用密码算法。
 国际的DES算法和国产的SM4算法的目的都是为了加密保护静态储存和传输信道中的数据,主要特性以下:

DES算法 SM4算法
计算基础 二进制 二进制
算法结构 使用标准的算术和逻辑运算、先代替后 置换,不含非线性变换 基本轮函数加迭代、含非线性变换
加解密算法是否相同
计算轮数 16轮(3des为16轮*3) 32轮
分组长度 64位 128位
秘钥长度 64位(3DES为128位) 128位
有效秘钥长度 56位(3des位112位) 128位
实现难度 易于实现 易于实现
实现性能 软件实现慢、硬件实现快 软件实现和硬件实现都快
安全性 较低(3des较高) 算法教新,还未通过现实校验

分析:算法上看,国产SM4算法在计算过程当中增长非线性变换,理论上能大大提升其算法的安全性,而且由专业机构进行了密码分析,民间也对21轮SM4进行了差分密码分析,结论均为安全性较高。

2.2公钥密码算法(非对称算法)——国际RSA、国密SM2

公钥密码学与其余密码学彻底不一样, 使用这种方法的加密系统,不只公开加密算法自己,也公开了加密用的密钥。

公钥密码系统与只使用一个密钥的对称传统密码不一样,算法是基于数学函数而不是基于替换和置换。公钥密码学是非对称的,它使用两个独立的密钥,即密钥分为公钥和私钥,所以称双密钥体制。双钥体制的公钥能够公开,所以称为公钥算法。

公钥算法的出现,给密码的发展开辟了新的方向。公钥算法虽然已经历了20多年的发展,但仍具备强劲的发展势头,在鉴别系统和密钥交换等安全技术领域起着关键的做用

公钥算法的加密与解密由不一样的密钥完成,而且从加密密钥获得解密密钥在计算上是不可行的。一般,公钥算法的两个密钥中任何一个均可以做为加密而另外一个用做解密,但不是全部的公钥算法都是如此。

2.2.1RSA算法

RSA算法由Rivest、Shamir、Adleman于1978年首次发表,是迄今为止最容易理解和实现的公钥算法,已经受住了多年深刻的攻击,其理论基础是一种特殊的可逆模幂运算,其安全性基于分解大整数的困难性。

RSA算法既可用于加密,又可用于数字签名,已获得普遍采用,并被许多标准化组织(如ISO、ITU、IETF和SWIFT等)接纳。目前许多国家标准仍采用RSA算法或它的变型。

RSA算法的实现以下:

  • 实现者寻找出两个大素数p和q
  • 实现者计算出n=pq 和φ(n)=(p-1)(q-1)
  • 实现者选择一个随机数e (0<e<></e<>
  • 实现者使用展转相除法计算d=e-1(modφ(n))
  • 实现者在目录中公开n和e做为公钥

密码分析者攻击RSA体制的关键点在于如何分解n。若分解成功使n=pq,则能够算出φ(n)=(p-1)(q-1),而后由公开的e,解出秘密的d。因此说RSA算法的安全性基于分解大整数的困难性。

2.2.2 SM2算法

SM2算法由国家密码管理局于2010年12月17日发布,全称为椭圆曲线算法。
椭圆曲线并非椭圆,之因此称为椭圆曲线是由于它们是用三次方程来表示的,而且该方程与计算椭圆周长的方程类似。通常而言,椭圆曲线的三次方程形为:

y2+axy+by=x3+cx^2+dx+e [其中a,b,c,d和e是知足某些条件的实数,由于方程中的指数最高是3,因此咱们称之为三次方程,或者说方程的次数为3]

SM2算法使用的方程为:y^2= x^3 + ax + b

SM2算法实现以下:

  • 选择Ep(a,b)的元素G,使得G的阶n是一个大素数
  • G的阶是指知足nG=O的最小n值
  • 秘密选择整数k,计算B=kG,而后公开(p,a,b,G,B),B为公钥,保密k,k为私钥

加密M:
先把消息M变换成为Ep(a,b)中一个点Pm,而后,选择随机数r,计算密文Cm={rG,Pm+rP),若是r使得rG或者rP为O,则要从新选择r。

解密Cm:
(Pm+rP)-k(rG)=Pm+rkG-krG=Pm

SM2算法的安全性基于一个数学难题”离散对数问题ECDLP”实现,即考虑等式Q=KP,其中Q、P属于Ep(a,b),K<p,则:1) p="" 已知q和p,计算k,是困难的。<="">

现今对椭圆曲线研究的时间短,通过许多优秀的数学家的努力,至今一直没有找到亚指数级算法。正是因为目前所知求解ECDLP的最好方法是指数级的,这使得咱们选用SM2算法做加解密及数字签名时,所要求的密钥长度比RSA要短得多。

国际的RSA算法和国产的SM2算法的主要特性对好比下:

RAS 算法 SM2 算法
计算结构 基于特殊的可逆模幂运算 基于椭圆曲线
计算复杂度 亚指数级 彻底指数级
相同的安全性能下所须要的公钥位数 较多 较少(160位的SM2与1024位的RSA具备相同的安全等级)
密钥生成速度 较RSA算法快百倍以上
解密加密速度 通常 较快
安全性 基于分解大整数的难度 基于离散对数问题、fcdlp数学难题

2.3摘要算法(签名算法) 国际SHA-256与国密SM3

摘要函数在密码学中具备重要的地位,被普遍应用在数字签名,消息认证,数据完整性检测等领域。摘要函数一般被认为须要知足三个基本特性:碰撞稳固性,原根稳固性和第二原根稳固性。

2005年,Wang等人给出了MD5算法和SHA-1算法的碰撞攻击方法,现今被普遍应用的MD5算法和SHA-1算法再也不是安全的算法。

SM3密码摘要算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准。SM3算法适用于商用密码应用中的数字签名和验证,是在SHA-256基础上改进实现的一种算法。SM3算法采用Merkle-Damgard结构,消息分组长度为512位,摘要值长度为256位。

SM3算法的压缩函数与SHA-256的压缩函数具备类似的结构,可是SM3算法的设计更加复杂,好比压缩函数的每一轮都使用2个消息字。

现今为止,SM3算法的安全性相对较高。

安全是智能卡的核心,而算法是安全的基础。

3、算法使用的案例分析

3.1 国密SM2在中国金融体系中的使用

SM2是国密局推出的一种他们本身说具备自主知识产权的非对称商用密码算法。算法自己是基于椭圆曲线(ECC)算法的,因此要讲SM2, 先要弄懂ECC,彻底理解ECC算法须要必定的数学功底,由于涉及到射影平面坐标系,齐次方程求解, 曲线的运算规则等概念。

3.1.1分析椭圆曲线

上面是两个不一样椭圆曲线在坐标系中的几何表示, 不过这个坐标系不是二维坐标系,而是射影坐标系。能够用空间思惟想像一下(可是注意不是三维坐标系), 打个比方,你站在太阳底下,地上有你的影子,你自己是在一个二维坐标系(把你想像成一个纸片),和你的影子一块儿构成一个射影坐标系。

曲线的每个点, 用三个参量表示, (X,Y,Z)。咱们知道在二维坐标系里的每一个图形都遵循一个方程,好比直接的二元一次方程是y=kx+b, 圆的方程是(x-a)2+(y-b)2=r2, 椭圆曲线在射影坐标系里也有本身的定义:

Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3

全部椭圆曲线上的点都知足上述方程,a1,a2,a3,a4,a6是系数,决定曲线的形状和位置。

二维坐标和射影坐标有一个对应关系,即x=X/Z, y=Y/Z, 这样就能够把上面的方程转成普通的二维坐标系方程:

y2+a1xy+a3y= x3+a2x2+a4x+a6

3.1.2 离散的椭圆曲线
上面的坐标系都是基于实数的,椭圆曲线看起来都是平滑的,若是咱们限制曲线的点都必须是整数,曲线就变成离散的了。
再进一步限制,要求整数必须大于0, 小于某个大整数P, 这样就造成了一个有限域Fp.而后咱们在这个有限域里定义一些点与点之间的加减乘除运算规则,好比A点加B点获得C点(记作A+B≡C (mod p)),或者A点乘以n获得K点(记作A×n≡K (mod p))。至于具体规则细节能够不用关心,只要知道有这样的操做便可。

选一条曲线,好比 y2=x3+ax+b

把它定义在Fp上, 要求a,b知足:4a3+27b2≠0 (mod p)

咱们把这样的曲线记为Ep(a,b)
加解密是基于这样的数学难题,K=kG,其中 K,G为曲线Ep(a,b)上的点,k是整数,小于G点(注意区分,不是咱们日常说的那个意思)的阶(不用关心什么是点的阶)。给定k和G,计算K很容易;但给定K和G,求k就困难了,这里,G就叫作基点,k是私钥,K是公钥。

最后总结。描述一条Fp上的椭圆曲线,有六个参量: T=(p,a,b,G,n,h)。
p 、a 、b 用来肯定一条椭圆曲线,
G为基点,
n为点G的阶,
h 是椭圆曲线上全部点的个数m与n相除的整数部分)
要详细了解算法,请查阅相关资料分析。

3.1.3 基于SM2在中国金融体系中的签名和验签

前面提到根据系数的不一样,ECC曲线能够有不少,SM2使用其中一种,这就代表它的曲线方程,以及前面说到的六个参量都是固定的。

这里容易引发一个误解,会认为参数都固定了,公私钥是否是只能有一对?固然不是,注意前面提到的K=kG的模型,K才是公钥,因此公钥实际上是曲线在离散坐标系中,知足条件的一个曲线上的点。能够有不少个。

基于这种离散椭圆曲线原理的SM2算法通常有三种用法:
(1)签名验签;
(2)加解密;
(3)密钥交换。
脱机数据认证只用到签名验签的功能。
终端关心的是如何验签,卡片则要考虑如何实现生成签名。

基于上面的模型,能够设计城市轨道交通基于区块链技术的一卡通支付系统。 支付模型,后续咱们会专门用来探讨。

3.2 基于openssl实现SM2
openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv二、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12我的数字证书格式实现等功能。

openssl采用C语言做为开发语言,这使得它具备优秀的跨平台性能。openssl支持Linux、UNIX、windows、Mac等平台。

openssl已经实现ECC算法接口,也就是核心已经有了,实现sm2其实并不难,关键是理解它里面各类接口如何使用。

经过上面的整理,但愿在区块链学习中,能有一些帮助。

2019-08-19 整理于 深圳