密码学(二)

文章目录

  • 前言
  • 一、Certificate Authorities
  • 二、Key Agreement Protocols

前言

本文来自 Intel SGX Explained

请参考:密码学(一)

一、Certificate Authorities

非对称密钥密码学中的公钥和私钥假设每个参与方都拥有其他参与方的正确公钥。这个假设非常关键,因为非对称密钥系统的整个安全性依赖于某些操作只能由与公钥对应的私钥的所有者执行。

更具体地说,如果Eve能够让Bob相信她自己的公钥属于Alice,那么Eve可以产生似乎来自Alice的消息签名。
在这里插入图片描述

这种情况下,Eve可以中间人攻击的方式,截取Alice和Bob之间的通信,冒充Alice并使用自己的公钥作为Alice的公钥,然后代表Alice签署消息。

如果Bob错误地信任Eve的公钥,他可能会被欺骗,接受被篡改或伪造的消息作为来自Alice的真实通信。这可能导致各种安全风险,包括未经授权的访问、数据篡改或错误信息传播。

为了减轻这种风险,建立安全可信的机制来分发和验证公钥非常重要。这可以涉及使用由受信任的第三方实体(称为证书颁发机构或CA)颁发的数字证书,或者采用去中心化的信任模型,如信任网络,其中个人对彼此的公钥进行数字签名以建立信任。

在密码学中,认证和证书颁发机构(Certification Authority,简称CA)是负责验证身份和颁发数字证书的机构。它们在建立和维护公钥基础设施(Public Key Infrastructure,简称PKI)中起着关键作用。

密码学(一)的介绍性材料假设每个参与方通过具有完整性保证的信道传输他们的公钥。但实际上,这并不是一个合理的假设,安全分发公钥仍然是一个尚未解决的研究问题。

最广泛采用的解决公钥分发问题的方法是证书颁发机构(Certificate Authority,CA)系统,它假设存在一个受信任的机构,该机构的公钥被安全地传输给系统中的其他所有参与方。

在CA系统中,信任的根源是由一个或多个CA机构拥有的根证书。这些根证书的公钥被预先分发给参与方,以确保其可靠性。然后,CA机构可以颁发数字证书,将公钥与实体的身份信息绑定在一起,并用CA机构的私钥对数字证书进行签名。其他参与方可以使用CA机构的公钥验证数字证书的有效性和真实性。

通过使用CA系统,参与方可以相信从CA机构获得的数字证书,因为它们具有信任的根源和可验证性。这种机制解决了公钥分发的问题,确保了公钥的可靠性和身份的验证。

证书颁发机构(CA)负责安全获取每个参与方的公钥,并发行将参与方的身份(例如,“Alice”)与其公钥绑定的证书,如下图所示:
在这里插入图片描述
上图表明了证书是由证书颁发机构(发行者)签名的陈述,将一个主体的身份与一个公钥绑定起来。

在这个过程中,参与方需要向CA提交其公钥以进行注册。CA会验证参与方的身份,并确保其公钥的真实性和可信度。一旦验证通过,CA将发行一个数字证书,其中包含参与方的身份信息和对应的公钥。

这个数字证书包含了许多信息,如证书的颁发者(即CA的身份)、证书的持有者(即参与方的身份)、公钥以及其他元数据。为了确保数字证书的完整性和真实性,CA会使用自己的私钥对证书进行签名。其他参与方可以使用CA的公钥来验证证书的签名,从而确认证书的有效性和真实性。

一旦参与方获得了数字证书,它们可以使用证书中的公钥来进行安全通信。在加密通信中,发送方可以使用接收方的公钥加密消息,而接收方则使用自己的私钥解密消息。在数字签名中,发送方可以使用自己的私钥对消息进行签名,接收方可以使用发送方的公钥验证签名的真实性。

通过CA系统的运作,参与方可以信任其他参与方的公钥,因为它们通过由受信任的CA颁发的数字证书进行验证和确认。

总结而言,证书颁发机构(CA)负责安全地获取每个参与方的公钥,并发行将参与方的身份与其公钥绑定的数字证书。这确保了公钥的真实性和可信度,为参与方之间的安全通信提供了基础。

