计算机网络中的安全

news2024/11/19 12:37:40

计算机网络中的安全

  • 1 什么是网络安全
  • 2 加密的方式——机密性
    • 2.1 对称密钥加密
    • 2.2 公开密钥加密
  • 3 报文鉴别码——报文完整性
  • 4 数字签名——报文完整性、端点鉴别
    • 4.1 数字签名技术的基础
    • 4.2 公钥认证
  • 5 案例——设计安全电子邮件系统

《计算机网络—自顶向下方法》(第7版)第8章:计算机网络中的安全,学习笔记

1 什么是网络安全

安全通信所需要具备的特性:

  1. 机密性 —— 通过对报文进行加密,使得报文内容仅有发送方和接收方能够理解报文内容,其他窃听者虽然可以截获报文,但却无法理解报文内容。
  2. 报文完整性 —— 接收方在收到报文后,能够检验出报文在传输过程中是否被意外改动或者人为篡改。CRC、检验和就是一种用于检验报文完整的方式。
  3. 端点鉴别 —— 发送方和接收方都应该能够证实对方的身份。例如发送方声称自己是“Alice”,对于安全的通信来说,接收方需要能够确认发送方的身份的确是“Alice”。
  4. 运行安全性 —— 对与一个与互联网连接的机构(或者个人)来说,希望能够实时监控流入和流出该机构的分组,以预防攻击者安放蠕虫病毒、获取公司机密。防火墙与入侵检测系统就是用于维护网络的运行安全性的。

2 加密的方式——机密性

发送方通过加密算法将原始报文(明文)生成密文,然后将密文发送给接收方。加密算法都涉及到了用一个东西替换另一个东西的思想。加密算法可分为两类:对称密钥加密和公开密钥加密。

2.1 对称密钥加密

举个例子:

发送者将报文中的所有字母所对应的ASCII码减3(明文"hello" -> 密文"ebiil")。接收方收到报文后需要对报文中所有字母对应的ASCII码加3才能得到原始报文(密文"ebiil"->明文"hello")。

这个例子中加密算法是:将ASCII加3(发送方)和减3(接收方),密钥是:3。密钥作为加密算法的输入,通常是一串数字或字符。在对称密钥加密方式中,发送方和接收方的密钥是相同的,且这个密钥只有他们两个知道。简单的对称加密算法——如上面那个例子或者密码本,可以利用报文中某些单词出现的概率,或者报文中肯定会出现的单词(如接收者的名字)等信息来破解密文。为了加大破解难度,某些对称加密算法在加密过程中混入一些随机性,如块密码中通常使用了密码块连接技术。

此外对称加密还存在一个问题:密钥如何分发? 似乎只能是双方首先见个面,人为协商确定密钥。

2.2 公开密钥加密

公开密钥加密可以很好的解决对称密钥加密中密钥分发的问题。在公开密钥加密方式中,接收方有两个密钥,一个是世界上任何一个人都可以得到的公钥,另一个是只有接收方自己知道的私钥。可以用符号 K + K^+ K+ K − K^- K 分别表示公钥和私钥。 公开密钥加密算法能够实现 K − ( K + ( m ) ) = m K^-( K^+(m) ) = m K(K+(m))=m (m是报文),即用公钥加密后的报文只能用对应的私钥解开。举个例子:

当 Alice 向 Bob 发送一个消息 m 时,Alice 首先会使用 Bob 的公钥 K B + K^+ _B KB+ 对报文进行加密,得到密文 K B + ( m ) K^+ _B(m) KB+(m) ,然后将密文发送给 Bob。 Bob在收到密文后,用自己的私钥 K B − K^- _B KB 对密文进行解密 K B − ( K B + ( m ) ) K^- _B( K^+ _B(m) ) KB(KB+(m)) ,从而得到原始报文 m。

图2.1 公开密钥密码
图2.1 公开密钥密码

在此用RSA加密算法举个例子,方便理解一下公开密钥加密。
RSA的加密算法是:

c = m e   m o d   n c = m^e \ mod \ n c=me mod n

RSA的解密算法是:

m = c d   m o d   n m = c^d \ mod \ n m=cd mod n

