如何加密解密?
当我们拿到加密数据后,肯定希望能够解密,因为我们需要当中的数据,跟前面不可逆的加密是不一样的,本篇文章学的是对我们需要的数据进行加密
通常密钥是一串数字或者字符串,类似于规则,告诉明文该如何加密
不同的密钥加密完肯定是不一样的
对称加密(对称密码)
加密用的密钥跟解密用的密钥是同一把
非对称加密(公钥密码)
加密用的密钥跟解密用的密钥不是同一把
对称加密(Symmetric Cryptography)
◼ 在对称加密中,加密、解密时使用的是同一个密钥
◼ 常见的对称加密算法有
DES
3DES
AES
对称加密和非对称加密方法由两部分组成:密钥+加密算法
DES(Data Emcryption Standard)
◼ DES是一种将64bit明文加密成 64bit密文的对称加密算法,密钥长度是56bit
如果加密的数据比较长,它要一段一段来,加密完,再整合拼接在一起
◼ 规格上来说,密钥长度是64bit ,但每隔7bit会设置一个用于错误检查的bit,因此密钥长度实质上是56bit
但加上错误检查的bit,是64bit,总共有8组
◼ 由于DES 每次只能加密64bit的数据,遇到比较大的数据,需要对 DES加密进行迭代(反复)
◼ 目前已经可以在短时间内被破解,所以不建议使用
3DES(Triple Data Encryption Algorithm)
◼ 3DES,将DES重复3次所得到的一种密码算法,也叫做3重DES
三重DES并不是进行三次DES加密(加密 —>加密 —>加密)
而是加密( Encryption) —>解密(Dencryption )—>加密(Encryption )的过程
◼ 目前还被一些银行等机构使用,但处理速度不高,安全性逐渐暴露出问题
3DES
◼ 3个密钥都是不同的,也称为DES-EDE3
◼ 如果所有密钥都使用同一个,则结果与普通的DES是等价的
◼ 如果密钥1、密钥3相同,密钥2不同,称为DES-EDE2
AES(Advanced Encryption Standard)
比BASE64少了一个等号
可以先去解密BASE64,发现是乱码,这个时候就可以判定他是AES加密
◼ 取代DES成为新标准的一种对称加密算法,又称 Rijndael加密法
◼ AES的密钥长度有128、192、256bit三种
密钥越长,破解难度越大
◼ 目前AES,已经逐步取代DES、3DES,成为首选的对称加密算法
◼ 一般来说,我们也不应该去使用任何自制的密码算法,而是应该使用AES
它经过了全世界密码学家所进行的高品质验证工作
这个加密算法是没有问题的,但是跟非对称加密相比,它还是差了点,因为对称加密无法保证密钥在网络传输过程当中不被窃取
先协商好用什么算法,然后再把我的密钥给你,让你对拿到的数据进行解密
接收方只有拿到密钥,才可以对加密的数据进行解密
密钥配送问题
◼ 在使用对称加密时,一定会遇到密钥配送问题
◼ 如果Alice将使用对称加密过的消息发给了Bob
只有将密钥发送给Bob , Bob才能完成解密
在发送密钥过程中
✓ 可能会被Eve窃取密钥
✓ 最后Eve也能完成解密
因为是在网络当中传输的,密钥有被窃取的风险
如何解决密钥配送问题
◼ 有以下几种解决密钥配送的方法
事先共享密钥(比如私下共享)
密钥分配中心( Key Distribution Center,简称 KDG)
Diffie-Hellman密钥交换
非对称加密
非对称加密(Asymmetric Cryptography)
A取反,非对称加密
◼ 在非对称加密中,密钥分为加密密钥、解密密钥2种,它们并不是同一个密钥
◼ 加密密钥:一般是公开的,因此该密钥称为公钥( public key)
谁拿到我的公钥都可以,不存在泄密,就算拿到我的密文我也无所谓
因此,非对称加密也被称为公钥密码( Public-key Cryptography)
◼ 解密密钥:由消息接收者自己保管的,不能公开,因此也称为私钥( private key)
谁是接收方谁就生成密钥对,接收方用自己的私钥对密文进行解密
公钥、私钥
◼ 公钥和私钥是一一对应的,不能单独生成
一对公钥和私钥统称为密钥对( key pair)
◼ 由公钥加密的密文,必须使用与该公钥对应的私钥才能解密
◼ 由私钥加密的密文,必须使用与该私钥对应的公钥才能解密
非对称加密反过来也是可以的,从安全的角度来看,这会导致数据被泄露,因为私钥加密的数据谁都可以解密(公钥是公开的);从数字签名的角度来看,他是有意义的
从很大的随机数当中挑出一些来,生成一对密钥
A要有B的公钥,B要有A的公钥,双方之间才可以进行加密和解密
解决密钥配送问题
非对称加密,决定了你没有私钥,就是解不了密
◼ 由消息的接收者,生成一对公钥、私钥
◼ 将公钥发给消息的发送者
◼ 消息的发送者使用公钥加密消息
◼ 非对称加密的加密解密速度比对称加密要慢
RSA
◼ 目前使用最广泛的非对称加密算法是RSA
◼ RSA的名字,由它的3位开发者,即 Ron Rivest、 Adi Shamir、 Leonard Adleman的姓氏首字母组成
混合密码系统(Hybrid Cryptosystem)
◼ 对称加密的缺点
不能很好地解决密钥配送问题(密钥会被窃听)
◼ 非对称加密的缺点
加密解密速度比较慢
◼ 混合密码系统:是将对称加密和非对称加密的优势相结合的方法
解决了非对称加密速度慢的问题
并通过非对称加密解决了对称加密的密钥配送问题
◼ 网络上的密码通信所用的SSL/TLS都运用了混合密码系统
混合密码— 加密
◼ 会话密钥(session key)
为本次通信随机生成的临时密钥
作为对称加密的密钥,用于加密消息,提高速度
传输的数据量大,一定是对称加密,非对称加密太复杂了,不适合大数据的加密
◼ 加密步骤(发送消息)
① 首先,消息发送者要拥有消息接收者的公钥
② 生成会话密钥,作为对称加密的密钥,加密消息
③ 用消息接收者的公钥,加密会话密钥
④ 将前2步生成的加密结果,一并发给消息接收者
◼ 发送出去的内容包括
用会话密钥加密的消息(加密方法:对称加密)
用公钥加密的会话密钥(加密方法:非对称加密)
混合密码—解密
◼ 解密步骤(收到消息)
① 消息接收者用自己的私钥解密出会话密钥
② 再用第①步解密出来的会话密钥,解密消息
混合密码—加密解密流程
◼Alice >>>>>>>>Bob
发送过程(加密过程)
① Bob先生成一对公钥、私钥
② Bob把公钥共享给Alice
③ Alice随机生成一个会话密钥(临时密钥)
④ Alice用会话密钥加密需要发送的消息(使用的是对称加密)
⑤ Alice用 Bob的公钥加密会话密钥(使用的是非对称加密)
⑥ Alice把第④、⑤步的加密结果,一并发送给Bob
接收过程(解密过程)
① Bob利用自己的私钥解密会话密钥(使用的是非对称加密算法进行解密)
② Bob利用会话密钥解密发送过来的消息(使用的是对称加密算法进行解密)
想象以下场景
◼ Alice发的内容有可能是被篡改的,或者有人伪装成
Alice发消息,或者就是Alice发的,但她可以否认
◼ 问题来了: Bob如何确定这段消息的真实性?如何识别篡改、伪装、否认?
◼ 解决方案
数字签名
明文传输:数据不敏感的时候,我们用明文传输
数字签名:用来保证可靠性的,不是用来加密的
以下的数字签名讨论建立在明文传输,只想要讨论是谁发的基础上
数字签名
◼ 在数字签名技术中,有以下2种行为
生成签名
✓ 由消息的发送者完成,通过“签名密钥”生成
验证签名
✓ 由消息的接收者完成,通过“验证密钥”验证
◼ 如何能保证这个签名是消息发送者自己签的?
用消息发送者的私钥进行签名
私钥是不公开的,个人持有
数字签名—过程
加密:把一串你看得懂的东西,变成你看不懂的乱七八糟的东西
存在非对称加密的缺点,速度慢(特别是数据大的时候)
数字签名—过程改进
散列值是固定的,而且很短,是消息的唯一标识(相当于ID),所以对散列值加密,跟对消息加密是一样的(可以解决非对称加密慢的问题)
消息生成散列值,签名解密成散列值,然后进行比对,查看数据是否被篡改
数字签名—疑惑
◼ 如果有人篡改了消息内容或签名内容,会是什么结果?
签名验证失败,证明内容被篡改了
◼ 数字签名不能保证机密性?
数字签名的作用不是为了保证机密性,仅仅是为了能够识别内容有没有被篡改
◼ 数字签名的作用
确认消息的完整性
识别消息是否被篡改
防止消息发送人否认
用你的公钥解密的,跟你发送过来的数据单向散列函数加密一模一样,你是无法否认的
非对称加密—公钥、私钥再总结
在非对称加密中,任何人都可以使用公钥进行加密
在数字签名中,任何人都可以使用公钥验证签名
非对称加密—公钥、私钥再总结
◼ 数字签名,其实就是将非对称加密反过来使用
◼ 既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密
公钥负责加密,私钥负责解密
◼ 既然是签名,那肯定是不希望有人冒充我发消息,所以只有我才能签名
私钥负责签名,公钥负责验签
公钥的合法性
(从消息加密的角度来看)
◼ 如果遭遇了中间人攻击,那么
公钥将可能是伪造的
签名将可能是伪造的(可以用中间人的私钥进行签名,说成是发送方的)
◼ 如何验证公钥的合法性?
证书
用签名无法解决中间人攻击
归根到底是公钥在互联网中传输造成的问题
证书(Certificate)
◼ 说到证书
首先联想到的是驾驶证、毕业证、英语四六级证等等,都是由权威机构认证的
◼ 密码学中的证书,全称叫公钥证书(Public-key Certificate,PKC),跟驾驶证类似
里面有姓名、邮箱等个人信息,以及此人的公钥
并由认证机构(Certificate Authority,CA)施加数字签名
私钥在CA手上
◼ CA就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织
公钥证书:认证这个公钥是属于你的,防止被别人假冒
有国际性组织、政府设立的组织
有通过提供认证服务来盈利的企业
个人也可以成立认证机构
自己做的证书,一般是没有人会去认的
证书—使用
帮助我们解决中间人攻击的问题
跟CA的网络通道是安全的
能够用CA的公钥来解签,说明这个数字签名是正确的
CA相当于担保
◼ 各大CA的公钥,默认已经内置在浏览器和操作系统中
在安装完浏览器的时候,就已经帮我们弄好了
证书—注册和下载
证书—查看windows已经信任的证书
① Windows键 + R >>> 输入mmc
② 文件 >>> 添加/删除管理单元
③ 证书 >>> 添加 >>> 我的用户账户 >>> 完成 >>> 确定
在其中选择一个证书点进去>>>详细信息,便可以仔细查看
在出现HTTPS之前就有对请求参数进行加密
HTTPS是在传输过程当中进行加密
建立通道,在传输过程当中肯定是安全的,保证传输当中不被人篡改