您的位置:首页 > 编程语言 > Java开发

java加密与解密的艺术(二)——对称密码体制

2017-05-18 09:31 477 查看
(写在前面的话:之前负责了一个关于数据安全接入的模块,涉及到了数据的加密解密,文件校验,下载落地,入库等。在wannercry肆虐之际,更深刻体会到数据安全的重要意义。鉴于此,不才受邀在今天给团队成员统一普及了一下数据安全方面的概念,重点给Java同事分享了一下基于java的数据加密解密实现和梁栋的《java加密与解密的艺术》。有感于这次的wannercry风暴,特将今天的培训整理出来和大家分享一下,诚邀勘误指正。
培训资料:参考了梁栋的《java加密与解密的艺术》,大家也可以自行买这本书阅读,应该感谢梁栋为我们提供了一本好书。)

一、对称加密算法

       对称加密算法的最大特征就是加密和解密的秘钥相同。

两大算法模型:1、流密码;2、分组密码

1、流密码(按字节或字符加密)

         流密码又分为同步流密码(产生秘钥序列的算法和明文密文无关)和自同步流密码(产生秘钥序列的算法和之前的密文有关)。

1.1、同步流密码

只要通信双方的秘钥生成器的“种子秘钥”和“初始向量”一致,则生成的秘钥相同
解密过程需要通信双方保持精确同步
容易检测插入,删除、重播等主动攻击
没有差错传播
1.2、自同步流密码

秘钥流(序列)是有记忆变换器
秘钥流与明文有关:i 时刻的密文不仅与 i 时刻的明文有关,而且还与 i 时刻之前的 l 长度的明文有关
具有差错传播,但该差错是有限的
具有自同步的能力
明文的一个字符扩散在密文的多个字符中,抗统计分析能力增强

2、分组密码(按固定长度分组加密)

2.1、概述
分组加密是将明文数据分成等长的分组,通过秘钥分别变换得到等长的密文分组的过程。最后一组长度不足的情况下,采用特殊符号填充的方式解决。

明文和密文组长度为 n,秘钥长度为 t,秘钥量为 2 的 t 次方
密文中的任意一个数字与该组明文中的所有数字均相关(扩散)
每一组明文都采用同一个秘钥加密

2.2、分组密码的工作模式

2.2.1、电子本模式(ECB,electronic codebook mode)

      每一组明文都与唯一的一组密文相对应。



缺点是相同明文组的密文也相同,从而造成规律性的明文在密文中也呈现出规律性,从而降低了抗统计学攻击性。
好处是不同组之间彼此独立,某一个分组的错误不会扩散至其他分组,没有错误传播。但如果某一组的数据出现了位数丢失或增加,则会造成整个数据的解析失败。

简单;
有利于并行计算
误差不会被传送
暴露明文的模式(明文的规律性数据会体现在密文中)
可能对明文进行主动攻击

2.2.2、密码分组链接模式(CBC,cipher block chaining mode)

组与组之间存在某种运算关联,即采用密码学中的混淆思想(组两两之间做了数据绑定)
这样有效规避了明文中的规律数据
链式从某种意义上说可防止了数据的篡改
链式一般是相邻组关联相关,因此某一组的错误传播一般只放大到两个组,即错误传播的有限性
不容易主动攻击
安全性好于ECB
适合传输长度长的报文,是SSL、IPSec的标准
不利于并行计算
误差传递
需要初始化向量IV

2.2.3、密码反馈模式(CFB,cipher feedback mode)

同步序列密码,整个数据分组在接受完成之后才能开始加密。每次加密不再是整个分组长,而是分组中的 s 大小比特,并且每次加密之后的密文结果并不是直接耦合到明文,而是反馈给加密算法的输入端——开环移位寄存器中,从而间接地达到“下一组明文依赖于上一组密文的效果”。

具有CBC模式的优点
无需对数据格式进行改变
对错误敏感且会有限传播(仅当错误密文比特从开环移位寄存器中)
加密效率低
隐藏了明文模式
分组密码转化为流密码
可以及时加密传送小于分组的数据
不利于并行计算
误差传送:一个明文单元损坏影响多个单元
唯一的IV

2.2.4、输出反馈模式(OFB,output feedback mode)

输出反馈模式是密码反馈模式的改进,最大的区别是:密码反馈模式是将密文反馈给了开环移位寄存器,而输出反馈模式是将秘钥生成器的秘钥结果反馈给开环移位寄存器。
OFB模式实质上就是一个同步流密码,通过反复加密一个初始向量IV来得到密钥流。这种方法有时也叫“内部反馈”,因为反馈机制独立于明文和密文而存在的。

隐藏了明文模式
分组密码转化为流模式
可以及时加密传送小于分组的数据
不利于并行计算
对明文的主动攻击是可能的
误差传送:一个明文单元损坏影响多个单元

2.2.5、计数器模式(CTR,counter mode)

CBC模式和和CFB模式不能以随机顺序来访问加密的数据,因为秘钥流的产生是依赖于前面的秘钥流,当前密文数据块的解密依赖于前面的密文块。
计数器模式的秘钥流不再彼此依赖,而是通过计数器来提供。

访问随机性
高效率
处理的数据长度任意

二、经典的对称加密算法
DES加密算法,AES加密算法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: