面试总结4 - 数字签名,http和https

2019/01/30

面试总结4 - 数字签名,http和https

上一篇服务器响应用户请求中,对于RPC攻击和cookie攻击做了说明,而本篇博文则是着重对数字签名以及https加密协议做一说明。


1 加密算法

1 对称加密

对称加密:加密和解密的密钥一样,比如用123加密就是用123解密,但是实际中密码都是普通数据在互联网传输的,这样一点密码被中间人截取并破解,加密直接被攻破。

2 非对称加密

把密钥分为公钥和私钥,假设A要发送一封Email给B,他不想让任何其他人在传输中看到Email的内容,做法就是使用B的公钥对Email加密,只有B的私钥能够解密(B的私钥唯一性保证信件不会泄露)。

某天出意外了,有黑客冒充A给B发送Email,并且也用B的公钥加密,导致B无法区分这封邮件是否来自A。怎么办?此时A可以用自己的私钥加密,那么B收到邮件后如果用A的公钥可以解密邮件,那么证明这封信肯定来自于A。

3 总结 (没有用公钥去解密的,都是加密)

公钥的作用:对内容本身加密,保证不被其他人看到。
私钥的作用:证明内容的来源
公钥和私钥是配对关系,公钥加密就用私钥解密,反之亦然,用错的密钥来尝试解密会报错。

2 数字签名

1 概念


数字签名:

简单来说,三个元素: 公钥、私钥、hash函数。

  1. 公钥: 公开的
  2. 私钥: 只有发送方持有
  3. hash函数: 发送方和接收方都定义了hash函数。

那么发送过程如下:

发送方client, 接收方server:

  1. client对发送data执行hash函数,生成一段内容摘要str;
  2. client将str用密钥加密生成密文secret,然后将 data + secret 一起发送给server;
  3. server使用hash函数生成摘要str, 然后用公钥对secret解密,对比str和解密内容是否一致。

也就是 数字签名是加密, 数字签名验证是解密。

使用了非对称加密算法和数字摘要技术。

2 作用

  1. 保证信息传输的完整性
  2. 发送者的身份认证
  3. 防止交易中的抵赖发生,只有发送方有密钥

3 涉及算法

普通的数字签名算法包括三种算法:

  1. 密码生成算法;
  2. 标记算法;
  3. 验证算法。

此外还有一个要求就是要让通过公钥推算出私钥的做法不可能实现。

3 数字证书

使用上述的数字签名仍存在一种情况:

如果黑客将server端的公钥给替换成自己的公钥,然后用自己的私钥发送数据,这是server是察觉不到的,所以需要数字证书。

1 数字证书

上述问题存在的原因就是client的公钥容易被替换。

那么client可以去找”证书中心”(certificate authority,简称CA),为公钥做认证。

证书中心用自己的私钥,对A的公钥和一些相关信息一起加密,生成”数字证书”(Digital Certificate)。

server收到数据后使用CA的公钥解密数字证书,从而获取到A的公钥,然后执行的逻辑跟上述就一致了。

总结:

其实就是找了一个第三方数字签名,对client的公钥进行一次加密。

2 一些疑问

1 假设数字证书被伪造了呢? CA的责任

是的,传输中数字证书有可能被篡改。因此数字证书也是经过数字签名的,是不是感觉很绕貌似陷入了“鸡生蛋蛋生鸡”,我保证这是最后一个蛋- - !上文说道数字签名的作用就是验证数据来源以及数据完整性!B收到邮件后可以先验证这份数字证书的可靠性,通过后再验证数字签名。

2 要是有1万个人要给server发邮件,难道server要保存1万份不同的CA公钥吗?

不需要,CA认证中心给可以给server一份“根证书”,里面存储CA公钥来验证所有CA分中心颁发的数字证书。CA中心是分叉树结构,类似于公安部->省公安厅->市级派出所,不管client从哪个CA分支机构申请的证书,server只要预存根证书就可以验证下级证书可靠性。

3 如何验证根证书可靠性?

无法验证。根证书是自验证证书,CA机构是获得社会绝对认可和有绝对权威的第三方机构,这一点保证了根证书的绝对可靠。如果根证书都有问题那么整个加密体系毫无意义。

4 https简单介绍

数字签名和数字证书可以用于文件,当然也能用于html网页数据。

http的安全缺陷

  1. 无法验证服务端的身份
  2. 无法保证数据完整性
  3. 无法保证数据传输不被窃听

而https就是专门解决这三个问题,https使用数字签名+数字证书解决了前2个问题。

然后,再用SSL协议对传输通道加密,保证数据传输不被窃听。

SSL协议

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。 TLS与SSL在传输层对网络连接进行加密。

TLS-SSL

服务器认证阶段:

1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;

2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;

3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;

4)服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

用户认证阶段:

在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。

经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。


两篇博客的传送门


Show Disqus Comments

Post Directory