上式中 m表示明文,c表示密文,mod表示取余运算,对数(n, e) 为公钥,对数(n, d)为私钥。假设 Alice 向 Bob 发送一个报文m = “love”,Alice知道Bob的公钥( K B + K^+ _B KB+ )为(n=35,e=5),Alice对报文的加密过程如下:

图2.2 Alice的RSA加密
图2.2 Alice的RSA加密

表中的数字表示是将26个字母a 到 z放别用数字1~26表示。可以看出在不知道Bob的私钥情况下,很难找到规律来破解密文。当Bob收到密文后会使用自己的私钥(n=35,d=29)来解密:

在图2.3 Bob的RSA加密
图2.3 Bob的RSA加密

公开密钥加密存在的问题: 对于一个长报文来说,使用 RSA 算法的计算量是非常大,而对称密钥加密算法的计算量通常会小很多。此外就是公钥认证的问题,若Trudy骗Alice,说Bob的公钥是xxx(其实这是Trudy自己的公钥),然后Alice给Bob发消息时,Trudy就可以截获并用自己的私钥破解报文,而Bob则完全看不懂报文。

两种加密方式的混合使用(解决对称密钥分发问题): 在实际应用中 RSA 和对称密钥加密是结合使用的,因为对于一个长报文来说,使用 RSA 算法的计算量是非常大。例如,Alice给Bob发送报文m前,先选择一个用于加密报文的会话密钥 K S K_S KS(也就是对称密钥),将报文加密得到密文 K S ( m ) K_S(m) KS(m),然后用Bob的公钥将会话密钥加密得到 K B + ( K S ) K^+ _B(K_S) KB+(KS),最后将 K S ( m ) K_S(m) KS(m) K B + ( K S ) K^+ _B(K_S) KB+(KS) 一起发送给Bob,Bob收到后现有自己的私钥解开 K B + ( K S ) K^+ _B(K_S) KB+(KS) 得到会话密钥,然后用会话密钥获取原始报文m。

3 报文鉴别码——报文完整性

密码散列函数: 和 CRC 和 检验和 类似,密码散列函数以报文m作为输入,计算得到一个固定长度的字符串 H(m) 。此外密码散列函数还具有这样一个性质,找到任意两个不同的报文x和y使得H(x)=H(y),在计算上是不可能的。MD5散列算法就是一个被广泛使用的密码散列函数。

报文鉴别码(缩写为 MAC): Bob将报文m 和 鉴别密钥s(s是对称密钥,只有Bob和Alice知道) 输入密码散列函数得到报文鉴别码 H(m+s) ,然后H(m+s)附加到m上,生成一个扩展报文 (m, H(m+s)) 发送给Alice,Alice收到后,将从报文中取出的 m 和自己已知的 s 输入密码散列函数得到H(m+s),最后Alice将自己算出的 H(m+s) 与Bob发送过来的 H(m+s) 做对比,如果相同则说明报文在传输过程中没有被改动。

图3.1 报文鉴别码
图3.1 报文鉴别码

4 数字签名——报文完整性、端点鉴别

4.1 数字签名技术的基础

其实要是公开密钥加密算法中的公钥和私钥加密能够交换,我们就能得到更神奇的结果: K − ( K + ( m ) ) = K + ( K − ( m ) ) = m K^-( K^+(m) ) = K^+( K^-(m) ) = m K(K+(m))=K+(K(m))=m 。即用私钥加密后的报文只能用对应的公钥解开。其实这就是数字签名技术的基础。我们回到 Alice 和 Bob 的例子:

如果 Bob 将报文 m 输入密码散列函数得到报文 H(m) ,然后用自己的私钥对 H(m) 进行加密得到 数字签名 K B − ( H ( m ) ) K^-_B( H(m) ) KB(H(m)),最后将报文连同数字签名 (m, 数字签名 )一起发送给 Alice 。Alice在收到后,为了确定报文是 Bob 发过来的,Alice用 Bob 的公钥尝试解开数字签名得到H(m),然后将收到的报文m输入散列函数得到自己算出的H(m)。若两个H(m)相同,则说明报文确实是 Bob 发送的,因为只有 Bob 知道 Bob的私钥,并且也证实了报文传送过程中没有被改动。

图4.1 Bob发送数字签名的报文
图4.1 Bob发送数字签名的报文

