密码安全(2019.11.19)
阅读前推荐观看我之前做的分类图URL:https://blog.csdn.net/qq_26139045/article/details/103113818
密码算法
密码学可以分为古典密码学和现代密码学。其中现代密码学的出现于一个熟悉的人脱不了关系,他就是香农了,绝对的大佬。
古典密码于现代密码的区别之处,我认为就是古典密码是依赖于加密算法的精心设计和保密性,而现代密码这是公开了加密所用的算法,注重的是对密钥的保密。两者的侧重点不同,一个在算法的保密上,另一个则是在密钥的保密上。而将现代密码在以密钥细分就会分为,对称加密和非对称加密。所谓的对称加密,就是加密时和解密时的密钥是一样的;而非对称加密则是加密密钥和解密密钥不同,在我看来就目前而言,似乎非对称加密会使用更多,最近经常看到的RSA就是一种非对称加密方法,只可惜还没有搞明白RSA。
古典密码
置换密码
所谓置换密码真的就只是置换,把明文通过一些方法排列,然后按你想要的方向或者顺序读出,就成为一个密文。这是一种比较简单的加密方式。正是由于这种方法过于简单,所以它禁不起穷举的,是可以进行爆破的。置换密码可能是先排矩阵再按列读取,也有可能会使用密钥,但是这里的密钥只是为了助记,与现代密码的密钥大不相同。通过密钥去除重复字母后,按字典序编号,然后按编号读出相应的列,实现加密。
例如:明文:this is transposition cipher
密钥:password
数字序列:4167352
密文:hath ts iiphtripsocin iessor
注意!!!密文要写的与明文格式相同。
t | h | i | s | j | s | t |
---|---|---|---|---|---|---|
r | a | n | s | p | o | s |
i | t | i | o | n | e | i |
p | h | e | r |
替代密码
说到替代密码,大家最熟悉的可能就是凯撒密码。替代密码是利用了替代法进行加密的,通过将明文中的字符使用其他的字符替代后形成密文。
它还有很多类型,比如单表替代密码,多明码替代密码,多字母替代密码,多表替代密码。凯撒加密就是单表替代密码了,所有的字母都是相同的偏移量,所以凯撒是可以被轻易的破解的,直接暴力破解,CTFCracker就可以实现凯撒爆破。而多表替代密码就提高了破解的难度,像维吉尼亚密码、希尔密码,一次一密钥密码、Playfair密码等等,由于使用了多个替换表,情况更加复杂,爆破难度就蹭蹭蹭上去。
在我看来维吉尼亚其实就是凯撒的加强版,只不过是每个字符都有自己独特的偏移量了,不在如凯撒一样统一偏移量,所以对于破解而言就提高难度了。
加密:Ci=(Mi+Ki)mod26
解密就是i一个逆过程,Mi=(Ki-Ci)mod26
例如密钥可能为:cipher即(3,9,16,8,5,18)
明文 :this is substitution cipher
密文:vpxz mj ucqzxzvcipse eqeoii
对称密码
对称密码可以分为分组密码和序列密码。分组密码是以一个固定大小作为每次处理的基本单元,而序列密码则是以一个单位元素(通常是一个字母或一个比特)作为基本的处理单元。当分组长度等于单位长度的是否,分组密码也就是序列密码,所以你可以这样理解,序列密码是分组密码中特殊的一种情况,即分组长=单位长。
分组密码的常用工作模式:
1、电子密码本(ECB)
最简单的加密模式即电子密码本模式,将加密的消息按照密码块的块大小分为数块,对每一块进行独立加密。
优点:实现简单、效率高;有利于并行计算;误差不会被传送。
缺点:不能隐藏明文的模式,相同的明文会产生相同的密文;可能对明文进行主动攻击,比如说黑客可以通过获取账号对应的密文段,进行密文段替换,成功实施ECB重放攻击
2、密码块链接(CBC)
在CBC模式下,每个密文块先要与前一个密文进行异或,然后再加密,所以它高度依赖于上一个密文块,这就对数据完整性要求很高。因为第一个明文没有上一个密文,所以就要引入一个初始化矢量(IV)。
优点:不易被主动攻击,这也是得益于它的这种像串行的机密模式,安全性高于ECB,适合传输长度较长的报文,是目前SSL和IPSec安全协议的应用标准。
缺点:不利于并行计算;有误差传输效应;需要维护初始化矢量IV。
3、密文反馈(CFB)
密文反馈模式我觉得和CBC非常相似,区别上我觉得就是,一个先异或,一个后异或,它把上一个密文进行分组密码加密,然后再和明文进行异或。与CBC一样,也需要一开始引入一个初始化矢量。
优点:隐藏了明文模式;分组密码转化为流模式,增强了安全强度;可以及时加密传送小于分组的数据。
缺点:不利于并行运算;存在误差传送效应,即一个明文单元受损可以影响多个单元;需要维护一个IV。
分组密码包括DES、IDEA、SAFER、Blowfish和Skipjack等等,最新国际标准算法是AES,以前使用的是DES/3DES算法。分组密码的一个核心变换——Feistel结构。大多数分组密码的结构本质上都是基于Feistel网格结构,所以这是一个很重要的地方。
Feistel网络的安全性与一下参数有关。
(1)分组大小
(2)密钥大小
(3)子密钥产生算法:该算法复杂性越高,则密码分析越困难
(4)轮数n:单轮结构远不足以保证安全,一般轮数选取16
(5)轮函数F:结构越复杂越难分析
分组加密算法DES
DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。明文按64bit进行分组,密钥长64bit。
DES算法具有极高的安全性,到日前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。但是随着计算处理能力的提升,为了克服DES密钥空间小的缺陷,研究人员提出了三重DES的变形方式,即采用了两个密钥共128bit长度,仅加大了穷举密钥的计算复杂度。
分组加密标准AES
AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES使用几种不同的方法来执行排列和置换运算。AES是一个迭代的、对称的密钥分组的密码,它可以使用128、192、256位密钥,并且通过128bit分组加密或解密数据,既然是对称加密,所以它使用相同的密钥进行加密解密。迭代加密时就要使用一个循环结构,在循环中重复置换和替换输入数据。
序列密码
序列密码是一个随时间变化的加密变换,具有转换速度快、低错误传播的有点,硬件实现电路简单,缺点是有低扩散、插入或修改等不敏感性。
目前序列密码研究成果没有完全公开,因为序列密码更多应用于外交和军事部门等机密部门。目前公开的序列密码算法有RC4、SEAL等。 说到序列密码必须说一次一密,如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,那么这个序列密码就是一次一密的密码体制(One-Time Password)。
至于序列密码加密和解密,加密过程大概就是密钥K通过密钥流生成器生成密钥流,使用密钥流和明文进行异或运算得到密文;解密过程这是使用密钥K通过密钥生成器生成密钥流,在用密钥流和密文进行异或得到明文。
注:密钥流生成器的核心是一个伪随机数发生器,而密钥K为该随机数发生器的种子。应用最广的随机数发生器为线性反馈一位寄存器(LFSR)。当LFSR周期无限长即可形成OTP一次一密系统,OPT是一种理想的安全流密码体制。
一次一密系统应用目前面临的挑战:
1、密钥配送问题,OTP的密钥长度和明文长度相同,若能把密钥安全有效地发生出去,那还加什么密呢??
2、密钥的保存问题,OTP把保存明文问题转化为保存于明文等长的密钥问题
3、密钥的复用:OTP不能使用过去用过的随机比特序列,否则就会泄露之前的通讯内容,这也叫前向安全。
4、密钥的同步,明文很长的时候,密钥也会一样长,在同步密钥的过程中一旦出现错误,后续通讯就无法解密,有时也被称为后向安全。
5、密钥的生成问题,OTP需要生成大量的随机数,而我们目前只能使用计算机生成伪随机数来暂时替代,凯撒伪随机数终究不是随机数,无法满足需求,而想要无重现性的真正随机数生成的难度极大。
流密码的安全性主要依赖于主控密钥K的保密性和密钥流发生器的可靠性。密钥序列产生算法最为关键,其生成的密钥必须具备伪随机性,至于什么是伪随机性,就留给大家自行百度了。序列密码的安全性确实高,加密速度也快,实时性好,就是过于要求同步,要实现严格同步,需要付出很高的代价。
RC4序列密码
RC4由RSA Security的Ron Rivest在1987年设计的一种高速简洁的流密码,被广泛用于常用协议,比如无线网络安全算法、SSL/TLS、HTTPS等安全协议。RC4加密分为两步:
1、Key-Scheduling Algorithm(KSA)密钥调度算法,采用可变长度的加密密钥产生密钥流生成器的初始状态。
2、Pseudo-Random Generation Algorithm(PRGA)伪随机子密码生成算法,根据初始状态生成密码流,并于明文进行相异或产生密文。
RC4采用的是XOR运算,一旦子密码序列出现了重复,密文就有可能被破解。存在部分弱密钥,是子密序列在不到100B内就出现重复。那么就可能在10万字节内就发生完全重复风险。所以在使用RC4算法时候,必须对加密密钥进行安全测试,避免出现弱密钥问题。