证书实质上是由证书发行者(通常是CA)的私钥生成的加密签名。由发行者签名的消息声明了一个公钥属于一个主体。证书消息通常包含标识符,说明证书的预期用途,例如“此证书中的密钥只能用于签署电子邮件消息”。证书消息通常还包括发行者认证策略的标识符,该策略总结了发行者采取的措施,以确保主体的公钥的真实性。

在CA系统中的一个主要问题是没有明显的方法来撤销证书。撤销机制对于处理私钥意外暴露的情况非常重要,以避免攻击者使用证书冒充被损害的主体。虽然已经开发了先进的证书撤销系统,但防止密钥被泄露的首要措施是为证书添加过期日期。

在一个CA系统中,每个参与方都会提供自己的证书和公钥。任何信任CA并已安全获取CA的公钥的参与方都可以使用下图所示的过程来验证任何证书。
在这里插入图片描述
上图表明了由CA颁发的证书可以被任何已安全获取CA公钥的参与方验证。如果证书有效,其中包含的主体公钥可以被信任为属于证书所标识的主体。

一个主要的缺点是CA系统中,CA的私钥成为攻击的目标。通过尽量减少对CA私钥的使用,可以在一定程度上减少其被攻击的机会。上述描述的机构成为根CA,他们的私钥仅用于生成中间CA的证书,而中间CA则负责为系统中的其他参与方生成证书,如下图所示:
在这里插入图片描述
上图表明了一个层次化的CA结构旨在减少根CA私钥的使用,降低其被攻击的风险。在这种结构中,根CA的私钥仅用于签署中间CA的证书。

中间CA位于根CA和最终用户之间,负责为系统中的各方(包括最终用户)发放和签署证书。中间CA拥有自己的私钥,用于签署最终用户的证书。

通过将证书签署的责任分布在多个层级的CA之间,层次化结构减少了对根CA私钥的依赖。这有助于减轻根CA私钥被攻击的风险。即使中间CA的私钥遭到攻击,也只会影响到由该中间CA签署的证书,而不会危及整个系统的安全。

在层次化的CA系统中,唯一安全分发给所有参与方的公钥是根CA的公钥。因此,当两个参与方希望进行交互时,每个参与方都必须提供自己的证书,以及颁发CA的证书。例如,给定上图中的层次结构,Alice可以通过提供她的证书以及Intermediate CA 1的证书来向Bob证明她的公钥的真实性。Bob首先使用上上图中的步骤,通过根CA的公钥验证Intermediate CA 1的证书,从而确保Intermediate CA 1的公钥的真实性。然后,Bob使用Intermediate CA 1的公钥验证Alice的证书,因为他现在信任Intermediate CA 1的公钥。

通过这个过程,Bob可以验证Alice的证书,并相信其中包含的公钥确实属于Alice。这种逐级验证的方法确保了证书链的完整性和真实性。每个参与方都需要验证对方的证书,并建立起信任关系,以确保安全通信和身份验证。

总结而言,在层次化的CA系统中,只有根CA的公钥安全地分发给所有参与方。因此,当两个参与方希望进行交互时,每个参与方都必须提供自己的证书和颁发CA的证书。通过逐级验证证书链,可以建立起信任关系,并确保通信双方的公钥的真实性和可信性。

在大多数国家,政府为其公民发放身份证,因此充当了证书颁发机构的角色。身份证是一种证书,将主体的身份(完整的法定姓名)与主体的外貌(用作公钥)绑定在一起,如下图所示:
在这里插入图片描述
上图表明了身份证是一种证书,将一个主体的完整法定姓名(身份)与主体的外貌特征绑定在一起,而外貌特征则充当了公钥的作用。

每个政府的身份证发放操作都受到法律的监管,因此身份证的发行日期可以用来追踪构成其认证政策的法律。此外,身份证的安全性(尚)不依赖于密码学原语。相反,身份证包括物理安全措施,旨在防止篡改和防伪。

