密码
- encryptl: 加密
- decrypt: 解密
- plaintext: 明文
- ciphertext: 密文
- 图解:
密码的类型
- 对称密码 symmetric cryptography, 加解密使用的密钥是相同的
- DES(data encryption standard)是一种将64b密文加密成64bit密文的对称密码算法,密钥长度56bit。遇到较大数据需反复加密,目前可以短时间内解密
- 3DES,三重DES。3个密钥如果使用相同密钥,则结果与DES等价。一般不会样
- AES(Advanced Encryption Standard),取代DES成为新标准的一种对称密码算法。AES是一种标准,2000年时选择
rijindael
算法作为AES的实现。目前无密钥无法破解 - 对称密码时,一定会遇到密钥配送问题。通常有
事先共享密钥
,密钥分配中心
,Diffie-Hellman密钥交换
- 公钥密码[publick-key cryptography](非对称密码 asymmetric cryptography)。公钥密码中,密钥分为加密密钥,解密密钥2种,它们不是同一密钥。加密密钥一般是公开的,谁都可以用,解密密钥,由消息接收者保管不能公开。
- 公钥和私钥是一一对应的,不能单独生成,也称密钥对,由公钥加密的密文,必须使用与该公钥对应的私钥才能解密
- 解决密钥配送问题
- 消息接收者生成一对密钥 pub private
- 将pub发给消息发送者
- 消息发送者使用pub加密消息
- 消息接收者用private对密文解密
- 目前使用最广泛的是RSA加密(由发明这个算法的三位科学家首字母组成)
混合密码系统(hybrid cryptosystem)
-
对称密码的缺点,不能很好的解决密钥配送问题
-
公钥密码的缺点,加解密速度比较慢
-
混合密码系统是将对称密码和公钥密码的优势相结合的方法,解决了公钥密码速度慢的问题,并通过公钥密码解决了对称密码的密钥配送问题,网络上的密码通信所用的SSL/TLS都运用了混合密码系统。(https)
-
混合密码-加解密
- 首先,消息发送者要拥有消息接收者的公钥
- 生成会话密钥(临时),作为本次会话的对称密码的密钥来加密消息
- 用消息接收者的公钥,加密会话密钥
- 消息发送者将用非对称加密的密钥,和用对称加密的消息一起发给接收者
- 接收者用私钥解密得到消息的密钥,再用消息的密钥解密消息
单向散列函数(one-way hash function),又称消息摘要函数,哈希函数
- 可以根据消息内容计算出散列值。散列值和消息长度无关,计算速度快,具有单向性,消息不同散列值也不同。输出的散列值 也叫消息摘要,指纹
常见的几种单向散列函数
- MD4,MD5,产生128bit的散列值,MD(message digest)
- SHA-1,产生160bit的散列列
- SHA-2,
SHA-256 -384 -512
- SHA-3,新标准
应用场景图解
数字签名
- 消息发送者A发的内容可能被串改,或者有人伪装A,或者就是A发的,但是A否认。那么接收者B如何确定这段消息的真实性,如何识别串改,伪装,否认? 【chuan改打不出来 先用串代替】。解决方案-数字签名
- 由消息发送者通过“签名密钥”生成签名,用发送者的私钥进行签名。
- 消息接收者通过“验证密钥”验证。任何人都可以通过公钥验证签名
- 上述签名过程在大段消息签名时的弊端是,导致签名大,100kb的消息 签名就得100k,所以在签名前会对消息进行单向散列摘要得到散列值,对其进行签名
- 数字签名其实就是将公钥密码反过来使用
- 如果有人改了文件内容或者签名,最终接收者在比对时,结果不一致,签名验证失败
- 数字签名的目的不是为了保密,是为了识别内容是否被串改以及防止消息发送者否认。
- 要正确使用数字签名,前提是用于验证签名的公钥必须属于真正的发送者,数字签名无法解决中间人攻击,中间人把公钥给换掉来达到攻击目的。数字签名将失效。
- 所以在验证签名之前,首先得先验证公钥的合法性?? 证书
证书(publick-key certificate, PKC)
- 证明公钥的合法性,公钥证书里有姓名,邮箱等个人信息,以及此人的公钥
- 由认证机构(certificate authority, CA)施加数字签名
- CA就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或组织
- https流程