技术记录栈

记录点滴:java、datebase、linux、spring、javascript、nginx

2018/10/03

非对称密钥加密算法及HTTPS应用原理

密码学是针对报文进行编/解码的机制与技巧,密码学不仅用于加密报文防止意外读取与篡改,还常应用于对数据进行验签。

数字非对称密钥加密算法及HTTPS应用原理

密码

对文本进行编码,使数据不能被直接识别的算法。

密钥

改变密码行为的数字化参数。

对称密钥加密系统

编/解码使用相同密钥的算法

公开密钥加密系统

能够处理百万计算机机密报文的系统

数字签名

用于验证报文未被伪造或篡改的校验和。

数字证书

由可信组织验证和签发的识别信息。

流行的对称密钥加密算法包括:AES/DES、Triple-DES、RC2和RC4。

 

对称密钥长度与枚举攻击

好的加密算法会迫使攻击者尝试所有可能的密钥之后才能破解,而这种尝试猜测密钥的方法称之为枚举攻击(enumeration attack)。

可用密钥值的数量取决于密钥中的位数,以及密钥的有效数量,对于对称密钥加密技术而言,通常所有的密钥都是有效的,而有些非对称密钥加密系统中密钥直接与质数挂钩,有效密钥的数量直接锐减。

8位的密钥有256种可能,40位密钥有2的40次方种可能(约一万亿),位数越大可能性骤然递增。40位的密钥在每秒可以进行数十亿次计算的超级计算机面前有些弱不禁风,相比之下128位的密钥要可靠很多。

对称密钥加密技术的缺点之一就是双方都要持有共同的密钥。这在互联网应用领域是不可接受的,公开密钥加密技术则是应对这一问题的解决方案。

 

公开密钥加密技术

公开密钥加密技术使用两个非对称密钥,一个用于编码,另一个用于解码。用于编码的密钥是众所周知的(公钥),而解码密钥只是特定一方持有(私钥)。而在互联网应用安全通信方面,私钥通常存在于服务器上,而浏览器则持有公钥(对于常见的单向认证场景而言)。

通过公开密钥加密技术,所有计算机用户都可以使用安全协议进行通信,制定标准化的公开密钥技术就显得尤为重要,大规模的公开密钥架构标准(Public-Key Infrastructure,PKI)已经在十几年前就开始了。

 

公开密钥算法RSA

公开密钥算法需要满足在知道下列条件的情况下,依然无法通过计算得出私有密钥。

1、公开密钥(所以人都可以获取)。

2、一小段被拦截的加密报文(通过网络嗅探器获取)。

3、一份报文及与之相关的密文(对任意一段文字运行加密算法即可获得)。

 

混合加密系统与会话密钥

公开密钥加密算法由于计算过程相对较慢,所以混合加密采用公开密钥建立起安全通道,然后通过安全通道约定并生成临时的随机的对称密钥,最后使用对称加密技术对数据进行加密。

 

数字签名(digital signing)

数字签名是加在报文上的特殊校验码,用以确认数据的发出方是否可信,同时证明数据未被篡改过。数字签名通常是用非对称公开密钥技术产生的,只有所有者才持有私有密钥,因此可以当作所有者的“指纹”使用。

 

数字证书

数字证书中包含了由某个受信任组织担保的用户或公司的相关信息,就像一张身份识别卡(通常被称作“certs”)。

数字证书通常由权威的“证书颁发机构”以数字方式签发,数字证书除了包含纸质ID中常见的内容以外,还包含了对象的公开密钥、以及对象和所用签名算法的描述信息。

数字证书没有单一的全球标准,任何人都可以使用数字证书工具生成数字证书,只不过不受信任罢了。

 

用证书对服务器进行认证

通过浏览器发起一个https的请求,浏览器会自动获取服务器的数字证书,浏览器收到数字证书会对签名颁发机构进行检查,机构若为权威的公共签名机构,浏览器则信任这个证书,并与服务器开始建立安全连接。

 

HTTPS的应用

 

在https中,客户端首先与WEB服务器端口443建立一条TCP连接,一旦建立了TCP连接,客户端与服务器就会初始化SSL层(安全层),对加密参数进行沟通,并交换密钥,握手完成之后,SSL初始化完成。安全层是通过SSL及其现代替代协议TLS来实现的。客户端将HTTP报文发送给TCP之前,先在安全层进行加密。如果还是不很清楚HTTPS,可以与其他协议进行比较就一目了然了,如WebSocket

 

SSL握手

在发送已加密的http报文之前,客户端与服务器要进行一次SSL握手,握手过程完成如下操作:
1、交换协议版本号;

2、选择一个双方都了解的密码;

3、对双方身份进行认证;

4、生成临时的会话密钥,以便加密信道。