身份证发放的过程受到法律的规范和监管。政府制定了相关法律和政策来管理身份证的发放和使用。发行日期可以反映出身份证所遵循的具体法律和政策。

此外,身份证的安全性主要依赖于物理安全措施,而非密码学原语。身份证通常包括多种物理特征和安全措施,旨在防止篡改和防伪。这些措施可能包括防伪特殊材料、水印、芯片技术、防伪标记等。物理安全措施的设计目的是使身份证更难以伪造和篡改,以保护个人身份的安全性。

二、Key Agreement Protocols

在 密码学(一)中介绍的对称密钥原语的初始设计假设,当两个参与方希望进行交互时,一方生成一个秘密密钥,并使用具有机密性和完整性保证的通信渠道与另一方共享。然而,在实际应用中,很少有预先存在的安全通信渠道可用。

密钥协商协议用于两个参与方建立共享的秘密密钥,只需要一个具有完整性保证的通信渠道。下图概述了Diffie-Hellman密钥交换(DKE)协议,该协议可以帮助读者直观地理解密钥协商协议的工作原理。
在这里插入图片描述
上图表明了在Diffie-Hellman密钥交换(DKE)协议中,Alice和Bob在一个共享的秘密密钥K = gAB mod p上达成一致。一个观察到gA mod p和gB mod p的对手无法计算出K。

DHE协议的基本思想是,两个通信参与者(通常是Alice和Bob)可以在公开的通信渠道上协商一个共享密钥,而无需事先共享任何秘密信息。DHE协议的安全性基于离散对数问题。

以下是DHE协议的步骤:
(1)参数生成:在协议开始之前,需要选定一组公开的参数。这些参数包括一个大素数p和一个生成元g,它们被所有通信参与者共享。
(2)密钥协商:
Alice和Bob各自选择一个私密的随机数a和b。
Alice计算公钥A = g^a mod p,并将A发送给Bob。
Bob计算公钥B = g^b mod p,并将B发送给Alice。
(3)密钥计算:
Alice收到Bob的公钥B后,计算共享密钥K = B^a mod p。
Bob收到Alice的公钥A后,计算共享密钥K = A^b mod p。
(4)密钥确认:Alice和Bob现在都拥有相同的共享密钥K,可以用于加密和解密通信。双方可以相互确认密钥的正确性,例如通过发送哈希值或其他验证信息。

DHE协议的关键优势在于即使在公开信道上进行通信,也能够协商出一个秘密的共享密钥。然而,DHE协议本身并不提供身份验证和消息完整性保护。因此,在实际应用中,通常会将DHE与数字证书和其他安全机制结合使用,以确保通信的安全性。

本文关注使用密钥协商协议构建更大系统,因此我们不会解释DKE中的数学细节,也不会证明其正确性。我们注意到Alice和Bob都派生出相同的共享秘密密钥K = gAB mod p,而不会传输K。此外,在DKE中传输的消息,即gA mod p和gB mod p,对于窃听者Eve来说是不足以确定K的,因为有效地解决gx mod p中的x是一个被认为非常困难的开放问题。

确实,密钥协商协议需要具有完整性保证的通信渠道。如果主动攻击者Eve可以篡改Alice和Bob传输的消息,她可以执行中间人攻击(MITM攻击),如下图所示:
在这里插入图片描述
上图表明了任何密钥协商协议都容易受到中间人攻击,如果通信渠道没有得到适当的保护。在中间人攻击中,主动攻击者可以拦截并操纵两个参与方之间的通信,冒充每个参与方以建立不同的共享密钥。

在密钥协商协议中,攻击者可以拦截Alice和Bob之间的消息,并与他们分别建立不同的共享密钥。然后,攻击者可以在Alice和Bob之间转发消息,使他们相信彼此直接进行通信。这让攻击者能够窃听通信并可能篡改消息。

此外,攻击者还可以在冒充另一个参与方的情况下向Alice或Bob发送自己的消息。这使得攻击者能够注入恶意内容、伪造消息,或者欺骗受害者执行有利于攻击者的操作。