图4.2 Alice验证数字签名报文
图4.2 Alice验证数字签名报文

4.2 公钥认证

公钥认证,即证实一个公钥属于某个特定的实体,用在许多安全的网络协议中,包括IPsec和SSL。将公钥与特定实体绑定通常是由认证中心( CA)完成的,CA 的职责就是使识别和发行证书合法化。

  1. CA 证实一个实体(一个人、 一台路由器等)的真实身份。
  2. 一旦CA验证了某个实体的身份,这个CA会生成一个将其身份和实体的公钥绑定起来的证书(certificate) 这个证书包含这个公钥和公钥所有者全局唯一的身份标识信息(例如,一个人的名字或一个IP地址)。由CA对这个证书进行数字签名。的职责就是使识别和发行证书合法化。

Bob给Alice发送报文m的同时,他也发送了其CA签署的证书。Alice使用CA的公钥来核对Bob证书的合法性并提取Bob的公钥。这要就可以确定证书里面的公钥确实属于 Bob 了。

5 案例——设计安全电子邮件系统

本节利用对称密钥密码、公开密钥密码、散列函数和数字签名,设计一个安全电子邮件系统。我们还是以Bob和Alice为例,当Alice给Bob发送一个报文时,会进行如下工作:

图 5.1 Alice给Bob发送报文的过程
图 5.1 Alice给Bob发送报文的过程:Alice使用对称密钥密码、公开密钥密码、散列函数和数字签名来提供安全性、发送方鉴别和报文完整性

Bob接收到以后只要按照相反的动作将密文解开即可。最后就是Alice利用4.2节中的CA认证的方式将自己的公钥发给Bob即可。像 SSL 、IPsec 等安全的网络协议的原理都与之类似。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Postman中读取外部文件

目录 前言: 一、postman中读取外部文件的格式 二、Postman中如何导入文件 三、在Postman读取导入的数据文件 前言: 在Postman中,您可以使用"数据文件"功能来读取外部文件,如CSV、JSON或Excel文件。这使得在测试中使用…

如何应用Nginx Rewrit实现网页跳转

目录 一、Nginx Rewrite 二、Rewrite功能 Rewrite跳转场景 Rewrite跳转实现 Nginx 跳转 pcre支持 重写模块 Rewrite实际场景 Rewrite命令/语法格式 flag标记说明 location分类 location优先级 rewrite和location相比 三、跳转案例 实现域名跳转 第一步 修改指…

一文详解gRPC框架

目录 RPC框架简介 简介 各种序列化协议优缺点 gRPC调用模式 gRPC跟ProtocolBuffers的关系 ProtocolBuffers协议 gRPC桩代码生成 gRPC线程模型 gRPC分层 gRPC开发经验 官网及快速开始 常见状态码 适用场景 适用 不适用 手写简易RPC框架 Dubbo学习笔记 一文详解…

【python】数据表转csv

文章目录 1 基本结构1.1 数据1.2 数据结构 2 代码3 tip 1 基本结构 1.1 数据 1.2 数据结构 2 代码 代码: import mysql.connector import csvdef getPerson():# 数据库初始化cnx mysql.connector.connect(userroot, passwordroot, databasetest)cursor cnx.cur…

IDEA启动tomcat控制台中文乱码问题

IntelliJ IDEA是很多程序员必备且在业界被公认为最好的Java开发工具,有很多小伙伴在安装完IDEA并且tomcat之后,启动tomcat会出现控制台中文乱码问题,如下图所示: 具体解决步骤: 一、修改当前 Web 项目 Tomcat Server…

SAP ALV批量修改列的数据

导语:最近在给ALV增加批量修改列的功能,需求是修改多列,以前经常自己画屏幕来实现,研究了一下,SAP有标准的函数,可以自动带出选择列的字段属性,搜索帮助等等,大大提高了便捷性。 函…

本地同步远程yum源,并保存到本地

1.修改本地/etc/yum.repos.d/内容为远程yum repo配置; # 1).备份原yum配置 mkdir -p /home/yum-bak && mv /etc/yum.repos.d/* /home/yum-bak/* # 2).修改目标yum配置 2.执行缓存,查看相关repoid是否正确 yum clean all …

QT学习笔记2--对象树

