1.基础知识

  •  密钥

一般就是一个字符串或数字,在加密或者解密时传递给加密/解密算法。公钥、私钥就是密钥,公钥是加密使用的密钥,私钥是解密使用的密钥。

 

  • 公钥密码体制

公钥密码体制分为三个部分,公钥、私钥、加密解密算法,它的加密解密过程如下:

加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。加密过程需要用到公钥。

解密:通过解密算法和私钥对密文进行解密,得到明文。解密过程需要用到解密算法和私钥。

注:公钥密码体制的公钥和算法都是公开的(这是为什么叫公钥密码体制的原因),私钥是保密的,如RSA是一种公钥密码体制

 

  • 对称加密算法(symmetric key algorithms)

在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的

 

  • 非对称加密算法(asymmetric key algorithms)

在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的

 

  • 签名

签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过。一般是对信息做一个hash计算得到一个hash值,把这个hash值加密后做为一个签名

 

  •  数字证书

数字证书可以保证数字证书里的公钥确实是这个证书的所有者(Subject)的,或者证书可以用来确认对方的身份。也就是说,我们拿到一个数字证书,我们可以判断出这个数字证书到底是谁的。

这样就可以防止黑客冒充服务器发布公钥给客户

2. 加密要解决的问题

1. 服务器证明公钥的合法性

服务器端通过数字证书来向客户端证明公钥是合法的,数字证书中包含了公钥部分

2.服务器证明是公钥的持有者

服务器通过解密客户端用公钥加密的一段报文来证明自己就是公钥的持有者,也即自己就是服务器

3.保证数据传输的完整性

通过在发送报文后面加数字签名来保证报文传输的完整性

4.保证数据传输的保密性

通过双方约定的对称秘钥来保证报文的保密性

3.加密通信的完整过程

step1: “客户”向服务端发送一个通信请求

“客户”->“服务器”:你好

 

step2: “服务器”向客户发送自己的数字证书。证书中有一个公钥用来加密信息,私钥由“服务器”持有

“服务器”->“客户”:你好,我是服务器,这里是我的数字证书 

 

step3: “客户”收到“服务器”的证书后,它会去验证这个数字证书到底是不是“服务器”的。检查数字证书后,“客户”会发送一个随机的字符串给“服务器”用私钥去加密,服务器把加密的结果返回给“客户”,客户用公钥解密确认对方确实是“服务器”。

“客户”->“服务器”:向我证明你就是服务器,这是一个随机字符串     //前面的例子中为了方便解释,用的是“你好”等内容,实际情况下一般是随机生成的一个字符串。

“服务器”->“客户”:{一个随机字符串}[私钥|RSA]

 

step4: 验证“服务器”的身份后,“客户”生成一个对称加密算法和密钥,用于后面的通信的加密和解密,“客户”会用公钥加密后发送给“服务器

 

“服务器”->“客户”:{OK,已经收到你发来的对称加密算法和密钥!有什么可以帮到你的?}[密钥|对称加密算法]

“客户”->“服务器”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[密钥|对称加密算法]

“服务器”->“客户”:{你好,你的余额是100元}[密钥|对称加密算法]

4. 浙江国网某加密芯片通信过程

注:此处的装置相当于上节的服务器,主站相当于上节的客户

step1: “装置”向主站发送一个通信请求,请求中包含装置的数字证书。证书中有一个公钥用来加密信息,私钥由“装置”持有

“装置”->“主站”:你好,我是装置,这里是我的数字证书 

 

step2: “主站”收到“装置”的证书后,它会去验证这个数字证书到底是不是“装置”的。检查数字证书后,“主站”会产生一个随机的字符串并用数字证书中的公钥加密,并发送给装置 

“主站”->“装置”:向我证明你就是合法装置,这是一个随机字符串,已用数字证书公钥加密   

 

step3: “装置”生成一个对称加密算法和密钥,用于后面的通信的加密和解密,“装置”会用私钥加密后发送给“主站

“装置”->“主站”:{OK,已经收到你发来的随机数,我用自己的随机数和你发来的随机数生成了对称秘钥}[私钥|RSA]

 

step4: “主站”验证对称秘钥合法性,如果合法则说明对方就是合法的装置,可以进行后续的通信

“主站”->“装置”:不回复任何异常信息表示协商通过