国密标准的简介
国密算法的概述
国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。
2011年,国家密码管理局发布了《关于做好公钥密码算法升级工作的通知》,要求“自2011年3月1日起,在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用国密算法。自2011年7月1日起,投入运行并使用公钥密码的信息系统,应使用SM2算法。”
国密SM1
SM1为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
国密SM2
SM2为基于ECC的非对称加密。该算法已公开。由于该算法基于ECC-256位,与RSA-2048相比,签名速度与秘钥生成速度更快,且安全强度更高。
SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。
国密SM3
SM3是消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
SM3密码杂凑算法是中国国家密码管理局于2010年公布的中国商用密码杂凑算法标准(其实也是哈希算法,或者单向散列算法),适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。
该算法由王小云等人设计,消息分组为512位,经过填充和迭代压缩,生成256位的杂凑值。
SM3算法的压缩函数与SHA-256的压缩函数具有相似结构,但其中关键的迭代压缩方法更有优势。
为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短。MD5输出128比特杂凑值,SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。
国密SM4
SM4为对称加密。来源于无线局域网标准的分组数据算法,密钥长度和分组长度均为128位。
SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。
附录1: 非对称密钥的加密系统
根据密钥类型不同将现代密码技术分为两类:对称加密算法和非对称加密算法。
非对称密钥加密系统采用的加密钥匙(公钥)和解密钥匙(私钥)是不同的。
常见的非对称加密算法如下:
RSA
由 RSA 公司发明,安全性依赖于大数分解,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
ECC
ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
DSA
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准)。
- DSA和RSA的基本原理都是大数分解,其安全性略高于与RSA,区别在于RSA的两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚,RSA算法却作不到。
- DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多.
附录2: 对称密钥的加密系统
DES
1977年1月,美国政府采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES Data Encryption Standard) 。
目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。
DES算法的入口参数有三个:Key、Data、Mode
- Key为8个字节共64位,是DES算法的工作密钥;
- Data也为8个字节64位,是要被加密或被解密的数据;
- Mode为DES的工作方式,有两种:加密或解密。
DES算法是这样工作的:
- 如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;
- 如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。
- 在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。
通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。
3DES
3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法。
3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。
设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密表,这样,
3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
3DES解密过程为:P=Dk1((EK2(Dk3(C)))
K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。在这种情况下,密钥的有效长度为112位。
AES
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。
用AES加密2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种候选算法中选出的一项新的密匙加密标准。Rijndael被选中成为将来的 AES。Rijndael是在1999年下半年,由研究员Joan Daemen 和 Vincent Rijmen 创建的。AES正日益成为加密各种形式的电子数据的实际标准。
美国标准与技术研究院(NIST)于2002年5月26日制定了新的高级加密标准(AES)规范。
AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。
AES使用几种不同的方法来执行排列和置换运算。AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。
与公共密钥加密使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。
附录3: 数字摘要
MD5
MD5(Message-Digest Algorithm 5,信息摘要算法第5版)是计算机广泛使用的散列算法(也称“哈希算法”或“杂凑算法”)之一,采用带密钥的运算时,可同时用于消息完整性检测和消息源身份认证。它是由MD2、MD3和MD4版本一路发展而来,是Ronald Rivest 于1991年设计发布的,用于取代MD4。
- MD算法的基本工作机制:
先在发送端将一个随机长度的消息,经过一系列的各种逻辑运算,以打乱原始消息的次序,生成一个128位的消息摘要(也称哈希值),并随着原始消息一起发送。
原始消息,连同摘要消息一起到了接收端后,再采用相同的方法对所接收到的原始消息进行“压缩”,看生成的消息摘要是否与随着原始消息一起发送过来的消息摘要一致,一致则认为所接收的消息是完整的,在传输途中没有被非法篡改。
对于带密钥的MD5消息摘要,不是直接基于原始消息进行计算的,还要与机密的预共享密钥(采用预共享密钥认证方法时),或者本端的公钥(采用数字证书认证方法时)结合起来计算的,而预共享密钥和本端公钥只有发送者和接收者才知道的,所以能保证摘要计算的机密性,产生独一无二的“数字指纹”,起到了消息源身份认证的目的。
MD5摘要运算是不可逆的(即具有单向性,也称之为“单向密钥”),不可通过摘要消息还原出原始的消息。当然,其实所有身份认证算法都是这样的,仅用于认证,不需要在接收端进行数据还原。也正因为如此,MD5算法通常不认为是一种加密算法,不具有解密能力。
MD5算法的主要应用于各种三层VPN通信的数据完整性验证和消息源身份认证外,也经常用于数字签名。
如我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就是用于在我们下载该软件后对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。
另外,MD5还广泛用于操作系统的登陆验证上,如UNIX、各类BSD系统登录密码、数字签名等诸多方。如在UNIX系统中用户的密码是以MD5(或其他类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。避免用户的密码被具有系统管理员权限的用户知道。
SHA
SHA(Secure Hash Algorithm,安全哈希算法)主要适用于数字签名,也是一种不可逆的MAC算法,但比MD5算法更加安全。
目前它有三种主要的版本,即SHA-0、SHA-1、SHA-2和SHA-3。
其中SHA-2和SHA-3版本中又有多种不同子分类,如在SHA-2中又根据它们最终所生成的摘要消息长度的不同又包括SHA-224、SHA-256、SHA-384和SHA-512等几种。SHA算法的认证原理与前面介绍的MD5算法认证原理完全一致。
各种版本SHA算法的区别在于,进行散列运算时所涉及的一些参数特性不完全相同