为了降低中间人攻击的风险,必须确保通信渠道的完整性和真实性。可以通过使用数字签名或证书等技术验证通信各方的身份,并采用提供机密性和完整性保证的安全通信协议(如SSL/TLS)来实现。

在中间人攻击中,Eve拦截Alice的第一个密钥交换消息,并向Bob发送自己的消息。然后,Eve拦截Bob的回应并替换为自己的回应,发送给Alice。Eve实际上与Alice和Bob分别执行密钥交换,与他们各自建立共享密钥,而Bob和Alice都不知道Eve的存在。

在与Alice和Bob建立共享密钥之后,Eve可以选择观察Alice和Bob之间的通信,通过转发消息来实现。例如,当Alice发送消息时,Eve可以使用K1(她与Alice之间的共享密钥)对其进行解密,然后使用K2(她与Bob之间建立的密钥)对消息进行加密。虽然Bob仍然接收到Alice的消息,但Eve已经能够查看其内容。

此外,Eve可以冒充通信中的任一方。例如,Eve可以创建一条消息,并使用K2对其进行加密,然后将其发送给Bob。由于Bob认为K2是他与Alice之间建立的共享密钥,他将相信Eve的消息来自Alice。

可以通过对协议中发送最后一条消息的一方(在我们的示例中是Bob)进行身份验证,并让其对密钥协商消息进行签名来防止中间人攻击。当存在CA系统时,Bob使用他的公钥对密钥协商消息进行签名,并向Alice发送他的证书,以及任何中间CA的证书。Alice验证Bob的证书,确保证书所标识的主体是她所期望的(即Bob),并验证与她和Bob之间交换的密钥协商消息与Bob提供的签名匹配。

总之,可以使用密钥协商协议从非对称密钥签名方案中引导对称密钥原语,其中只有一方需要能够对消息进行签名。

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

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

相关文章

【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 分段锁的好处: 结语 我的其他博客 前言 在Java 8中,ConcurrentHashMap的实现经历了重大的改进&am…

在Ubuntu中检查内存的五个命令,总有一种适合你

序言 作为Ubuntu用户,尤其是管理员,我们需要检查系统使用了多少内存资源,以及有多少是可用的。我们还知道,大多数管理任务最好从Linux命令行完成,而不是从图形用户界面完成。例如,服务器通常在shell上工作,没有图形用户界面。由于控制服务器上的内存资源是最重要的,因…

Linux 如何 kill 指定的 python 进程

文章目录 写在前面一、显示python相关的进程二、找到自己想要 kill 的进程,执行下述指令 写在前面 自己的系统是 Ubuntu 20.04 一、显示python相关的进程 ps -ef | grep python显示结果如下 其中,第二列分别是各个进程的 PID 号。 二、找到自己想要…

facebook广告对于推广的重要性

广告覆盖广泛: Facebook是全球最大的社交媒体平台之一,拥有数十亿的用户。通过在Facebook上投放广告,广告主可以覆盖到大量潜在客户,提高品牌曝光度。 精准定位和定向广告: Facebook提供了强大的广告定位和定向功能&a…

oracle的SYSAUX表空间满了怎么处理

清理SYSAUX表空间: 创建临时表,保存近8天的数据 create table test.ash_bak_20220119 as select * from sys.WRH$_ACTIVE_SESSION_HISTORY where SAMPLE_TIME>sysdate-9; SQL> select count(*) from test.ash_bak_20220119;COUNT(*) ----------…

python 基础笔记

基本数据类型 函数 lamda 匿名函数 成员方法 类 类与对象 构造方法 魔术方法 私有成员 私有方法 继承 注解 变量注解 函数注解 Union类型 多态 参考链接:黑马程序员python教程,8天python从入门到精通,学python看这套就够了_哔哩哔哩_bilib…

【Azure 架构师学习笔记】- Azure Databricks (5) - Unity Catalog 简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (4) - 使用Azure Key Vault 管理ADB Secret 前言 DataBricks Unity Catalog(UC)是一个统一的对数据资产治理的解决方案…

C# 一看就懂的装箱拆箱案例

