一、常见加密算法
2.1. 基本概念
2.1.1. 分组(AES为例)
分组加密就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。那你可能要问:为何要进行分组呢?比如一个应用程序总共就只能获得3M的内存空间来执行,而需要加密的文件是100M,这个时候就不得不进行文件拆解加密。
2.1.2. 加密模式(AES为例)
分组加密只能加密固定长度的分组,而实际需要加密的明文可能超过分组长度,此时就要对分组密码算法进行迭代,以完成整个明文加密,迭代的方法就是加密模式。它有很多种,常见的工作模式如下图:
2.1.3. 初始向量(AES为例)
它的作用和MD5的“加盐”有些类似,目的是防止同样的明文块,始终加密成同样的密文块,在每一个明文块加密前,会让明文块和一个值先做异或操作。IV作为初始化变量,参与第一个明文块的异或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或,从而保证加密出的密文块都不同。以CBC模式为例:
2.2. 分类
2.2.1. 对称加密算法
双方使用的同一个密钥,既可以加密又可以解密,这种加密方法称为对称加密,也称为单密钥加密。
优点:速度快,对称性加密通常在消息发送方需要加密大量数据时使用,算法公开、计算量小、加密速度快、加密效率高。
缺点:在数据传送前,发送方和接收方必须商定好秘钥,然后 使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
在对称加密算法中常用的算法有:DES、AES等。
AES:密钥的长度可以为128、192和256位,也就是16个字节、24个字节和32个字节。
DES:密钥的长度64位,8个字节。
2.2.2. 非对称加密算法
一对密钥由公钥和私钥组成(可以使用很多对密钥)。私钥解密公钥加密数据,公钥解密私钥加密数据(私钥公钥可以互相加密解密)。私钥只能由一方保管,不能外泄。公钥可以交给任何请求方。
优点:安全。
缺点:速度较慢。
在非对称加密算法中常用的算法有: RSA等。
对称加密算法是一种加密方式,它使用相同的密钥对数据进行加密和解密。以下是几种常见的对称加密算法及其特点:
2.2.3. 散列函数
散列函数将任意长度的数据映射为固定长度的散列值,散列值可以用于数据完整性校验。散列函数不可逆,无法从散列值推算出原始数据,但是散列值可以被篡改,因此需要使用数字签名等技术来保证数据的完整性和真实性。
2.3. 国际算法
2.3.1 DES(Data Encryption Standard)
DES是一种最早的对称加密算法,使用56位密钥,加密速度较快,适用于加密大量数据的场合,但安全性较低,易受到暴力破解攻击。
2.3.2 3DES(Triple DES)
3DES是在DES基础上发展而来的算法,使用两个或三个56位密钥,加密强度更高,但加密速度较慢。
2.3.3 AES(Advanced Encryption Standard)
AES是一种较新的对称加密算法,使用128位、192位或256位密钥,加密强度高,速度快,被广泛应用于各种安全领域。
2.3.4 RC4(Rivest Cipher 4)
RC4是一种流密码算法,使用变长密钥,加密速度快,但安全性较低,易受到攻击。
2.3.5 RSA
由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,非对称算法;
2.3.6 Blowfish
Blowfish是一种对称加密算法,使用变长密钥,加密强度高,速度较快,但已被AES所取代。
2.3.7 RC2和RC4
对称算法,用变长密钥对大量数据进行加密,比 DES 快;
2.3.8 IDEA(International Data Encryption Algorithm)
国际数据加密算法,使用 128 位密钥提供非常强的安全性;
2.3.9 ECC(Elliptic Curves Cryptography)
ECC也叫椭圆加密算法,由Koblitz和Miller两人于1985年提出。ECC加密算法是一种公钥加密技术,以椭圆曲线理论为基础。利用有限域上椭圆曲线的点构成的Abel群离散对数难解性,实现加密、解密和数字签名。将椭圆曲线中的加法运算与离散对数中的模乘运算相对应,就可以建立基于椭圆曲线的对应密码体制。
2.3.10 TEA(Tiny Encryption Algorithm)
简单高效的加密算法,加密解密速度快,实现简单。但安全性不如DES,QQ一直用tea加密。
2.3.11总结
总体来说,AES是目前最常用的对称加密算法,因为它具有高强度、高速度和广泛的应用。但在特定的场景下,其他算法也可能更适合使用。
2.3.11.1 性能
1、以下是10次加密长度100字符各加密算法的平均耗时(纳秒):
加密100长度字符,在处理同批次明文,密钥确定的情况下:AES性能最强、接着是MD5和RSA性能次之,最后是SHA-256与DES性能最差。当然,差距不大,最好与最坏也就3倍差距,最慢需要0.23毫秒。这里的字符空间大小为:100字节(Byte),即约为0.09765KB,最慢需要0.2毫秒。
2、以下是10次加密长度1000000的字符各加密算法的平均耗时(纳秒):
可以看出:AES与MD5性能最强,两者相差很小,然后是SHA-256和DES性能次之,最后RSA性能最慢,和别的算法差距明显。这里的字符空间大小为:1000000字节,即约为976.56KB,最慢需要0.2秒。
3、以下是10次加密长度100000000的字符各加密算法的平均耗时(豪秒),这里时间耗费较长,只统计5次:
可以看出:AES与MD5性能最强,两者相差很小,然后是SHA-256和DES性能次之,最后RSA性能最慢,和别的算法差距明显。这里的字符空间大小为:100000000字节,即约为95.37MB,最慢需要24秒。
总结:性能排名:AES、MD5、SHA-256、DES、RSA。具体分析如下:
AES:凭借分组整体替换,每次循环处理更多原文数据,即使需要密钥参与运算,还是能和MD5速度处于同一水平线上甚至略胜一点点。
MD5:虽然哈希算法里每次是3个32位字的原文与缓存值进行运算,虽然不需要密钥参与运算,但性能并没有与AES拉开差距,主要原因是每次处理的原文没有AES多。
SHA-256:和MD5相比,每次处理的字数不变,缓存值更多,算法更复杂,比MD5慢是正常的。
DES:由于没有分组处理,仅仅是按位替换,每次循环处理的原文数据少,再加上密钥需要参与运算,比不可逆算法慢是正常的。
RSA:基本符合预期,数据量少计算量小,凭借最简洁的运算,耗费时间少,但数据量一大,运算量大,就被拉开明显差距了。
2.3.11.2 安全
这里先讨论下各算法根据密文得到原文的加密或解密次数。
MD5:该算法不可逆,破解只能靠穷举法,而且原文越大,时间越长些,密文输出128bit,范围是2的128次方,即最长需要穷举原文加密次才能破解。
SHA-256:与MD5类似,破解只能靠穷举法,密文输出256bit,范围是2的256次方,即最长需要穷举原文加密次才能破解。
DES:该算法密钥只有56位有效,有密文后解密速度恒定,需要穷举密钥解密次才能破解。
AES:该算法密钥有128、192、256位,再只有密文的情况下,这三种密钥都得穷举,最长得解密才破解。
RSA:该算法密钥有512、1024、2048位,光穷举密钥就得运行次,再加上该算法加密解密耗时长,破解异常困难。
以上算法安全性是:RSA>SHA-256=>AES>MD5>DES。
2.3.11.3 运用
MD5:由于速度快,雪崩效应,返回值固定。常用于文件或数据校验。
SHA-256:由于速度比MD5稍慢,雪崩效应,返回值固定,且安全性远大于MD5,也不担心密钥暴露。可用于文件或数据校验,保存密码。
DES:该算法已淘汰,速度慢,安全性差,现在基本没有运用了。
AES:由于速度快,算法可逆,安全性高(不暴露密钥的话),可用于加密传输信息。
RSA:由于安全性高,算法可逆,有公钥和私钥,但大量数据下加密解密慢,可用于验签、加密传输少量信息。
2.4. 国密算法
2.4.1. SM1是一种分组加密算法
对称加密算法中的分组加密算法,其分组长度、密钥长度都是128bit,算法安全保密强度跟 AES 相当,但是算法不公开,仅以IP核的形式存在于芯片中,需要通过加密芯片的接口进行调用。
采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。
2.4.2. SM2是非对称加密算法
它是基于椭圆曲线密码的公钥密码算法标准,其密钥长度256bit,包含数字签名、密钥交换和公钥加密,用于替换RSA/DH/ECDSA/ECDH等国际算法。可以满足电子认证服务系统等应用需求,由国家密码管理局于2010年12月17号发布。
SM2采用的是ECC 256位的一种,其安全强度比RSA 2048位高,且运算速度快于RSA。
2.4.3. SM3是一种密码杂凑算法
用于替代MD5/SHA-1/SHA-2等国际算法,适用于数字签名和验证、消息认证码的生成与验证以及随机数的生成,可以满足电子认证服务系统等应用需求,于2010年12月17日发布。
它是在SHA-256基础上改进实现的一种算法,采用Merkle-Damgard结构,消息分组长度为512bit,输出的摘要值长度为256bit。
2.4.4. SM4是分组加密算法
跟SM1类似,是我国自主设计的分组对称密码算法,用于替代DES/AES等国际算法。SM4算法与AES算法具有相同的密钥长度、分组长度,都是128bit。于2012年3月21日发布,适用于密码应用中使用分组密码的需求。由于 SM4 加解密的分组大小为 128 比特,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。
2.4.5. SM7是一种分组加密算法
该算法没有公开。SM7适用于非接IC卡应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通、公交一卡通)。
2.4.6. SM9是基于标识的非对称密码算法
用椭圆曲线对实现的基于标识的数字签名算法、密钥交换协议、密钥封装机制和公钥加密与解密算法,包括数字签名生成算法和验证算法,并给出了数字签名与验证算法及其相应的流程。可以替代基于数字证书的PKI/CA体系。
SM9主要用于用户的身份认证,SM9的加密强度等同于3072位密钥的RSA加密算法,于2016年3月28日发布。
2.4.7. 祖冲之密码算法是一种流加密算法
它是中国自主研究的流密码算法,该机密性算法可适用于3GPP LTE通信中的加密和解密,该算法包括祖冲之算法(ZUC)、加密算法(128-EEA3)和完整性算法(128-EIA3)三个部分。目前已有对ZUC算法的优化实现,有专门针对128-EEA3和128-EIA3的硬件实现与优化,由国家密码管理局于2012年3月21日发布。
2.5 对比
2.6 应用场景
SM4 对数据内容加密,使用 SM3 对内容进行摘要,用于防篡改,再使用 SM2 对摘要进行签名,做到了防抵赖。
算法名称 应用场景 特点 备注
SM2 用于替换RSA/DH/ECDSA/ECDH等国际算法、防抵赖 256位
SM3 用于替代MD5/SHA-1/SHA-2等国际算法,适用于数字签名和验证、消息认证码的生成与验证以及随机数的生成、防篡改 分组、256位
SM4 用于替代DES/AES等国际算法、少量内容加密 对称加密、128位
三、算法应用
3.1 对称加密过程
对称密钥算法又称为共享密钥算法,它使用同一个密钥对数据进行加密和解密。
用户A和用户B协商好对称密钥后,加解密过程如下:
① 用户A使用对称密钥将明文加密,并将密文发送给用户B。
② 用户B收到密文后,用对称密钥对密文进行解密,得到最初的明文。
3.2 非对称加密过程
非对称密钥算法又称为公钥加密算法。每个用户都拥有两个密钥:一个可对外界公开,称为“公钥”;一个只有所有者知道,称为“私钥”。
公钥和私钥配合使用,一个用于加密,一个用于解密。通常发送方以接收方的公钥作为加密密钥,接收方使用自己的私钥作为解密密钥。
注:
公钥是通过私钥产生的;
公钥加密,私钥解密是加密的过程
私钥加密,公钥解密是签名的过程;
用户A获得用户B的公钥后,加解密过程如下:
① 用户A使用用户B的公钥对明文加密,并将密文发送给用户B。
② 用户B收到密文后,用自己的私钥对密文进行解密,得到最初的明文。
3.3 数字信封过程
数字信封技术结合了对称加密算法和非对称加密算法的优点,发送方首先利用对称密钥加密明文,再利用接收方的公钥加密对称密钥,被接收方公钥加密后的对称密钥被称为数字信封。
接收方收到信息后,若要解密信息,必须先用自己的私钥解密数字信封,得到对称密钥,才能利用对称密钥解密收到的信息。
用户A获得用户B的公钥后,加解密过程如下:
① 用户A使用对称密钥对明文加密,生成密文。
② 用户A使用用户B的公钥加密对称密钥,生成数字信封。
③ 用户A将数字信封和密文信息一起发送给用户B 。
④ 用户B接收到用户A发送的加密信息后,使用自己的私钥打开数字信封,得到对称密钥。
⑤ 用户B使用对称密钥对密文进行解密,得到最初的明文。
3.4 数字签名认证及完整性校验的过程
为了进一步提升加密算法传输数据的可靠性(防止数据被篡改),数字签名技术应运而生。发送方用自己的私钥加密摘要(对明文进行哈希得到)得到数字签名,可根据实际是否存在保证数据私密性的需求,选择发送明文或者密文给接收方。
若无需保证传输数据的私密性,直接将明文和数字签名一起发给接收方。
若需要保证传输数据的私密性,可根据上文中对称加密和非对称加密的特点,选择其中一种加密算法加密明文生成密文,将密文和数字签名一起发给接收方。
接收方收到后,执行以下操作:
a) 使用与发送方相同的哈希算法对收到或者解密得到的明文进行哈希,得到摘要。
b) 使用发送方的公钥解密数字签名得到摘要。
c) 将上述两个步骤中的摘要进行对比:
如果一致,则表示收到的明文没有未被篡改,是完整可信的。
如果不一致,则表示收到的明文已被篡改,是不可信。
用户A获得用户B的公钥后,加解密过程如下:
① 用户A使用用户B的公钥对明文加密,生成密文。
② 用户A使用哈希算法对明文进行哈希计算,生成摘要信息。
③ 用户A使用自己的私钥对摘要信息进行加密,生成数字签名。
④ 用户A将密文和数字签名一起发送给用户B。
⑤ 用户B使用用户A的公钥对数字签名进行解密,得到摘要信息。
⑥ 用户B接收到用户A的加密信息后,使用自己的私钥对密文进行解密,得到最初的明文。
⑦ 用户B使用与用户A相同的哈希算法对明文进行哈希计算,生成摘要信息。
⑧ 用户B将生成的摘要信息与从A收到的摘要信息进行比对。
如果一致,表示明文未经过篡改,则接受明文。
如果不一致,表示明文被篡改过,则丢弃明文。
3.5 数字证书的过程
在应用公钥的加解密技术(非对称加密、数字信封、数字签名)中,由于无法保证公钥来源的可靠性(加解密使用的公钥一定属于指定所属者),从而存在安全隐患。以数字签名技术为例,攻击者使用自己的公钥替换了接收方本地保存的发送方公钥,将伪造的信息和用自己私钥加密得到的数字签名发给接收方,接收方使用本地保存的发送者的公钥(已被替换为攻击者的公钥)可以正常进行解密以及数据完整性校验,导致接收方无法甄别收到的消息为伪造的信息。
为了确保公钥来源的可靠性,公钥需要经过权威机构CA (Certificate Authority,证书颁发机构)认证后,才能被认为是可靠性的。
数字证书遵循X.509 V3标准,包含证书签发者名称、持有者名称、公钥信息、CA对证书的数字签名、证书的有效期等多个字段。数字证书的结构如下图所示。
3.6 总结
对称加密算法和非对称加密算法为整个加解密技术的基础,在实际使用中,可参照下表中列出的优缺点结合实际需求进行选择。
基于对称加密和非对称加密算法衍生出来的应用技术的作用及优势如下表所示。