加密算法
分为两类:
- 对称密钥加密(Symmetric-key algorithms):加密、解密都是用相同的密钥,速度相对 非对称加密 较快。 常见有DES、AES算法。
-
非对称加密(Asymmetric cryptography):也就是公开密钥加密(public-key cryptography),一对密钥,对外公开的叫公钥,公钥可提供给所有人,私钥是保密的不对外公开。常见有RSA算法。
使用公钥加密的信息,只有私钥才能解密(私钥加密的数据,用公钥也能解密)。
数字签名(Digital Signature)与摘要(digest)
- 摘要:针对 原始数据 通过 hash 算法计算得到一串固定长度的字符,不同数据通过 hash 算法得到的字符串是不一样的,摘要主要用来判断数据是否被篡改了;
- 将摘要用私钥加密得到的密文就称作 数字签名
数字证书(Digital Certificate)
- 由 数字证书认证机构(Certificate Authority)颁发,用户可向 CA 申请(世界上有多个CA机构);2)自签名,即自己制作,不会被广泛信任;
- 数字证书,主要包含了1)认证的CA机构名称、2)证书持有者的公钥、3)证书内容本身的数字签名(CA用它的私钥加密)4)证书的签名算法标识,包括公开密钥算法和 hash 算法;
简单举例:以用户上网通过浏览器访问安全网站为例:
- 浏览器使用网站的公钥加密数据后发给网站,传输途中数据如果被第三方监听窃取了也没关系(第三方没有网站的私钥解密不了)
- 网站接收到数据,使用其私钥解密,就可以得到用户的明文数据;
- 网站加密数据返回给用户
几个问题:
- 浏览器怎么获取公钥呢?
- 网站会把数字证书发给浏览器,数字证书中包含公钥了信息(这里,公钥的形式就是 数字证书)
-
为什么用数字证书?
为了确保浏览器收到的网站公钥不是第三方伪造或篡改了,浏览器会内置大多数权威可靠的CA根证书(含有CA的公钥!),当接收到网站的数字证书,会校验证书:- 证书颁发的机构是否伪造的,浏览器不认识不信任,则列为危险证书;
- 根据证书的机构名称找到了内置CA证书中的公钥,对证书的数字签名(由CA机构用CA私钥加密了的)解密,解密失败则列为危险证书;
- 解密成功的话,得到了证书的摘要 A;此时还要根据证书中标明的 hash 算法重新计算得到证书的摘要 B,两者比较,不相同的话,说明证书内容被篡改了,公钥可能被修改了;
-
网站怎么加密数据返回给用户?
- 方案一:用网站的私钥加密返回,浏览器再用网站公钥解密得到明文;但是在数据传输过程中第三方获取了该加密数据的话,也可以用网站的公钥解密出来,所以这方案不靠谱。
- 实际方案:使用对称密钥,网站和浏览器都用相同的密钥加解密数据;问题是网站和浏览器得先协商出一个对称密钥,保证对称密钥不被第三方知道窃取;另外使用对称密钥的原因出自于性能,使用对称加密速度更快,
-
对称密钥的生成?(使用RSA算法为例)
- 浏览器发送随机数
client_random
、支持的加密方式(明文传输) - 网站返回随机数
server_random
、选择的加密方式和证书 (明文传输) - 浏览器验证网站的证书,使用证书中的公钥加密随机数
premaster secret
发送给网站 (加密传输) - 网站接收数据后,使用私钥解密
premaster secret
- 浏览器与网站都有了三个随机数,通过约定的加密方式使用
client_random
server_random
premaster secret
生成了一把对称密钥,称作会话密钥,之前的步骤称为 握手阶段(handshake) - 随后浏览器与网站使用这把对称密钥 加密数据进行通信;
网友评论