哈工大计算机网络课程网络安全基本原理详解之:密钥分发中心与公钥认证中心

哈工大计算机网络课程网络安全基本原理详解之:密钥分发中心与公钥认证中心

在介绍密钥分发中心的概念前,先来回顾一下之前介绍的身份认证协议AP4.0:利用随机数R来避免“回放攻击”,并借助于对称加密算法来保证R的加密传输和解密,从而实现身份认证的协议过程。

共享密钥问题与解决方案

我们知道对称加密算法在发送方/接收方使用的是同一共享密钥,用该密钥加密,同时也需要用该密钥解密。**因此,这里涉及到的一个问题就是,发送方和接收方如何实现密钥的共享,即两个实体在网上如何建立共享密钥。**如果这个问题不能得到很好解决的话,那么共享密钥在网络环境下实施起来就存在很大障碍和安全隐患。

解决方案

比较有代表性的解决方案,就是利用可信任的密钥分发中心(Key Distribution Center-KDC)作为实体间的中介(intermediary)

引入密钥分发中心KDC,就是以它作为中介,实现通信实体之间的共享密钥的分发。

密钥分发中心(KDC)

接下来,我们就看一下作为密钥分发中心,是什么样一个形式,发挥什么样的作用。

我们仍然假设一个通信场景,并以此为基础来介绍KDC在两个实体间通信时的作用机理。

仍然以Alice和Bob两个实体间的通信为例:

  • Alice和Bob间通信需要使用共享对称密钥进行加密,如何获取彼此的密钥呢?

  • 引入KDC:一个服务器

    • 每个注册用户(很多用户)共享其与KDC的秘密密钥。也就是说,每个用户如果需要使用密钥的话,都需要在KDC上注册一个密钥,该密钥只有用户自己和KDC知道。
      在这里插入图片描述
  • Alice在KDC上注册一个只有Alice和KDC知道的密钥KA-KDC

  • Bob在KDC上注册一个只有Bob和KDC知道的密钥KB-KDC

  • Alice和Bob只知道自己与KDC之间的对称密钥,用于分别与KDC进行秘密通信。

  • Alice在与Bob进行通信时,为了把自己的密钥告知Bob,就需要借助KDC来完成。

Q:KDC如何支持Bob和Alice确定用于彼此通信的共享对称密钥呢?

  • Alice利用其与KDC之间共享的密钥KA-KDC,将Alice和Bob的身份信息加密,得到KA-KDC(A,B),然后发送给KDC。
  • KDC利用与Alice间的共享密钥对该信息进行解密,并且知道Alice期望与Bob进行通信。为此,KDC为Alice和Bob这次通信生成一个随机数R1。
  • KDC将R1和Alice本身的身份标识利用KDC与Bob之间的密钥KB-KDC进行加密,得到KB-KDC(A, R1),之后再将其与R1拼接后,再次利用KA-KDC进行加密,得到KA-KDC(R1,KB-KDC(A, R1))。将该加密的结果发送给Alice。
  • Alice收到该加密信息后,利用KA-KDC密钥解密得到随机数R1,该随机数R1就可以作为这次与Bob之间通信所使用的会话密钥。
  • 对于KB-KDC(A, R1)这个加密内容,Alice是无法解开的。因为她本次的目的通信对象是Bob,因为在获得这个加密内容后,她会转发给Bob。
  • Bob在收到KB-KDC(A, R1)后,可以利用他与KDC共享的密钥KB-KDC解密,从而得到这个随机数R1。
  • 此时Bob可以获知Alice的身份认证,并且这次通信的会话使用的秘密的对称密钥就是R1。
  • 接下里作为Alice和Bob之间就可以为这次的秘密通信使用R1作为会话密钥(session key),用于共享对称加密。

在这里插入图片描述

总结

