常见的加密算法和协议有对称加密,非对称加密,单向加密
1、对称加密:加密和解密使用一个密钥;依赖于算法和密钥,算法是可以公开的,密钥是不能公共的,因为加密是依赖于密钥的。安全性依赖于密钥,而非算法;
常见算法:
DES(Data Encryption Standard,56bits)、3DES、AES(Advanced EncryptionStandard)、Blowfish、Towfisk、IDEA、RC6、CASTS
特性:
1、加密、解密使用同一密钥
2、将明文分隔成固定大小的块,逐个进行加密;
缺陷:
1、密钥过多;
2、密钥分发;
2、非对称加密:公钥加密
密码对儿:私钥(secret key)和公钥(public key);私钥仅允许个人使用;公钥是公开给所有获取;
公钥和私钥不是在创建时就成对出现的,而公钥是从私钥中提取出而来;创建时只需要创建私钥,从私钥中使用某种工具,把公钥从私钥中提取出来就可以了。
工作特性:使用公钥加密的数据,只能使用与此公钥配对儿的私钥解密,反之亦然。
用处:
1、身份认证:私钥拥有者用自己的私钥加密的数据,只要用其公钥解密,即可认证其身份;私钥加密不能保证数据的安全性,只有用于身份认证;
2、密码交换:被通信方通信之前,首先获取到对方的公钥,自己生成一个加密密码(对称加密密码),用对方的公钥加密,并发送给对方;
3、数据加密:
为什么不用非对称加密来加密数据呢?因为非对称加密数据比起对称加密要慢上10^3倍,都是用对称加密来加密数据,在用非对称加密来加密对称加密的密钥。
常用算法:
RSA、DSA、ELGamal
特性:
1、密钥长度较大,例如512bits,2048,4096bits
2、加密解密分别使用密钥对儿中的密钥相对进行;
3、常用于数字签名和密钥交换;
3、单向加密
提出数据的特征码;每一个数据的都一个唯一的特性码,严重的依赖于算法。
特性:
1、定长输出:无论原来的数据是多大级别,其加密结果长度一样;
2、雪崩效应;原始数据的微小改变,将会导致结果巨大变化;
3、不可逆;
算法:
MD5、SHA1、SHA256、SHA384、SHA512
单向加密已经被运行到CentOS操作系统中的用户名密码加密/etc/shadow文件中,其中CentOS 5运行的MD5,CentOS 6运行的SHA512。
用处:数据完整性
二、加密解密通信过程
三、数字证书的格式(x.509 v3):
版本号(version)
序列号(serial number):是一个整数,CA使用唯一标识此证书的号码;
签名算法标志(Signature algorithmidentifier):它是一个带参数的,用于给证书签名本身说明,主要是让用户验证证书是可靠的
发行者的名称:即CA自己的名称
有效期:两个日期,起始日期和终止日期;
证书主体名称:证书拥有者的自己名字
证书主体公钥信息:证书拥有者自己的公钥
发行商的唯一标识:(可选)
证书主体的唯一标识:(可选)证书拥有者自己的数字标识
扩展信息:
签名:CA对此证书的数字签名,用于验证证书是自己的签发的
四、https
客户端和服务端进行通信时要进行三次握手,ssl也是基于TCP来实现的,在进行三次握手之后客户端向服务端要证书,服务端把证书给客户端,此时客户端拿到证书进行验证,先用本地存的根证书找看哪个CA给证书签的证,于是在本地找CA的证书,如果本地有说明我们信任此证书,接着用CA去解密证书中的数字签名,能解密说明此证书是CA发的,解密的结果是特征码,然后在用同样的单向加密算法去计算证书的特征码,并比较,比较之后发现结果相同,说明证书可靠,否则证书不可靠;在验证访问的域名(FQDN)必须与证书中的主体保持一致,否则客户端会认为拿的不是服务端的证书,在验证有效期等;
如果以上都是合法的,在从证书中提取对方的公钥信息,并且双方开始建立协商,双方使用哪种对称加密算法,使用哪种单向加密算法,使用哪种公钥加密算法;而后客户端生成一个临时加密密钥,并使用对方的公钥加密之后发送给服务端,于是服务器就已经拿到客户端访问请求的页面,把页面使用对称加密后发送给客户端,客户端拥有私钥解密就能在浏览器中显示;
第一步:验证证书主体、有效期、有没有在证书吊销列表中等;
第二步:从证书中提取对方的公钥信息;
第三步:生成对称加密的密钥,使用对方的公钥加密密钥,传送给服务端;
第四步:服务端使用私钥解密密文;
第五步:使用对称加密密钥加密客户端请求页面,发送给客户端;
第六步:客户端使用对称加密密钥解密请求页面,并在浏览器显示页面;