黑客师Web安全

网络安全扫盲篇

2020-04-28  本文已影响0人  realgods

加密算法:

  • DESData Encryption Standard:分组加密技术,以64位(含8位奇偶校验位)分组长度对数据加密。有两个特点:混淆和扩散。混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,扩散是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构。
  • 3DES:执行3次DES来达到增加密钥长度和安全性的目的。
  • AESAdvanced Encryption Standard:一种区块加密标准,基于排列和置换运算,目前是对称加密中最流行的算法。
  • RSARivest Shamir Adleman三人提出的目前最有影响力的公钥加密算法,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA可以通过认证(如使用X.509数字证书)来防止中间人攻击。
  • ECCElliptic curve cryptography椭圆曲线密码加密技术。主要优势是在某些情况下它比其他的方法使用更小的密钥(如RSA加密算法)提供相当的或更高等级的安全。
  • Elgamal,基于迪菲-赫尔曼密钥交换的非对称加密算法。
  • MD5Message Digest Algorithm 信息摘要算法,本质上说是一种签名算法。
      # 输入任意长度的信息,输出128位的数字指纹。
      # 不同输入产生不同的结果,哪怕只修改1个字节,得到的指纹都有很大区别
      # 结果不可逆,不能反推出输入信息
  • SHASecure Hash Algorithm 安全散列算法,分为SHA-1和SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)。SHA-1强于MD5,但均可被破解,目前大公司全面放弃SHA-1,改用SHA-2。

攻防:

  • HASH的n次迭代,比如n = 1000
  • 加盐,在密码任意固定位置插入特定的字符串,如HASH(pwd + salt)。又比如在微信通信里,要传递三个参数ABC,则需要将ABC与appsecret一起sha1一遍,得到一个签名串,然后将这个签名串与appkey一起传递给微信,此时,微信会通过appkey去查找对应的appsecret,然后再将ABC参数与查询出来的appsecret做一遍相同的签名算法,如果得到的签名串一致,则认为是授权成功。此处appsecret就是盐。
中间人攻击.jpg

数字证书

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

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

证书之间的信任关系.png

openssl x509 -in cerfile.cer -text -noout

查看DER编码的证书:

openssl x509 -in cerfile.cer -inform der -text -noout

openssl x509 -in cerfile_pem.cer -inform pem -outform der -out cerfile_der.cer
DER转PEM:
openssl x509 -in cerfile_der.cer -inform der -outform pem -out cerfile_pem.cer

openssl x509 -in cerfile.cer -pubkey -noout > pub.key


SSL/TLS协议

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


    Client Hello抓包信息

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


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


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


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

上一篇下一篇

猜你喜欢

热点阅读