对象树 可以看到QWidet这几个类的父亲是QObject,在析构的时候是从下往上析构。 实例 创建类 验证的话,要先创建一个类,命名为pushbotton。 点击choose创建,类。 编写相关函数 构造函数 pushbotton::pushbotton(QWidget *pare…

华为云专家出品《深入理解边缘计算》电子书上线

华为开发者大会PaaS生态电子书推荐,助你成为了不起的开发者! 什么是边缘计算?边缘计算的应用场景有哪些? 华为云出品《深入理解边缘计算》电子书上线 带你系统理解云、边、端协同的相关原理 了解开源项目的源码分析流程 学成能…

【Python】字符串格式化前世今生

▒ 目录 ▒ 🛫 问题描述环境 1️⃣ 《%》方式格式化语法%后面的参数说明 2️⃣ str.format优点指定位置:参数可以不按顺序关键字参数列表索引对象数字格式化 3️⃣ f-string 语法语法示例格式化一个表达式转义符号格式化 datetime 对象 🛬 结…

C#传Bitmap到C++dll出现灰色图片的问题

如果直接将内存中的Bitmap 传给C,原图会失去颜色,如下: 代码如下: ImageCodecInfo jpgEncoder GetEncoder(ImageFormat.Jpeg);System.Drawing.Imaging.Encoder myEncoder System.Drawing.Imaging.Encoder.Quality;EncoderParameters myEncod…

给若依添加单元测试(二)

给若依添加单元测试 方案一(简单) 方案二(异常困难但企业开发一般用这个) 在 activity 子模块中添加单元测试 S1.在 src 目录下创建 test.java.MapperTests 文件 S2.将以下内容复制进去 import com.ruoyi.activity.Activity…

C#私有构造函数学习

私有构造函数是一种特殊的实例构造函数。 它通常用在只包含静态成员的类中。 如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。 如果类T只声明了私有实例构造函数,则在T的程序文本外…

java项目之留学生交流互动论坛网站ssm源码

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的留学生交流互动论坛网站。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者&#xf…

python编码中常见问题及解决方案

文章目录 1. 输入minVal和maxVal,将 minVal - maxVal 分成 N 等份,列表返回2. request 请求MP4视频URL时,如何获取视频大小3. 输出00,01,02或001,002,003等格式字符串 1. 输入minVal和maxVal&am…

UE5 Stride Warping Orientation Warping功能学习

在UE5的 Lyra Demo中,运用到了各类动画Warping(动画扭曲)技术,通过各类Warping节点在动画蓝图中的合理组织,可以有效的解决运动滑步问题,并为动画增添更多细节。 本文主要基于Animation Warping插件讲一下…

vue echarts k线图 标记点根据条件设置颜色

1. 数据格式{属性1, 属性2, 属性3, 属性4{属性4.1, 属性4.2, 属性4.3}} {symbol: circle, symbolSize: 0,xAxis: 2023-01-01 08:36:00, yAxis: 0.06968924, label: {fontStyle: normal, fontSize: 13, color: blue} } 2. 自定义局部function 拼装数据 // data 是 自定义标记点…

element-ui el-tree功能应用

1.目录节点搜索功能&#xff1a; <el-tree>:filter-node-method"filterNode"</el-tree>//添加监听watch: {search(val) {this.$refs.tree.filter(val)}},// 树搜索filterNode(value, data) {if (!value) return truereturn data.name.indexOf(value) ! -…

安装MySQL实现远程访问链接---无需本地访问

文章目录 1. 安装Mysql2. 安装phpMyAdmin3. 修改User 表4. 本地测试连接5. 安装cpolar6. 配置公网访问地址7. 固定连接公网地址 转载自cpolar极点云文章&#xff1a;群晖NAS 安装 MySQL远程访问连接 群晖安装MySQL具有高效、安全、可靠、灵活等优势&#xff0c;可以为用户提供一…

mysql索引之B+树

1.概述 提到B树就不得不提及二叉树&#xff0c;平衡二叉树和B树这三种数据结构了。B树就是从他们三个演化来的。众所周知B树是一种常见的数据结构&#xff0c;被广泛应用于数据库和文件系统等领域&#xff0c;B树的设计目标是保持树的平衡性&#xff0c;以提供稳定的性能&…