密码学基础

203 阅读8分钟

安全技术

对称加密:

使用相同的密钥进行加密,常见的对称加密算法有:DES、3DES、AES等

  • 优点:加密速度快

  • 缺点:安全性问题--秘钥如何传输

非对称加密

为了解决对称加密中的安全问题,采用公私钥的方式进行加密——公钥加密的数据只有私钥能解密,私钥加密的数据只有公钥能解密

  • 优点:安全
  • 缺点:加密速度慢

信息安全问题

信息安全问题中,要做到三点才能保证信息安全:

    • 信息的保密性
    • 信息的完整性
    • 身份识别

信息保密性(加密算法)

通信时可以采用对称或非对称加密完成信息保密性。但由于非对称加密的加密速度慢,可以首先使用非对称加密传输对称加密算法秘钥,完成之后通信时采用对称加密进行信息加密。

信息完整性(数字签名)

为了保证信息没有被篡改,需要保证信息的完整性。通常可使用散列算法,如SHA1、MD5 等获取信息摘要。

客户端将信息内容与信息摘要进行加密传给服务端,服务端解密后获得原始值和摘要值,使用相同的摘要算法进行对比,如果一致则代表信息完整。

身份识别(数字证书)

信息传输过程中需要验证信息发送方身份——发送方首先将公钥广播出去,发送信息是使用私钥加密,接收方只能用发送方的公钥解密,即证明了发送方身份。

数字证书

  1. 公钥如何发送而不被劫持?

如果一开始服务端发送的公钥到客户端的过程中有可能被第三方劫持,然后第三方自己伪造一对密钥,将公钥发送给客户端,当服务器发送数据给客户端的时候,中间人将信息进行劫持,用一开始劫持的公钥进行解密后,然后使用自己的私钥将数据加密发送给客户端,而客户端收到后使用公钥解密,反过来亦是如此,整个过程中间人是透明的,但信息泄露却不得而知。

数字证书是由权威的CA(Certificate Authority)机构给服务端进行颁发,CA机构通过服务端提供的相关信息生成证书,证书内容包含了持有人的相关信息,服务器的公钥,签署者签名信息(数字签名)等,最重要的是公钥在数字证书中。


  1. 如何保证公钥来自请求的服务器呢?

数字证书上由持有人的相关信息,通过这点可以确定其不是一个中间人;但是证书也是可以伪造的

  1. 如何保证证书为真呢?

一个证书中含有三个部分:"证书内容,散列算法,加密密文",证书内容会被散列算法hash计算出hash值,然后使用CA机构提供的私钥进行RSA加密

当客户端发起请求,服务器使该数字证书发送给客户端,客户端通过CA机构提供的公钥(各大浏览器和操作系统已经维护了所有的权威证书机构的名称和公钥)对加密密文进行解密获得散列值(数字签名),同时将证书内容使用相同的散列算法进行Hash得到另一个散列值,比对两个散列值,如果两者相等则说明证书没问题。

  1. 一些常见的证书文件类型如下:

X.509#DER 二进制格式证书,常用后缀.cer .crt
X.509#PEM 文本格式证书,常用后缀.pem
有的证书内容是只包含公钥(服务器的公钥),如.crt、.cer、.pem
有的证书既包含公钥又包含私钥(服务器的私钥),如.pfx、.p12

HTTPS,TLS/SSL

Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本传输协议,网景公式设计了SSL(Secure Sockets Layer)协议用于对Http协议传输的数据进行加密,保证会话过程中的安全性。

使用TCP端口默认为443


TLS: (Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。

SSL: (Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。

SSL协议即用到了对称加密也用到了非对称加密(公钥加密),在建立传输链路时,SSL首先对对称加密的密钥使用公钥进行非对称加密,链路建立好之后,SSL对传输内容使用对称加密。

HTTPS单向认证

HTTPS 在建立 Socket 连接之前,需要进行握手,具体过程如下:

  1. 客户端向服务端发送 SSL 协议版本号、加密算法种类、随机数等信息。
  2. 服务端给客户端返回 SSL 协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书。
  3. 客户端使用服务端返回的信息验证服务器的合法性,包括:
    1.  证书是否过期;
    2.  发行服务器证书的 CA 是否可靠(通过查询浏览器或本机内的 CA 证书获知);
    3.  返回的公钥是否能正确解开返回证书中的数字签名(通过使用本机或浏览器内置的 CA 公钥进行解密);
    4.  服务器证书上的域名是否和服务器的实际域名相匹配;
    5.  验证通过后继续进行通信,否则终止通信。
  1. 客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择。
  2. 服务器端在客户端提供的加密方案中选择加密程度最高的加密方式。
  3. 服务器将选择好的加密方案通过明文方式返回给客户端。
  4. 客户端接收到服务端返回的加密方式后,使用该加密方式生成产生随机码,用作通信过程中对称加密的密钥,使用服务端返回的公钥进行加密,将加密后的随机码发送至服务器。
  5. 服务器收到客户端返回的加密信息后,使用自己的私钥进行解密,获取对称加密密钥。
  6. 在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全。


HTTPS 双向认证

双向认证和单向认证类似,但额外增加了服务端对客户端的认证。

  1. 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息;
  2. 服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书;
  3. 客户端使用服务端返回的信息验证服务器的合法性,包括:
    1. 证书是否过期;
    2. 发行服务器证书的CA是否可靠;(通过查询浏览器或本机内的CA证书)
    3. 返回的公钥是否能正确解开返回证书中的数字签名;(通过使用本机或浏览器内置的CA公钥进行解密)
    4. 服务器证书上的域名是否和服务器的实际域名相匹配;
    5. 验证通过后,将继续进行通信,否则,终止通信;
  1. 服务端要求客户端发送客户端的证书即客户端证书公钥,客户端会将自己的证书发送至服务端;
  2. 验证客户端的证书,通过验证后,会获得客户端的公钥;
  3. 客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择
  4. 服务器端在客户端提供的加密方案中选择加密程度最高的加密方式;
  5. 将加密方案通过使用之前获取到的公钥进行加密,返回给客户端
  6. 客户端收到服务端返回的加密方案密文后,使用自己的私钥进行解密,获取具体加密方式,而后,产生该加密方式的随机码,用作加密过程中的密钥,使用之前从服务端证书中获取到的公钥进行加密后,发送给服务端;
  7. 服务端收到客户端发送的消息后,使用自己的私钥进行解密,获取对称加密的密钥,在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全;

参考链接:

blog.51cto.com/u_14206262/…