以上就是KDC在Alice和Bob之间通信过程中,所起的作用和原理。实际上可以看出,KDC的角色相当于是作为一个大家都可以信任的权威机构,每个通信方都需要向其注册申请自己的密钥。在对称加密中,由于需要通信双方共享对称密钥,但实际上,通信双方本身的密钥是不直接利用网络传输给对方的,而是借助于KDC中介,生成一个临时的共享密钥。由这个临时共享密钥来实现通信双发本次会话的对称加密。

公钥认证中心

上面我们介绍了对称密钥在实际应用中,需要借助KDC来实现密钥分发的基本原理和过程。在这一节中,我们针对上述对称密钥方法中存在的问题,来介绍一种公钥会使用的机制:认证中心(CA)

在之前介绍的身份认证协议AP5.0中,我们介绍了在Alice和Bob间使用对称密钥加密通信时,会存在中间人攻击的问题。事实上,使用公开密钥除了存在这种问题外,还有一个典型的场景就是:比萨恶作剧。

比萨恶作剧

同样以Alice和Bob间的通信为例,看看Trudy(第三方入侵者)可以在通信过程中实施怎样的比萨恶作剧。

  • Ttudy创建邮件订单:Dear Pizza Store: Please deliver to me four pepperon pizzas. Thank you Bob.

    上述邮件订单的意思就是,以Bob的名字,向Pizza店订购了4个pizza。

  • 为了实现上述恶作剧,Trudy会利用她的私钥签名订单。

  • Trudy向比萨店发送订单。

  • 当比萨店索要Bob的公钥时,Trudy向比萨店发送她自己的公钥,但是她声称这是Bob的公钥。

  • 由于没有其他机制来验证该公钥是不是真的属于Bob,比萨店只能利用收到的公钥尝试去解密收到的以为是“Bob"发送的签名订单。当然这是能解密的(因为这是一对Trudy的私钥和公钥),因此,基于非对称加密算法,比萨店由于用该公钥解开了之前以为是真实Bob的私钥加密的订单,所以认定该公钥就是属于Bob的。

  • 比萨店核实签名,然后向Bob配送了4个比萨。

  • 然而可能Bob根本就不喜欢吃比萨,所以这也称为比萨恶作剧。

事实上,我们分析一下,无论是之前的中间人攻击还是比萨恶作剧也好,问题的发生就在于公钥这样一个系统存在一个主要的问题。接下来,我们详细对该问题进行探讨。

公钥问题

核心问题其实上面在讲比萨恶作剧时也提到了,实际上就是,当Alice或者比萨店,当其获得了Bob的公钥时(通过网站,e-mail,磁盘等),她应该如何确定这是真的Bob的公钥,而不是另一个第三方的公钥?

上面的中间人攻击和比萨恶作剧,事实上发生问题的原因,都在于第三方使用了假的公钥来欺骗了接收方。这个问题也就是公钥的主要问题。

如何解决?

同样的,我们可以借助第三方权威认证机构:可信任的认证中心(Certification Authority - CA)。

可信任的认证中心

可信任的认证中心跟我们上面介绍的密钥分发中心KDC类似,它也是一个服务器形式的基础设施,它的主要目的是实现:将网络中通信的实体与其真正的公钥进行绑定。

因此,作为我们在网络通信中要使用公钥的每个人、路由器等,都需要在CA上注册其公钥。

  • 每个网络通信实体向CA提供“身份证明”
  • CA利用其自己的私钥,对通信实体的公钥进行签名,进而创建绑定通信实体及其公钥的证书(certificate)
  • 证书包含了由CA签名的通信实体的公钥—CA声明:这是**的公钥

在这里插入图片描述

有了证书之后,将来任何实体需要获取Bob的公钥时,就不会把一个“欺骗性”的密钥当作Bob的密钥,因为它会核实这个密钥的证书是否由权威认证颁发的。

就像大学毕业出去找工作,用人单位不会只听信你自己说:我是***名牌大学毕业的,而是会看你的毕业证书,因为证书是由教育部权威机构颁发的。上面的CA颁发证书也是类似的道理。