文章目录 装箱(Boxing)拆箱(Unboxing)编程语言中的装箱与拆箱优缺点 在C#中,装箱(Boxing)和拆箱(Unboxing)是值类型与引用类型之间相互转换的过程。 装箱(Box…

C++推箱子游戏开发

游戏 自动地图生成背景音乐推箱子到目标位置 美工资源 美工资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1MZv8pDBXdNDbXxuAAPSM-A **提取码&#xff1a;**2syq 图形库: www.easyx.cn cpp文件 #include "box_man.h" #include <conio.h> #…

Java实现基于GDAL将单波段影像转为三波段影像-唯一值渲染

在处理遥感影像的渲染时&#xff0c;经常需要处理单波段影像。单波段影像没有任何颜色&#xff0c;只有一个波段的值。渲染时只能采用色带拉伸、离散颜色、唯一值渲染这几种方式。直接将单波段影像转成三波段的影像&#xff0c;并将三个波段转为颜色对应的rgb值&#xff0c;这样…

C++ 中关键字 Static

1、什么是static? static 是C中很常用的修饰符&#xff0c;它被用来控制变量的存储方式和可见性。由关键字static修饰类中成员&#xff0c;成为类的静态成员。类的静态成员为其所有对象共享&#xff0c;不管有多少对象&#xff0c;静态成员只有一份存于公用内存中。静态…

2023高级人工智能期末总结

1、人工智能概念的一般描述 人工智能是那些与人的思维相关的活动&#xff0c;诸如决策、问题求解和学习等的自动化&#xff1b; 人工智能是一种计算机能够思维&#xff0c;使机器具有智力的激动人心的新尝试&#xff1b; 人工智能是研究如何让计算机做现阶段只有人才能做得好的…

接口自动化测试要做什么?

作者&#xff1a;不辣的皮皮 链接&#xff1a;https://www.zhihu.com/question/384727359/answer/1124441469 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 可以分为四个步骤/阶段。 原理 》 业务逻辑》 工具》 …

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》 写在最前面私钥加密与伪随机性 第一部分密码学的计算方法论计算安全加密的定义&#xff1a;对称加密算法 伪随机性伪随机生成器&#xff08;PRG&#xff09; 规约法规约证明 构造安全…

Python算法例34 寻找丢失的数

1. 问题描述 给一个由1~n的整数随机组成的一个字符串序列&#xff0c;其中丢失了一个整数&#xff0c;本例将找到它。 2. 问题示例 给出n20&#xff0c;str19201234567891011121314151618&#xff0c;丢失的数是17。 3. 代码实现 def find_missing_number(n, string):nums…

正则表达式手册

文章目录 一、表达式全集二、常见的正则表达式1. 校验数字的表达式2. 校验字符的表达式3. 特殊需求表达式 一、表达式全集 字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如&#xff0c;“n”匹配字符“n”。“\n”匹配一…

【代码随想录】刷题笔记Day47

前言 又过了个愉快的周末~大组会终于不用开了&#xff0c;理论上已经可以回家了&#xff01;但是我多留学校几天吧&#xff0c;回家实在太无聊了&#xff0c;也没太多学习的氛围 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; dp[i]含义 考虑下标i&#xff08;包括…

【leetcode】力扣算法之两数相加【中等难度】

题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都…

Qt5.14.2实现将html文件转换为pdf文件

文章目录 简介源码widget.cppwidget.uihtml文件演示效果简介 QPdfWriter是Qt框架中用于创建和写入PDF文件的类。它允许您在您的Qt应用程序中动态生成并输出PDF文档,以便进行打印、保存或导出。 QPdfWriter类提供了以下一些常用的函数和方法,可以让您创建和定制PDF文件: 构…

ASM磁盘管理:从初始化参数到自动化管理的全面解析

文章目录 一、引言二、ASM初始化参数三、ASM三大系统权限四、ASM实例的启停1.Oracle ASM的启停可以通过两种方式进行2.查看集群中的资源状态3.配置 ASM资源随着系统启动而启动4.配置数据库实例随着ASM启动而启动 五、数据库实例与ASM的交互六、 启动策略详解七、 ASM后台进程八…