对称数据加密技术简介
对称数据加密技术是当前应用最广泛、使用频率最高的加密技术,对称加密算法是双向可逆的,加密密钥和解密密钥相同是最大的特点。对称加密算法由古典加密算法演变而来,大部分加密算法的解密算法是逆运算。
特点
对称加密算法家族有20多个成员,主要特点:
- 加密和解密密钥是一致的,即只有一个密钥存在;
- 算法安全程度依赖于密钥长度;
- 每种算法对密钥的长度是有一定要求的;
- 大部分是分组加密算法,所以算法需要指定工作模式、填充类型。
一般对称加密算法的加密流程
一般对称加密算法的加密流程大概如下:
- 1.将要加密的数据进行分组,按照N位为一组这就是
分组
过程,也就是分组加密
的由来; - 2.以组为单位进行加密处理,这个时候对每块的加密操作就有了不同的
工作模式
;- 不同的工作模式算法效率和产生的密文差别比较大;
- 3.最后一块儿不足N位,则需要填充到N位,这就是
填充模式
;- 不同的填充模式,影响到数据的安全性;
由上可知,对称加密算法中,非常重要的几个概念如下:
- 密钥:不是随意指定的,是需要计算机计算出来的;
- 算法:选择哪种算法极大程度的决定了加密安全级别;
- 工作模式:算法的工作模式决定了算法的效率和算法安全性;
- 填充模式:使用哪种填充方式,能一定程度上干扰数据的破译工作;
1.密钥长度
对称加密算法的安全程度依赖于密钥长度,而密钥长度不是说变就变得,这需要算法能支持。密钥长度越长则加密级别越高,数据内容越安全,例如:JAVA仅仅支持56位长度的DES加密。
2.工作模式
加密算法应用的场景比较复杂,有的强调效率,有的强调安全,有的强调容错,这就出现了不同的工作模式。<font color = 'red'>根据加密时每个密码块儿之间的关联方式分为:</font>
- ECB:电子密码本,最基本、最易理解的工作模式,每次加密都产生独立的密码组,每组的加密结果互不影响,相同的组产生的密文相同;
- 优点:易于理解,简单一些,没有误差传递,便于实现并行操作;
- 缺点:不能隐藏明文模式,有规律可寻;
- 用途:适合加密码密码、随机数等数据,也就是明文重复小的数据;
- CBC:密文链接模式,目前应用最广泛的模式,每组之间互相影响,加密前:明文数据与前一组的密文进行异或运算,需要选择初始化向量V;
- 优点:加密后的密文上下文关联,不会有重复密文,攻击性低;
- 缺点:加密效率低,不利于并行计算,有误差传递问题;
- 用途:可加密任意长度的数据;
- CFB:密文反馈模式,比较复杂,也是上下文关联的,按8位分组将密文和明文进行异或运算;
- 优点:隐藏了明文模式,可以按字节逐个进行加解密;
- 缺点:不利于并行计算,错误会扩散,需要初始化向量;
- 用途:可用于检测发现密文的篡改;
- OFB:输出反馈模式,和CFB类似,不过OFB用前N位密码进行异或运算;
- 优点:隐藏明文模式,无误差传递;
- 缺点:不利于并行计算,比CFB安全性差;
- 用途:适用于加密冗余性较大的数据,比如图像数据;
- CRT:计数模式,上下文无关联的,每组之间互不影响,AES中经常使用CRT和CBC模式;
- 优点:可并行计算,与CBC模式一样的安全性;
- 缺点:没有错误传播,不易确保数据的完整性;
- 用途:各种加密用途;
一般如果数据重复性不高选择CBC模式,重复性高选择CFB或者OFB模式,AES算法经常用CRT模式。
3.填充模式
分组加密过程中,最后一块经常不满足要求的位数,这个时候就需要使用填充模式,将最后一块填充到满足需求的位数,
例如,DES的分组过程中,最后一块儿不足56位时,需要对最后一块进行填充,将最后一块填充至56位。常用的填充模式主要有如下两种:
- NoPadding:不填充;
- PKCS5Padding:常用的填充模式。
应用
对称加密算法广泛的应用在各种需要数据加密的场景下,如很多Token
的生成都采用这种加密手段加密数据内容。只要需要加密的地方可以优先考虑使用对称加密技术。
NOTE:对称加密算法在加密内容较大时效率也可满足需求,所以通常情况下应该优先考虑使用对称加密,其缺点很明显:密钥泄露则数据会变得极不安全
算法家族
目前Java中支持的对称加密算法大约有20多种,比较有代表性的算法有5种:
- DES:数据加密标准,经典加密算法,由IBM创建提交给美国国家标准局,是对称加密算法的基础;
- DESede:俗称3DES,又称
Triple DES
,是对DES的改良,采用多重迭代的方式加密; - AES:DES的替代者,更安全,密钥设置快,效率高,支持的密钥长(128、192、256等);
- PBE:基于口令的加密,算是对称加密的特例,属于信息摘要算法和对称加密算法的融合;
- IDEA:国际数据加密标准,这是脱离了美国政府的限定产生的标准,强加密算法,常用在电子邮件加密中,如PGP的核心算法。
- 其他:Blowfish、Twofish、Serpent、IDEA
算法供应商
信息摘要算法很多受美国出口的限制,对称加密算法更是如此,尤其是能支持长密钥加密的对称加密算法,JDK仅支持一些密钥长度比较短的加密算法,如56位密钥的DES,112位的3DES,128位的AES。
对于高级的加密算法,可以考虑使用Bouncy Castle的开源Jar包。
算法选择
目前DES已经不安全了,优先考虑使用AES加密,IDEA要根据自己的场景考虑,不建议一般应用,PBE要看和哪种算法融合。
算法流程简图
graph TD
A[输入数据] -->|读取前N位| B(判断填充)
B --> C(分组过程)
C --> D(是否组间关联)
D --> A
网友评论