不会吧不会吧不会真有人连读书笔记都往网上发吧
读《图解密码技术》ing。。
还挺有意思的这本书。。找了个图床贴点图片。。希望图片不会裂掉。。
记点可能有用的。。
第一部分:密码
第一章
正当的接收者将密文还原为明文称为“解密”,但接收者以外的其他人试图将密文还原为明文,则称为密码破译( cryptanalysis ),简称为破译,有时也称为密码分析。
对称密码与公钥密码
隐写术与密码
隐写术的目的是隐藏消息本身,但如果搞清楚了嵌人消息的方法,也就可以搞清楚消息的内容。因此,隐写术并不能代替密码。
密码隐藏的是内容,隐写术隐藏的是消息本身。通过将密码与隐写术相结合,就可以同时产生两者所各自具备的效果。
密码与信息安全常识
●不要使用保密的密码算法
- 密码算法的秘密早晚都会被公诸于世
- 开发高强度的密码算法是非常困难的
●使用低强度的密码比不进行任何加密更危险
●任何密码总有一天都会被破解(但是量子密码不好说
●密码只是信息安全的一部分
小测验
小测验1
发送者Alice接收者Alice
小测验2
OXXOX
第二章
恺撒密码
密码算法:将明文中的各个字母按照指定的字母数平移
密钥:平移的字母数量
简单替换密码
密码算法:按照替换表对字母表进行替换
密钥:替换表
Enigma(通信密码的加密)
密码算法:使用Enigma密码机,通过接线板的接线方式、3个转子的顺序、每个转子的旋转位置对字母进行替换
密钥(每日密码):接线板的接线方式、3个转子的顺序、每个转子的旋转位置
Enigma (通信电文的加密)
密码算法:使用接线板的接线方式和3个转子的顺序固定的Enigma密码机,按照每个转子的旋转位置对字母进行替换
密钥(通信密码):每个转子的旋转位置
小测验
小测验1
CRYPTOGRAPHY
小测验2
错
小测验3不道哇
小测验3答案
小测验3的答案:没有L的密文
明文是一段只有字母L的文字,即LLLLL….发送者的目的是将毫无意义的明文加密发送以干扰密码破译者。
然而密码破译者知道Enigma的构造,即无论接线板如何接线,3个转子的顺序和每个转子的旋转位置如何改变,输入的字母都绝对不可能被替换成该字母本身。通过密文中没有L这一事实,密码破译者就能够推测出其明文可能是一串L。
此外,密码破译者还能够根据密文的排列组合继续进行破译,从而得到推测Enigma的接线板和转子状态的线索。
发送者本想干扰密码破译者,却反而为破译者提供了线索。顺便提一下,破解这一谜题的破译者名叫Mavis Lever,是一位女性。
第三章:对称密码
DES
加密方式不算很明白,看了个大概
不过知道它可以被暴力破解
三重DES
增强DES的强度
AES(Rijndael)
对称密码算法
逐字节替换>向左平移>矩阵运算>XOR
大家现在都用AES。。
小测验
小测验1
小于等于22的+3,大于等于23的-23
小测验2
错
小测验3不道哇。。。我猜是E
小测验4OXOXOO
OXXXOO
小测验3答案
小测验4第3问答案
如果密钥长度为56比特,那么用暴力破解找到正确密钥需要平均尝试约2^28次。(X)
平均尝试次数是密钥总数的大约一半。当密钥长度为56比特时,密钥总数为2^56个,它的一半是2^55(注意,不是指数56变成一半得28,而是减1得55)。
因此,当密钥长度为56比特时,平均尝试次数为2^55次,大约相当于3.6x10^16次。
第四章:分组密码的模式
密码算法可以分为分组密码和流密码两种。
分组密码处理完一个分组 就结束了,因此不需要通过内部状态来记录加密的进度;
相对地,流密码是对一串数据流进行连续处理,因此需要保持内部状态。
前面提到的算法中,只有一次性密码本属于流密码,而DES、三重DES、AES( Rijndael )等大多数对称密码算法都属于分组密码。
ECB
将明文分组直接加密
ECB的风险
ECB模式中,每个明文分组都各自独立地进行加密和解密,但这其实是一个很大的弱点。
假如存在主动攻击者Mallory,他能够改变密文分组的顺序。当接收者对密文进行解密时,由于密文分组的顺序被改变了,因此相应的明文分组的顺序也会被改变。也就是说,攻击者Mallory无需破译密码就能够操纵明文。在这个场景中,攻击者Mallory不需要破译密码,也不需要知道分组密码算法,他只要知道哪个分组记录了什么样的数据(即电文的格式)就可以了。
btw,我还以为Mallory是女名。。
CBC
首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密
ECB模式和CBC模式的区别:ECB模式只进行了加密,而CBC模式则在加密之前进行了一次XOR。
CTS
ECB和CTF混合使用
CFB
在CFB模式中,明文数据可以被逐比特加密,因此我们可以将CFB模式看作是一种使用分组密码来实现流密码的方式。
OFB
CTR
CTR模式的全称是CounTeR模式(计数器模式)。CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。
比较
小测验
小测验1
16
小测验2把用户名称和口令错开。。
小测验3能猜出初始化变量。。?
小测验4不道哇。。
小测验5
等于通过XOR加密。。。。?
小测验6XOXX
小测验2答案
很多种方式,可以把口令用用户名称覆盖,这样子知道用户名就可以登陆了
小测验3答案
在CBC模式中,我们假设永远使用相同的初始化向量。于是,当用同一密钥对同一明文进行加密时,所得到的密文一定是相同的。
例如,密码破译者间隔一周收到了两份相同的密文。于是,密码破译者无需破译密码,就可以判断出:这份密文和上周的密文一样,因此两份密文解密所得到的明文也是一样的。
如果在每次加密时都改变初始化向量的值,那么即便是用同一密钥对同一明文进行加密,也可以确保每次所得到的密文都不相同。
小测验4答案
Alice的这个模式,实质上等同于ECB模式。
小测验6答案
怎么能全错哇我要闹了我要闹了好崩溃。。。
在ECB模式的加密中,内容相同的明文分组,一定会被转换为内容相同的密文分组。(O)
在CBC模式的解密中,如果密文分组3损坏,则密文分组5是无法正确解密的。(X)
密文分组3损坏会导致密文分组3和4无法解密,但密文分组5依然能够正常解密。
在CFB模式的加密中,不可以从明文的中间开始加密。(O)
正确。如果不是使用CFB模式,而是使用OFB模式或CTR模式的话,就可以从明文的中间开始加密。
在OFB模式的解密中,分组密码算法本身所实际执行的是加密操作。(O)
正确。在CFB模式、OFB模式和CTR模式中,分组密码算法是用来生成密钥流的,因此,无论是加密还是解密,分组密码算法本身执行的都是相同的操作(加密操作)。
第五章:公钥密码
公钥密码( public-key cryptography )中,密钥分为加密密钥和解密密钥两种。发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。要理解公钥密码,清楚地区分加密密钥和解密密钥是非常重要的。加密密钥是发送者加密时使用的,而解密密钥则是接收者解密时使用的。
仔细思考一下加密密钥和解密密钥的区别,我们可以发现:
●发送者只需要加密密钥
●接收者只需要解密密钥
●解密密钥不可以被窃听者获取
●加密密钥被窃听者获取也没问题
公钥密码:又称非对称密码
加密密钥:一般为公开,又称公钥
解密密钥:绝对不能公开,又称私钥
公钥和私钥是一一 对应的, 一对公钥和私钥统称为密钥对( key pair )。由公钥进行加密的密文,必须使用与该公钥配对的私钥才能够解密。密钥对中的两个密钥之间具有非常密切的关系——数学上的关系——因此公钥 和私钥是不能分别单独生成的。
公钥密码的使用者需要生成一个包括公钥和私钥的密钥对,其中公钥会被发送给别人,而私钥则仅供自己使用。
mod运算
A除以B求余数记作 A mod B
RSA
公钥:(E,N)
E和N这两个数并不是密钥对(公钥和私钥的密钥对)。E和N两个数才组成了一个公钥,因此我们一.般会写成“公钥是(E, N)”或者“公钥是{E,N}”这样的形式,将E和N用括号括起来。
私钥:(D,N)
N:两个质数(p,q)相乘
L:(p-1,q-1)的最小公倍数
E:1<E<L,E与L互质
D:1<D<L,E x D mod = 1
好好笑这个例子。。放出来乐乐
Mallory在我这已经是是弯恋直求而不得拆散别人的坏女人了(恼
(我不管Mallory明明就是女名嘛
小测验
小测验1没必要吧。。Alice知道自己的私钥就好了
小测验2自己也解不开了吧。。?
小测验39
小测验4OOXXO
小测验错题答案
- 这是因为如果将Bob的密钥交给Alice,从此之后(即在本次通信结束之后) Alice就能够对用Bob的密钥加密的密文进行解密。也就是说,对于Bob来说,Alice 有可能成为一个窃听者。
- Alice的方法没有解决三重DES的密钥配送问题。
的确,将AES密钥通过三重DES加密后再发送的话,加密后的AES密钥就不怕被窃听。
但是,我们还是需要配送加密AES密钥时使用的那个密钥(三重DES的密钥),否则接收者就无法解密AES密钥。
Alice的方法只是把问题转移了而已,并没有真正解决密钥配送问题。 - OOXOO
(4)一般来说,对称密码的速度比公钥密码要快。
第六章:混合密码系统
混合密码系统:
●用对称密码加密消息
●通过伪随机数生成器生成对称密码加密中使用的会话密钥
●用公钥密码加密会话密钥
●从混合密码系统外部赋予公钥密码加密时使用的密钥
小测验
小测验1
OXXO
第二部分:认证
第七章:单向散列函数
单向散列函数(one-way hash function)/消息摘要函数( message digest function )/哈希函数/杂凑函数有一个输入和一个输出;
其中输入称为消息(message)/原像;
输出称为散列值(hash value)/消息摘要/指纹。
单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。
散列值的长度和消息的长度无关。
如果单向散列函数计算出的散列值没有发生变化,那么消息很容易就会被篡改,这个单向散列函数也就无法被用于完整性的检查。两个不同的消息产生同一个散列值的情况称为碰撞(collision)。如果要将单向散列函数用于完整性的检查,则需要确保在事实上不可能被人为地发现碰撞。
难以发现碰撞的性质称为抗碰撞性(collision resistance )。密码技术中所使用的单向散列函数,都需要具备抗碰撞性。
单项散列函数需具备:
弱抗碰撞性:要找到和该条消息具有相同散列值的另外一条消息是非常困难的;
强抗碰撞性:要找到散列值相同的两条不同的消息是非常困难的;
单向性::无法通过散列值反算出消息的性质。