0
点赞
收藏
分享

微信扫一扫

网络安全扫盲篇

加密算法:

  • 对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。常见的对称加密算法:
  • 非对称加密使用一对秘钥,公开的密钥叫公钥,只有自己知道的叫私钥。用公钥加密的数据只有对应的私钥可以解密。用私钥加密的数据只有对应的公钥可以解密。非对称加密算法有:
  • 散列算法Hash Function把数据压缩成摘要,或者说是转换为指纹(散列值hash values)。散列算法有:

攻防:

  • 彩虹表用于加密散列函数逆运算的预先计算好的表,常用于破解加密过的密码散列,这是以空间换时间的典型实践。为了防止这种破解,扩大用户输入的组合是有效的方法:
  • 中间人攻击,通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。
  • 非对称加密的安全隐患 网络通信开始时,A和B要通过网络交换公钥。但C拦截了A和B的公钥,又分别用自己的公钥发给A和B。这就是中间人攻击。现实中,通过CA(Certificate Authority)来保证公钥的真实性。B会先把自己的公钥(和一些其他信息)交给CA。CA用自己的私钥加密这些数据,加密完的数据称为B的数字证书。现在B要向A传递公钥,B传递的是CA加密之后的数字证书。A收到以后,会通过CA发布的CA证书(包含了CA的公钥),来解密B的数字证书,从而获得B的公钥。CA把自己的证书集成在了浏览器和操作系统里面,避免劫持。盗版系统、非官方浏览器存在CA证书被篡改的可能。

数字证书

数字证书有很多格式版本,SSL证书格式遵循X.509标准,X.509是由国际电信联盟(ITU-T)制定的数字证书标准,主要有X.509v3(1997)、X509v4(1997)、X.509v1(1988)等。

CA证书颁发机构Certificate Authority的缩写。数字证书采用信任链验证。数字证书的信任锚(信任的起点)就是根证书颁发机构。根证书(root certificate)是一个无签名或自签名的识别根证书颁发机构的公钥证书。许多应用程序(如浏览器)会代表用户信任值得信任的根证书。


  • 证书的编码
    证书有两种编码格式,DER二进制编码方式和PEMASCII的Base64编码方式。
  • 文件扩展名
    .CRT.CER互为等价,代表是证书文件,.CRT通常用于Unix操作系统,.CER通常用于微软操作系统;
    .KEY 代表公钥或私钥文件;
  • 证书的查看
    无论是PEM还是DER的编码方式都不能直接查看,可以通过命令查看:
    查看PEM编码的证书:

查看DER编码的证书:

  • 证书编码的转换
    PEM转DER:
  • 公钥提取
    X.509证书,核心是根据RFC 5280编码或数字签名的数字文档。

SSL/TLS协议

  • SSL(Secure Socket Layer)
    位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议(SSL Record Protocol)和SSL握手协议(SSL Handshake Protocol)。SSL是Netscape开发的,目前有三个版本,SSL1.0、SSL2.0、SSL3.0,因其存在严重的安全问题,大多数公司目前均已不在使用了。
  • TLS(Transport Layer Security)
    用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。TLS是IETF将SSL标准化后的产物。其实TLS可以理解为SSL的升级版,TLS目前也有三个版本,TLS1.0、TLS1.1、TLS1.2,目前常用的为TLS1.2。
  • TLS握手
    在TLS中有两种主要的握手类型:一种基于RSA,一种基于Diffie-Hellman。 这两种握手类型的主要区别在于主秘钥交换和认证上。用RSA握手还是DH握手取决于加密套件,可以用openssl ciphers -v查看。

  • RSA的TLS握手
    整个流程如下如所示:

  1. 客户端向服务器发送Client Hello,将客户端的功能和首选项告诉服务器。



    Random:包含32字节的数据,其中28字节是随机生成的(Random Bytes)。剩下的4字节包含额外的信息(GMT Unix Time),在握手的时候这随机数都是独一无二的,可以防止重复攻击。
    Session ID:在第一连接时,会话ID字段是空的,这表示新会话,没有其他会话需要恢复。在后续的连接中,这个字段可以保存会话的唯一标识。服务器可以借助会话ID在自己的缓存中找到对应的会话状态。
    Cipher Suites:密码套件是由客户端支持的所有密码套件组成的列表,该列表是按优先级顺序排列的。由密钥交换方法、身份验证方法、密码定义以及可选的MAC或PRF算法组合而成。


  2. 服务器收到响应,选择双方都支持的协议,套件,向客户端发送Server Hello。同时服务器也将自己的证书发送到客户端(Certificate)。
    Certificate:典型的Certificate消息用于携带X.509证书链。证书链是以ASN.1 DER编码的一系列证书,一个接一个组合而成。叶子证书必须是第一个发送,中间证书按照正确的顺序跟在叶子证书之后,根证书省略。


  3. 客户端自己生产预主密钥,通过公钥加密预主秘钥,将加密后的预主秘钥发送给服务器 (Client Exchange)。
    Change Cipher Spec:发送端已取得用以生成连接参数的足够信息,已生成加密密钥(主密钥),并且将切换到加密模式。客户端和服务器在条件成熟是会发送这个消息。


  4. 服务器用自己的私钥解密加密的预主密钥。
  5. 之后,客户端与服务器用相同的算法根据客户端随机数,服务器随机数,预主秘钥生产主密钥,之后的通信将都用主密钥加密解密。
    主密钥的是由预主密钥进一步计算而成,这个过程通过一个伪随机函数(pseudorandom function, PRF)来完成,master_secret = PRF(pre_master_secret,"master secret",ClientHello.random+ServerHello.random)

  • DH的TLS握手
    整个流程如下如所示:

举报

相关推荐

0 条评论