安全HTTP

保护HTTP的安全

HTTP安全技术需要做到以下要求:

  • 服务器认证(客户端知道是与真正的服务器对话而不是假的)
  • 客户端认证(服务器知道是与真正的客户端对话而不是假的)
  • 完整性(客户端和服务器的数据不会被修改)
  • 加密(客户端和服务器的数据不会被修改)
  • 效率(一个运行的足够快的算法,以便低端的客户端和服务器使用)
  • 普适性(基本上所有的客户端和服务器都支持这些协议)
  • 管理的可扩展性(在任何地方的任何人都可以立即进行安全通信)
  • 适应性(能够支持当前最知名的安全方法)
  • 在社会上的可行性(满足社会的政治文化需要)

HTTPS是最流行的HTTP安全形式。它是由网景公司首创的,所有主要的浏览器和服务器都支持此协议。

使用HTTPS时,所有的HTTP请求和响应数据在发送到网络之前,都要进行加密

HTTPS在HTTO下面提供了一个传输级的密码安全层(SSL/TLS)

大部分困难的编码及解码工作都是在SSL库中完成的,所以服务端与客户端在使用安全HTTP时无需过多的修改其协议处理逻辑

数字加密

  • 密码:对文本进行编码,使偷窥者无法识别的算法
  • 密钥:改变密码行为的数字化参数
  • 对称密钥加密系统:编/解码使用相同密钥的算法
  • 不对称密钥加密系统:编/解码使用不同密钥的算法
  • 公开密钥加密系统:一种能够使数百万计算机便捷地发送机密报文的系统
  • 数字签名:用来验证报文违背伪造或篡改的校验和
  • 数字证书:由一个可靠的组织验证和签发的识别信息

对称密钥加密技术

发送端和接收端要共享相同的密钥k才能进行通信。发送端用共享的密钥来加密报文,并将得到的密文发送给接收端。接收端收到密文,并对其应用解密函数和相同的共享密钥,恢复出原始的明文

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

密钥长度与枚举攻击

用暴力去尝试所有的密钥称为枚举攻击,密钥长度越长,暴力破解它所需要的代价就越大

以1995年的微处理器的速度,愿意花费100000美元可以在大约2s内破解一个40位的DES代码

但是当时花费10亿美元也需要10^15年才能破解128位的密钥

建立共享密钥

对称密钥加密技术的缺点之一就是发送者与接收者在互相对话之前,一定要有一个共享的保密密钥

如果有N个节点;每个节点都要和其他N-1个节点进行安全对话,总共大概会有N²个保密密钥;无疑很难管理

公开密钥加密技术

与上面的对称密钥不同的是,公开密钥加密技术没有为每对主机使用单独的加密/解密密钥

而是使用了两个非对称密钥:一个用来对主机报文编码,另一个用来对主机报文解码

公钥图示

这样就解决了对称密钥中密钥数目的N²扩展问题

通过公开密钥加密技术,全球所有的计算机用户就都可以使用安全协议了

RSA

公开密钥非对称加密系统面临的共同挑战,要确保即使拥有下面所有线索,也无法计算出保密的私有密钥:

  • 公开密钥(是公有的,所有人都可以获得)
  • 一小片拦截下来的密文(可通过对网络的嗅探获取)
  • 一条报文及与之相关的密文(对任意一段文本运用加密器就可以得到)

RSA算法就满足上述的所有条件,破解RSA找到相应的私有密钥的难度相当于对一个极大的数进行质因数分解的困难程度,这种计算被认为是所有计算机科学中最难的问题之一。

混合加密系统和会话密钥

任何人只要知道了其公开密钥,就可以向一台公共服务器发送安全报文,而不需先交换私有密钥

但公开密钥加密算法可能会很慢,实际上混合使用了对称和非对称策略

数字签名

可以用加密系统对报文进行签名,以说明是谁编写的报文,同时证明报文未被篡改过

签名是加了密的校验和

  • 签名可以证明是作者编写了这条报文,只有作者才会有最机密的私钥,只有作者才能计算出这些校验和
  • 签名可以防止报文被篡改。如果有恶意攻击者在报文传输过程中对其进行了修改,校验和就不再匹配了。

签名过程

以A向B发送一条报文,并对其签名为例

  • 节点A将边长报文提取为定长的摘要
  • 节点A对摘要应用了一个“签名”函数,这个函数会将用户的私有密钥作为参数。因为只有用户知道私有密钥,所以正确的签名函数会说明签名者就是其所有者
  • 一旦计算出签名,节点A就将其附加在报文的末尾,并将报文和签名都发送给B
  • 在接收端,如果节点B需要确定报文确实是节点A写的,而且没有被篡改过,节点B就可以对签名进行检查。节点B接收经私有密钥扰码的签名,并应用了使用公开密钥的反函数,如果拆包后的摘要与节点B自己的摘要版本不匹配,要么就是在传输过程中被篡改了,要么就是发送端没有节点A的私有密钥(即不是节点A)

数字证书

证书的主要内容

  • 证书的格式版本号

  • 证书序列号

  • 证书签名算法

  • 证书颁发者

  • 有效期

  • 对象名称

  • 对象的公开密钥

  • 其他扩展信息


  • 数字签名

用证书对服务器进行验证

证书验证

通过HTTPS建立安全WEB事务后,现代浏览器都会自动获取所连接服务器的数字证书

如果服务器没有证书,安全连接就会失败

浏览器收到证书时会对签名颁发机构进行检查


安全HTTP
https://blog-theta-ten.vercel.app/2021/10/02/安全HTTP/
作者
Chen
发布于
2021年10月2日
许可协议