有了CA认证中心后,公钥系统就可以比较安全的来运行和实施了。

此时,当Alice想要Bob的公钥时:

  • 首先获取Bob的公钥证书(从Bob或其他地方)。
  • 应用CA的公钥,解密证书中签名的公钥,从而获得Bob的实际公钥。

在这里插入图片描述

公钥证书的主要内容

在这里插入图片描述

在示例中包含这样几部分:

  • 序列号,认证中心会为每个证书编号,是一个唯一的序列号。
  • 证书持有者信息,即对哪个实体的证书进行签名的。包括算法和密钥值。
  • 证书发行者信息
  • 证书有效期
  • 发行者的数字签名

总结:公钥认证中心CA是现在网络公钥系统得以正常运行的重要保障!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio配置PCL库

Visual Studio配置PCL库 Debug和Release配置新建项目配置属性表测试参考 Debug和Release Debug和Release的配置过程一模一样,唯一区别就在于最后一步插入的附加依赖项不同,因此下面以debug为例。 配置新建项目 1、新建一个C空项目,模式设置…

3ds Max如何进行合成的反射光泽通道渲染

推荐: NSDT场景编辑器 助你快速搭建可二次开发的3D应用场景 1. 准备场景 步骤 1 打开 3ds Max。smart_phone.max打开已 随教程提供。 打开 3ds Max 步骤 2 按 M 打开材质编辑器。选择空材料 槽。单击漫射通道。它将打开材质/贴图浏览器窗口。选择位图&#xff0…

微信小程序如何引入Iconfont

