当前位置: 首页 > news >正文

SM1、SM2 、SM3、 SM4算法

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。

   (1)SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。

   (2)SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。

   (3)SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。

   (4)SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

一、分组密码算法——国际DES、国产SM4

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

        分组密码的实现原则如下:

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

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

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

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

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

 1. DES算法

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

  细解DES

  细解3DES

  细解AES

                                                             DES算法的整体结构图: 

                                                                                            SM4算法

2.SM4算法的整体结构图:

 

国际的DES算法和国产的SM4算法的目的都是为了加密保护静态储存和传输信道中的数据,主要特性如下:

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

二、公钥密码算法——国际RSA、国产SM2 

公钥密码学与其他密码学完全不同, 使用这种方法的加密系统,不仅公开加密算法本身,也公开了加密用的密钥

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

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

  公钥算法的加密与解密由不同的密钥完成,并且从加密密钥得到解密密钥在计算上是不可行的。通常,公钥算法的两个密钥中任何一个都可以作为加密而另一个用作解密,但不是所有的公钥算法都是如此。

 

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

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

  1.RSA算法的实现如下:

  (1) 实现者寻找出两个大素数p和q

  (2) 实现者计算出n=pq 和φ(n)=(p-1)(q-1)

  (3) 实现者选择一个随机数e (0<e<></e<>

  (4) 实现者使用辗转相除法计算d=e-1(modφ(n))

  (5) 实现者在目录中公开n和e作为公钥

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

        细解RSA

      2. SM2算法

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

  y2+axy+by=x3+cx2+dx+e [其中a,b,c,d和e是满足某些条件的实数,因为方程中的指数最高是3,所以我们称之为三次方程,或者说方程的次数为3]

  SM2算法使用的方程为:y2= x3 + ax + b

  SM2算法实现如下:

  (1) 选择Ep(a,b)的元素G,使得G的阶n是一个大素数

  (2) G的阶是指满足nG=O的最小n值

  (3) 秘密选择整数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算法主要特性对比如下:

三、摘要算法——国产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算法的安全性相对较高

 

 

 

 

 

相关文章:

  • 解决java.net.ConnectException: Connection refused:connect报错
  • 密码学和Base64
  • 对称密钥算法与非对称密钥算法
  • 秘钥管理和PKI
  • java安全体系:JCA、JCE、JSSE、JAAS
  • 下载安装Bouncy Castle 密码包之静态方法
  • 解决Exception in thread main java.lang.Error: Unresolved compilation problem:Syntax error...报错
  • ASN.1概述及数据类型详解、站点证书的下载
  • 数字信封
  • X.509数字证书
  • 证书有效性验证、根证书
  • 不同证书格式Der 、Cer 、Pfx 、Pem区别
  • Jna与Jni调用C/C++效率比较
  • SSL原理,SSL握手过程
  • java基于BouncyCastle实现RSA算法的加密、解密
  • 【译】JS基础算法脚本:字符串结尾
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【Amaple教程】5. 插件
  • 2017-08-04 前端日报
  • Angular4 模板式表单用法以及验证
  • Django 博客开发教程 16 - 统计文章阅读量
  • eclipse的离线汉化
  • HashMap剖析之内部结构
  • java8 Stream Pipelines 浅析
  • Joomla 2.x, 3.x useful code cheatsheet
  • maven工程打包jar以及java jar命令的classpath使用
  • Nacos系列:Nacos的Java SDK使用
  • Netty源码解析1-Buffer
  • PHP那些事儿
  • springboot_database项目介绍
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 电商搜索引擎的架构设计和性能优化
  • 复杂数据处理
  • 基于HAProxy的高性能缓存服务器nuster
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #pragma multi_compile #pragma shader_feature
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (三)mysql_MYSQL(三)
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 未来三学期想要修的课 (日記)
  • (转载)Google Chrome调试JS
  • ***原理与防范
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Core 版本不支持的问题
  • .NET开源快速、强大、免费的电子表格组件