密码技术探险——图解密码技术读书笔记
2018-03-07 20:59
134 查看
从明文通信到对称加密
明文通信
开始加密
凯撒密码(字母代换)
简单替换密码
对称密码标准
对称加密
解决秘钥配送
公钥加密
简述
公钥算法——RSA
缺陷
混合密码系统
加密
解密
单向散列函数——文件被修改了吗?
概述
性质
举例
MD5
SHA-1/2/3 (Secure Hash Algorithm)
不能解的问题
消息认证码——消息是伪装者发的吗?
无法解决的问题
数字签名——消息到底是谁写的
概述
应用举例
无法解决的问题
证书——公钥合法了
Eve 可以直接窃听到Alice与Bob的通信过程,通过抓包就可以查看到通信内容,如果邮件内容是羞答答的,怎么可以被其他人看到呢?(邪魅微笑)
在逼格满满的咖啡厅,你正在愉快的刷着微博,逛着知乎,浏览豆瓣,你以为你连着免费WiFi爽歪歪,
图,喝咖啡,玩手机
然后其实被他笔记本造的WiFi,
图,黑客
顺便一提,关于抓包,现成的抓包工具很多,如 wireshark,charles 等,这里有一篇使用charles抓APP包的文章,要不要 看看
将一个字母表向指定方向平移N位,解密反之,N为密钥 。
密钥只可能是0-25共26个,用1-25每个数作为密钥尝试解密,很容易发现明文,从而得出密钥是几。(暴力破解)
两个字母表中字母之间随机一一对应, 密钥是替换表。
密钥空间是 26!= 2^88。所以考虑使用(频率破解)。
AES(Advanced Encryption Standard) (应该使用)
AES 一轮的步骤:
加密:SubBytes —> ShiftRows —> MixColumns —> AddRoundKey
解密:AddRoundKey —> InvMixColumns —> InvShiftRows —> InvSubBytes
其中步骤的含义为:
SubBytes: 每个字节的值(0-255的任意值)为索引,从一张拥有256个值的替换表(S-Box)中查找对应的值处理。将一个1字节的值替换成另一个1字节的值。
ShiftRows:将4个字节为单位的行(Row)按照一定的规则左平移。
MixColumns:将一个4字节的值进行比特运算,变成另一个4字节的值。
AddRoundKey :将MixColumns的输出与轮密钥XOR。
这样,即使第三者 Eve 窃听到通信过程,那么 Eve 也只能看到奇奇怪怪符号组成的密文
这样Alice和Bob就可以放心的互相通信了吗?对啊!当然不是,这只是解决了机密性的问题,对称加密的密钥需要被发送给对方,对方才能解密,但直接发送,秘钥也会被窃听,这就是秘钥配送问题。
通过密钥分配中心解决;
通过 Diffie-Hellman 密钥交换来解决;
通过公钥密码来解决。
公钥——用来加密信息,公开给任何人
私钥——用来解密信息,自己私藏
公钥和私钥匙是天生一对,一个确定的公钥加密的信息,只有他的私钥才能解密信息。
使用公钥加密对信息进行加密通信的流程如下:
原理详情:
阮一峰的网络日志——RSA算法原理(一)
阮一峰的网络日志——RSA算法原理(二)
能快速计算出散列值。
抗碰撞性,消息不同,散列值也不同。
具备单向性,根据散列值无法计算出消息。
其强抗碰撞性已经被攻破,已经不再安全。
sha2:由 SHA-256 和 SHA-512衍生出6种版本,显然鉴于内部状态,SHA-256系列更适合32位CPU。
sha3:2012年选拔出名为Keccak的算法作为sha3,结构完全不同sha-2,适用各种设备,硬件上实现性能高,更安全。
要计算MAC值必须持有共享密钥,MAC正是利用这一性质确认完整性的。
只有通信双方才能持有共享密钥,密钥配送问题可以使用公钥密码,Diffie-Hellman密钥交换,密钥分配中心等来解决。
消息认证码解决了完整性与伪装问题,仍然无法解决“对第三方证明”和“防否认”问题。这就需要数字签名来解决。
数字签名对签名者的秘钥和验证者的秘钥进行了区分,使用验证签名无法生产签名。签名秘钥只由签名者持有。
这和公钥密码有点相似了。事实上,签名就是公钥密码“反过来”实现的。
对于消息签名,速度太慢,因为每个消息的散列值是不一样的,所以一般只需要对消息的散列值进行签名就可以了。
软件下载。
公钥证书。(得到合法的公钥)
SSL/TLS。
为验证公钥是否合法,我们需要使用证书。
证书主要包含:
证书序号。
证书颁发机构。
公钥所有者。
SHA-1 指纹。
MD5指纹。
证书ID。
有效期起始时间。
有效期结束时间。
散列算法。
秘钥ID。
秘钥用途。
明文通信
开始加密
凯撒密码(字母代换)
简单替换密码
对称密码标准
对称加密
解决秘钥配送
公钥加密
简述
公钥算法——RSA
缺陷
混合密码系统
加密
解密
单向散列函数——文件被修改了吗?
概述
性质
举例
MD5
SHA-1/2/3 (Secure Hash Algorithm)
不能解的问题
消息认证码——消息是伪装者发的吗?
无法解决的问题
数字签名——消息到底是谁写的
概述
应用举例
无法解决的问题
证书——公钥合法了
从明文通信到对称加密
明文通信
为什么要加密呢?不妨先看看明文通信Eve 可以直接窃听到Alice与Bob的通信过程,通过抓包就可以查看到通信内容,如果邮件内容是羞答答的,怎么可以被其他人看到呢?(邪魅微笑)
在逼格满满的咖啡厅,你正在愉快的刷着微博,逛着知乎,浏览豆瓣,你以为你连着免费WiFi爽歪歪,
图,喝咖啡,玩手机
然后其实被他笔记本造的WiFi,
图,黑客
顺便一提,关于抓包,现成的抓包工具很多,如 wireshark,charles 等,这里有一篇使用charles抓APP包的文章,要不要 看看
开始加密
凯撒密码(字母代换)
将一个字母表向指定方向平移N位,解密反之,N为密钥 。
密钥只可能是0-25共26个,用1-25每个数作为密钥尝试解密,很容易发现明文,从而得出密钥是几。(暴力破解)
简单替换密码
两个字母表中字母之间随机一一对应, 密钥是替换表。
密钥空间是 26!= 2^88。所以考虑使用(频率破解)。
对称密码标准
DES(Data Encryption Standard)(不再推荐)AES(Advanced Encryption Standard) (应该使用)
AES目前采用的是
Rijndael算法,
Rijndael的分组长度可以是以32bit为单位在128到256范围内选择。目前AES 规定分组长度只能有128,192,256三种。
AES 一轮的步骤:
加密:SubBytes —> ShiftRows —> MixColumns —> AddRoundKey
解密:AddRoundKey —> InvMixColumns —> InvShiftRows —> InvSubBytes
其中步骤的含义为:
SubBytes: 每个字节的值(0-255的任意值)为索引,从一张拥有256个值的替换表(S-Box)中查找对应的值处理。将一个1字节的值替换成另一个1字节的值。
ShiftRows:将4个字节为单位的行(Row)按照一定的规则左平移。
MixColumns:将一个4字节的值进行比特运算,变成另一个4字节的值。
AddRoundKey :将MixColumns的输出与轮密钥XOR。
对称加密
Alice 和 Bob 使用相同的秘钥来加解密消息,也就是对称加密,上面提到的加密算法都是对称加密。这样,即使第三者 Eve 窃听到通信过程,那么 Eve 也只能看到奇奇怪怪符号组成的密文
这样Alice和Bob就可以放心的互相通信了吗?对啊!当然不是,这只是解决了机密性的问题,对称加密的密钥需要被发送给对方,对方才能解密,但直接发送,秘钥也会被窃听,这就是秘钥配送问题。
解决秘钥配送
事先当面将秘钥给对方,不通过网络传输秘钥,避免了被窃听的机会;通过密钥分配中心解决;
通过 Diffie-Hellman 密钥交换来解决;
通过公钥密码来解决。
公钥加密
简述
公钥加密又叫非对称加密,这类加密算法中存一对秘钥:公钥——用来加密信息,公开给任何人
私钥——用来解密信息,自己私藏
公钥和私钥匙是天生一对,一个确定的公钥加密的信息,只有他的私钥才能解密信息。
使用公钥加密对信息进行加密通信的流程如下:
公钥算法——RSA
RSA是一种非对称加密算法,是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,并以他们名字的首字母命名。name | VALUE |
---|---|
秘钥 | 数 E 和 数 N |
秘钥 | 数 D 和 数 N |
加密过程 | 密文=(明文E)mod(N)密文=(明文E)mod(N) |
解密过程 | 明文=(密文D)mod(N)明文=(密文D)mod(N) |
原理详情:
阮一峰的网络日志——RSA算法原理(一)
阮一峰的网络日志——RSA算法原理(二)
缺陷
加密运算强度大,费时间,比如RSA加密过程是对明文求指数运算后再取模,这显然比AES运算量要大。有何优化方案吗?有,结合对称加密与公钥加密。混合密码系统
加密
解密
单向散列函数——文件被修改了吗?
概述
网络下载软件,或者传输文件,如何验证没有被第三方篡改呢?即是数据的的完整性(intergrity),也称一致性。单项散列函数就是生成文件“指纹”的方法。单项散列函数也称为消息摘要函数(
message digest function),哈希函数,杂凑函数。
性质
根据任意长度的消息计算出固定长度的散列值。能快速计算出散列值。
抗碰撞性,消息不同,散列值也不同。
具备单向性,根据散列值无法计算出消息。
举例
MD5
MD5(Message Digest):一般128位的MD5散列被表示为32位十六进制数字,例如9e107d9d372bb6826bd81d3542a419d6 = MD5("The quick brown fox jumps over the lazy dog");
其强抗碰撞性已经被攻破,已经不再安全。
SHA-1/2/3 (Secure Hash Algorithm)
sha1: 已经被列为“可谨慎运用的密码清单”,为了保持兼容性才使用;其强抗碰撞性已经 被攻破。sha2:由 SHA-256 和 SHA-512衍生出6种版本,显然鉴于内部状态,SHA-256系列更适合32位CPU。
名称 | 输出长度 | 内部状态长度 | 备注 |
---|---|---|---|
SHA-224 | 224 | 32 * 8 = 256 | 将SHA-256的结果截掉32比特 |
SHA-256 | 256 | 32 * 8 = 256 | |
SHA-521/224 | 224 | 64 * 8 = 512 | 将SHA-512的结果截掉288比特 |
SHA-512/256 | 256 | 64 * 8 = 512 | 将SHA-512的结果截掉256比特 |
SHA-384 | 384 | 64 * 8 = 512 | 将SHA-512的结果截掉128比特 |
SHA-512 | 512 | 64 * 8 = 512 |
不能解的问题
使用单向散列函数能实现完整性的检察,但是有些如果主动攻击者Mallory伪装成Alice,向Bob同时发送了消息和散列值。这时Bob能通过单向散列函数检察消息的完整性,但是却没能识别出这条消息是Mallory**伪装**成Bob发送的,无法被认证。消息认证码——消息是伪装者发的吗?
消息认证码(Message Authentication Code) 是一种与密钥相关联的单项散列函数。要计算MAC值必须持有共享密钥,MAC正是利用这一性质确认完整性的。
只有通信双方才能持有共享密钥,密钥配送问题可以使用公钥密码,Diffie-Hellman密钥交换,密钥分配中心等来解决。
无法解决的问题
重放攻击消息认证码解决了完整性与伪装问题,仍然无法解决“对第三方证明”和“防否认”问题。这就需要数字签名来解决。
数字签名——消息到底是谁写的
概述
设想要防否认,只要签名只能由消息发送者生产就OK了。数字签名对签名者的秘钥和验证者的秘钥进行了区分,使用验证签名无法生产签名。签名秘钥只由签名者持有。
这和公钥密码有点相似了。事实上,签名就是公钥密码“反过来”实现的。
对于消息签名,速度太慢,因为每个消息的散列值是不一样的,所以一般只需要对消息的散列值进行签名就可以了。
应用举例
信息安全公告。软件下载。
公钥证书。(得到合法的公钥)
SSL/TLS。
无法解决的问题
通过对散列值签名我们可以解决完整性,篡改,伪造问题,但是用于验证签名的公钥是否是真正的发送者的呢?中间人可以用自己的私钥签名,并把自己的公钥发送给接受者。为验证公钥是否合法,我们需要使用证书。
证书——公钥合法了
证书就是我们信任的第三方对发送者的公钥加上了他们的数字签名。相当于身份证一样的东西。这里的第三方包括例如赛门铁客等机构,也可以是自己组织内部成立的一个机构。证书主要包含:
证书序号。
证书颁发机构。
公钥所有者。
SHA-1 指纹。
MD5指纹。
证书ID。
有效期起始时间。
有效期结束时间。
散列算法。
秘钥ID。
秘钥用途。
相关文章推荐
- Android:使用密码技术安全地保存凭证
- 无线密码破解技术
- Pycrypto与RSA密码技术笔记
- 【实用技术】“位于XDB的服务器localhost要求用户名和密码”解决办法
- (转)安全技术:破解无线路由密码
- winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已解] 望一起讨论)(技术改变世界-cnblog)
- 信息安全导论-密码技术部分-读书笔记-1
- 基于JCE的密钥分配------------------------(三)利用公钥密码技术实现对称密码技术密钥的分配
- 密码技术
- Java加密技术——使用哈希加盐法来为密码加密
- C语言高级技术之--密码破解
- 必须要懂得的密码技术
- 基于HOOK和MMF的Windows密码渗透技术 (转载)
- 一些简单的密码编码学中代替与置换技术
- 高端技术:椭圆曲线密码体制与电子政务
- 密码学复习笔记1【基本概念与传统密码技术】
- 信息安全的核心——密码技术
- 密码应用技术系列之1:密码应用技术概述
- Linux SSH密码暴力破解技术及***实战
- 用ASP技术编制隐藏用户密码程序