计算机网络概论 | 青训营笔记

128 阅读5分钟
title: 计算机网络概论笔记
date: 2023-04-13 22:09:58
tags: 计算机网络 网络

计算机网络概论

从本地网络到广域网

...

计算机网络基础

...

Web中的网络

...

网络安全

本节课内容广而浅我决定深入学习一下课程中网络安全一章中的内容

想通过明文通信交换秘密信息,通信双方必须先有秘密信息。

这一段算是困扰了我很久,当初研究如何实现学校系统的登录操作时发送的请求携带了一个key为rsa的键值对,显然是一串非对称加密的密文,我的疑惑点在于这一串密文的是由客户端发出的,那么加密过程也应该是在客户端上完成的,所以秘钥应当也存在于客户端上,有没有一种方法可以找出存在于客户端中的秘钥以供我使用?

当然这种方法几乎是不可行的,不然网络也太不安全了,防范这种情况发生的措施就是...

网络安全三要素

  • 机密性:攻击者无法获知通信内容
  • 完整性:攻击者对内容进行篡改时能被发现
  • 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信

如何实现机密性?

即如何在不安全的信道协商出只有双方知道的加密算法和密钥?

在没有前置信息的情况下,在不安全的信道中交换秘密信息是不可能的,想要通过明文通信交换秘密信息,通信双方需要先有秘密信息。

如何实现完整性?

密码散列函数(哈希函数)

输入任意长度的内容可以得到固定长度的哈希值,且极其难以由散列函数输出的结果,回推输入的数据是什么。

  1. 有明文m,密码散列函数H,秘钥s
  2. 计算H(m+s)获得哈希值h
  3. 将m和h组合成新信息m+h
  4. 接收方拆分m+h,重新计算H(m+s)得h',对比h'和h

即想要实现完整性,需要通信双方先共享一个秘密信息(秘钥s)。

如何实现身份验证

数字签名(指纹) = 私钥加密(密码散列函数(原文) ) 消息=原文+数字签名

对称加密:加密、解密用同样的密钥

非对称加密:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密

使用数字签名对公开内容(如包含公钥的证书)进行签名,防止篡改

但是如何证明公钥和签名没有被篡改?

PKI与根证书

PKI是公钥基础设施(Public Key Infrastructure)的简称,它是一种数字证书体系,用于确保通信安全和认证网络用户的身份。PKI系统中包含了由认证机构(CA)签发的数字证书、密钥管理和证书撤销等功能。在PKI中,每个用户都有一个公钥和一个私钥,公钥用于加密数据并验证签名,而私钥则用于解密数据和签署文件。PKI系统通过使用数字证书来保护网络通信和信息安全,广泛应用于金融、电子商务和政府等领域。

根证书是公钥基础设施(PKI)中最高级别的数字证书,也是整个体系的根源和信任之源。它由认证机构(CA)签发,并包含该CA的公钥和其它相关信息。根证书是用于验证其他数字证书真实性的根基,因此它必须得到高度保护,确保不会被篡改。根证书一般预装在操作系统、浏览器等常见的客户端软件中,成为客户端系统信任的核心。 在PKI中,数字证书可形成一条完整的信任链:根证书作为顶级CA,签发下级CA的数字证书,下级CA再签发其它数字证书,形成一条完整的证书链。客户端收到数字证书后,可通过一层层的验证,直接或间接地确定证书的真实性和所属CA的可信度,确保通信双方的身份和数据的安全性。

通过提前共享的根证书(即秘密信息),我们就可以在不安全的信道上交换机密性所需的信息(加密算法和密钥)和完整性所需的信息(计算哈希值时的秘钥s)

HTTPS

  1. 使用PKI对服务器的证书进行验证
  2. 使用验证后的证书中的公钥通过非对称加密与服务器交换对称算法的加密算法和密钥
  3. 使用协商后的加密算法和密钥对明文进行加密

如何验证客户端的身份

客户端确认了服务端身份之后,服务端还需确认客户端的身份 通过https将cookie等传送给客户端,下次验证时就知道客户端的身份了

服务端也可以要求客户端提供证书,这样可以省去登录的步骤,但是这样很麻烦,现实应用很少。

后记

仅就这一节的内容似乎还不足以解答我的疑问,键rsa的值会在一定情况下改变(如改变ip)生成这段密文的秘钥在确实存在于客户端上,但是既然这类验证需要通过js逆向来“绕过”,那就说明秘钥肯定是通过某些方式被保护起来了

MITM(中间人攻击)可以通过信任一个伪造的证书来修改请求,所以可以通过这种方式来获取秘钥吗?