在小程序中引入 Iconfont 可以通过以下步骤进行操作: 打开 Iconfont 网站(https://www.iconfont.cn/)并登录账号,创建一个项目并添加所需的图标到项目中。 在项目中选中需要使用的图标,点击右上角的 “下载代码” 按钮…

HTTP——五、与HTTP协作的Web服务器

HTTP 一、用单台虚拟主机实现多个域名二、通信数据转发程序 :代理、网关、隧道1、代理2、网关3、隧道 三、保存资源的缓存1、缓存的有效期限2、客户端的缓存 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率。…

redis入门2-命令

Redis的基本数据类型 redis的基本数据类型(value): string,普通字符串 hash(哈希),适合存储对象 list(列表),按照插入顺序排序,可以由重复的元素 set(无序集合),没有重复的元素 sorted set(有序集合)&…

opencv35-形态学操作-腐蚀cv2.erode()

形态学,即数学形态学(Mathematical Morphology),是图像处理过程中一个非常重要的研 究方向。形态学主要从图像内提取分量信息,该分量信息通常对于表达和描绘图像的形状具有 重要意义,通常是图像理解时所使用…

No111.精选前端面试题,享受每天的挑战和学习

文章目录 map和foreach的区别在组件中如何获取vuex的action对象中的属性怎么去获取封装在vuex的某个接口数据有没有抓包过?你如何跟踪某一个特定的请求?比如一个特定的URL,你如何把有关这部分的url数据提取出来?1. 使用网络抓包工…

selenium-web自动化测试

一、selenium环境部署 1.准备chrome浏览器(其他浏览器也行) 2.准备chrome驱动包 步骤一:查看自己的谷歌浏览器版本(浏览器版本和驱动版本一定要对应) 步骤二:下载对应的驱动包, 下载路径 : ChromeDriver - WebDriver for Chrom…

Mybatis实现JsonObject对象与JSON之间交互

项目中使用PostGresql数据库进行数据存储,表中某字段为Json类型,用于存储Json格式数据。PG数据库能够直接存储Json算是一大特色,很多特定情境下使用直接存储Json字段数据能够大量节省开发时间,提高后台数据查询和转换效率。 1、基…

中国中医中药元宇宙 中药材价格缘何“狂飙”

◇相比去年同期,有超200个常规品种涨幅高于50%,25个常用大宗药材涨幅超200%,个别品种甚至涨价4至9倍 ◇在中药材价格普遍高涨的情况下,部分市场仓库库存数量也较多,出现囤积居奇倾向 ◇“不少游资和热钱涌入中药材市场…

【前端实习生备战秋招】—HTML 和 CSS面试题总结(二)

【前端实习生备战秋招】—HTML 和 CSS面试题总结&#xff08;二&#xff09; 1.有哪些方式可以对一个 DOM 设置它的 CSS 样式&#xff1f; 外部样式表&#xff0c;引入一个外部 css 文件内部样式表&#xff0c;将 css 代码放在 <head> 标签内部内联样式&#xff0c;将 c…

Flex弹性盒子的项目属性

最近在写项目时用到了弹性盒子的项目属性&#xff0c;记录一下&#xff0c;以后用到继续扩充 <div class"concern-data"><div><img src"https://meituan.thexxdd.cn/lvyou/assets/pinglun-fc62482a.svg" alt""><span>1&…

软件外包开发的GO语言特点

Go语言&#xff08;也称为Golang&#xff09;是由Google开发的一种编程语言。它具有许多特点&#xff0c;使其成为许多项目范围的优秀选择。Go语言适用于需要高性能、并发和简洁易读的项目&#xff0c;特别是面向网络和分布式应用的项目。今天和大家分享项目的特点及适用的项目…

spark-sql数据重复之File Output Committer问题

前言 我们先来回顾下之前介绍过的三种Committer&#xff1a;FileOutputCommitter V1、FileOutputCommitter V2、S3A Committer&#xff0c;其基本代表了整体的演进趋势。 核心代码讲解详细参照&#xff1a;Spark CommitCoordinator 保证数据一致性 OutputCommitter commitTask…

python——案例六:判断字符串的长度

案例六&#xff1a;判断字符串的长度str"Study"print(len(str))#输出结果如下&#xff1a; #5

HTML|计算机网络相关

1.三次握手 第一次握手&#xff1a;客户端首先向服务端发送请求。 第二次握手&#xff1a;服务端在接收到客户端发送的请求之后&#xff0c;需要告诉客户端已收到请求。 第三次握手&#xff1a;客户端在接收到服务端发送的请求和确认信息之后&#xff0c;同样需要告诉服务端已…

软件安全测试和渗透测试的区别在哪?安全测试报告有什么作用?

软件安全测试和渗透测试在软件开发过程中扮演着不同的角色&#xff0c;同时也有不同的特点和目标。了解这些区别对于软件开发和测试人员来说非常重要。本文将介绍软件安全测试和渗透测试的区别&#xff0c;以及安全测试报告在软件开发和测试过程中的作用。 一、 软件安全测试和…

python 常见数据类型和方法

不可变数据类型 不支持直接增删改 只能查 str 字符串 int 整型 bool 布尔值 None None型特殊常量 tuple 元组(,,,)回到顶部 可变数据类型&#xff0c;支持增删改查 list 列表[,,,] dic 字典{"":"","": ,} set 集合("",""…

Windows下安装Spark(亲测成功安装)

Windows下安装Spark 一、Spark安装前提1.1、JDK安装&#xff08;version&#xff1a;1.8&#xff09;1.1.1、JDK官网下载1.1.2、JDK网盘下载1.1.3、JDK安装 1.2、Scala安装&#xff08;version&#xff1a;2.11.12&#xff09;1.2.1、Scala官网下载1.2.2、Scala网盘下载1.2.3、…

SQL-每日一题【1164. 指定日期的产品价格】

题目 产品数据表: Products 写一段 SQL来查找在 2019-08-16 时全部产品的价格&#xff0c;假设所有产品在修改前的价格都是 10 。 以 任意顺序 返回结果表。 查询结果格式如下例所示。 示例 1: 解题思路 1.题目要求我们查找在 2019-08-16 时全部产品的价格&#xff0c;假设所…