网络安全—认证技术

文章目录

  • 加密认证
    • 对称密钥体制
    • 公钥密码体制
      • 公钥的加密
      • 公钥身份认证和加密
  • 鉴别码认证
    • MAC鉴别码
  • 报文摘要认证
    • 认证 + 加密
    • 只认证
      • 数字签名

通过了解以前前辈们使用的消息认证慢慢渐进到现代的完整的认证体系。所以在学习的时候也很蒙圈,因为前期的很多技术都是有很严重的不可靠性,因此本篇用作加深理解认证技术的发展史还有到目前为止完整的不可抵赖的认证体系是如何形成的,并且了解是如何吸收之前的认证技术的教训或者说吸收好的一些技术。
按照惯例先说原理与技术,再加上我个人理解方便后续复习。

约定:下面很多的加密和认证方式的前提是通讯双方接受了这个传送方式,在他们看来就是可信的,而我们看来肯定是不可信的,这里不要硬犟,但是他们使用了漏洞重重的方式那就代表了他们随时会翻脸不认人的可能性,或者被黑客攻击的可能性,这才会有了今天的比较完善的认证系统。(但是为了循序渐进的学习到后面系统的认证技术方式必须要先了解最简单的几种技术)

加密认证

这里的加密认证应该是我们在了解这方向的知识之前,能够想到的最简单的也是最直接明了的认证方式:通过双方协商的方式来实现认证。(下面介绍两种)

对称密钥体制

双方协商好某种对称加密方式,这就会需要协商好一个会话密钥,双方共享该密钥(共享意思是都知道这个密钥密码),然后对称性的意思就是双方在加密和解密用的都是同一个密钥
这种只能够实现加密不能实现认证(因为随时会话密钥会被泄露或者被破解掉,没有验证的手段说这个消息没有被篡改掉)

在这里插入图片描述

缺点:
我们需要对每一个希望跟自己互相发送消息的人都协商好一个共享会话密钥,这是一个很愚蠢的方式,因为每次对话都要建立一个密钥,用户庞大的话这个密钥数量可想而知,有的用户还希望和不同的人交流。
对整个消息进行加密解密,这个过程十分耗时间。
某一方的密钥丢失了怎么办?
密钥被暴力破解了呢?
基于上面两个问题,任何一方都可以说由于上面两个问题发生的可能性,A有可能说我没有发过这条消息,也有可能是B说我根本没有收到这条消息。双方就出现了争执。

公钥密码体制

公钥的加密

  • 简单了解一下公钥加密原理
    通过某个算法生成公钥和私钥,公钥是可以公开的,私钥是自己拿着谁都不知道的。因为公钥是公布出去的,所以别人使用公钥加密的信息发给我的时候,只有我能够使用私钥解密。

公钥加密这种方式其实有认证的感觉出现了,因为使用别人的公钥只能够给该公钥的发布者发布加密消息,因为只有持有该公钥的私钥才能够解密,这其实也就是间接的验证了消息接收者的正确性,而不是其他人。

在这里插入图片描述

优化了什么:
公钥发布出去,谁都可以使用该公钥给我发送消息,而不用每个人都需要特地的来和我协商好某个会话密钥,大大减少了工作量。
缺点:
双方依旧可以赖皮。。。
B可以对A说你这个消息发出去是不是别人截获了直接替换掉了啊?
A也可以对B说,我发出去的时候不是这样写的,中间肯定是给黑客攻击篡改了。

公钥身份认证和加密

在这里插入图片描述
这个图其实不太准确,理论上是可以使用同一对公钥和私钥进行签名还能进行加解密,但是一般情况不是,我们只需要了解能够这么干就可以实现认证和加解密就行。

  • Sig表示签名,签名和使用公钥加密私钥解密顺序反过来了,但是他们公私钥的生成方式是可以一样的比如使用RSA,所以这里就将就一下都用同一对公钥私钥既签名又加解密。然后签名是私钥签名,公钥验证,这里签名是不会暴漏自己的私钥的,且只有发送方知道,只做验证,因此不必担心私钥泄露。(再深入了解原理就是单向函数原理了,也不要说被人暴力破解,破解完我信息都到对方了,或者对方早就跑路了。在网络的信息传递是十分快的)
  • 实现流程
    A使用私钥对信息M进行签名,让接收方可以使用我的公钥进行验证签名是否是我的

    A继续使用B的公钥进行加密

    B拿到消息后,第一时间是使用自己的私钥进行解密,因为对方使用了B的公钥进行加密

    解密后信息还是不可信,因为不知道是不是A发过来了,这时候我们就取出A的签名,使用A的公钥进行签名验证

    验证成功的话就可以相信这份消息是A发过来且可信的。(否则反之)

这个认证和加密中,接收方使用公钥密钥的顺序不能乱,其实也乱不了,人家最后一步操作是加密那你拿到消息后不就是第一时间进行解密么。然后解密完成后你知道对方之前是签名了后加密,你现在解密完成了不就到了签名验证了?这就是一个认证和加密的过程。
多说一句,这种其实不用纠结顺序,有时候你可以先加密再对密文验证,我这里使用的是对明文验证,然后再加密。这里其实就是看你希望对哪一个签名而已。(但是这种可以随便顺序的在鉴别码中就不可以使用,后面会讲)
缺点:
依旧没有解决发送方会耍赖皮说:我的私钥不见了或者泄露了。
同时接收方可能会赖皮说:我的私钥泄露了,中途肯定被黑客拿到消息篡改了,因为你公钥是公开的,那估计是被黑客修改了。

鉴别码认证

为什么会出现鉴别码认证?
经过加密认证的学习,最合理的貌似是签名,但是签名更多是对身份验证,不是对消息的认证,所以MAC就出现了,能够给消息再加一层壳(这里数字签名思想逐渐成型了)

MAC鉴别码

Message Authentication Code,MAC
这种码是依附在消息中的,当你取出这个MAC码的时候可以通过被依附的这个消息用同样的算法生成另一个MAC码,对比依附在消息的MAC码是否一样就知道消息是否被修改过。(你是否担心MAC同样被修改成能够与篡改信息一样的MAC码?你的担心是正确的,确实是可以,但是有限时间内是难以破解,而且MAC是一个通用模版,模版的意思是,里面的函数是根据你使用的函数进行替换的,哪个安全就用哪个,但是具体的流程还是不变)
MAC的特点就是需要将密钥送进你采用的函数里面来生成一个固定长度的短数据块,然后把数据块附加在消息后,用来后面发送给对方后,对方能够进行验证消息是否被篡改过。

  • 公式可以写为:
    MAC码 = C(K, M)
    C 表示加密,K是密钥,M是发送的消息
    然后两个参数K和M送进加密函数中生成MAC码
    K是双方协商好的密钥

  • 问题很大
    既然你又是协商好的密钥,那你这个没啥必要了,黑客直接暴力破解你的密钥了,还有可能某一方密钥泄露出去了,不是吗?
    当然我们MAC码的引出肯定在真实情况下不会这么做,目的是引出这个理论,为后面的私钥数字签名提供了很大的帮助。但是还需要继续了解MAC工作方式。

  • 直接生成鉴别码贴在原文消息后面
    下图是使用MAC鉴别码最简单的一种使用方式,通过密钥还有M生成MAC后直接贴在原文后面作为原文的签名,若对方使用同一个密钥和直接送过来的M生成的MAC2与原来的MAC比较出来不同的话那这个消息就是不可信任的,否则就是可以信任。
    在这里插入图片描述

好处就是在密钥不泄露的情况下,我们的消息是不会被人篡改的,因为篡改过的话鉴别码就会报错。

注意了,MAC都是双方协商好的密钥,不会对外公布。

  • 对原文进行认证
    下图中就是输入M原文和密钥K生成MAC鉴别码,这个鉴别码就是用来鉴别原文的,然后再通过另一个密钥对整个消息进行加密。对方就是先解密后验证。
    在这里插入图片描述

  • 对密文进行认证
    下图是先进行加密,然后加密完事后使用加密好的密文再与另一个密钥生成鉴别码,这个鉴别码就是用来鉴别密文是否正确的,因为我们就是完成了加密后,输入的密文生成的鉴别码,所以对方也应该先对密文进行鉴别后再解密。
    在这里插入图片描述

重大发现:鉴别码使用的都是对称密钥,因为函数生成需要使用密钥作为参数,所以对方肯定也是使用一样的密钥来验证MAC是否一致。

以上几种认证方式的缺点都是:密钥依旧是需要双方协商。依旧可以翻脸不认人,只是说在一定程度上,接收方可以相信报文是正确的。

总结一下:引出了鉴别码这种方式后,第一大我认为很好的就是把认证和加解密分离开了,原先的公钥私钥等等方式都是直接使用全文加密的方式进行认证,先不提代价是否减少的问题,先是灵活性这方面,MAC已经success了,通过MAC分离了认证和加密后,起码我能够明显感受到之前存在的漏洞好像可以逐渐别填补了,具体是用什么方法先不管,分离开后我们实现的方式就简单了,只用针对一个方面去找和实现的方式即可。


报文摘要认证

Message Digest,MD
报文摘要使用的是散列函数,散列函数是单向散列函数。也可以叫做哈希函数等等,且散列函数是公开的,谁都知道,只不过将散列函数出来的值进行加密的秘钥是保密的,这个后面再说。
即选定了x,直接散列函数H(x) = y很容易计算,反过来你有y但是你希望得到x就是很困难的事情。
注意:x选择是可以随机长度的,但是生成出来的值是固定长度的。希望攻破散列函数值的话那就是碰撞性,能够在较短的时间和次数下真的找到生成y的散列函数参数x。这个不是暴力破解就能解决的,因为这个参数不是我们想的一个数字这么简单,而是摘要,一个文章摘要你能列举出来多少种,能暴力破解出来可能电脑都报废了还没破解到。

这里不深入探究原理

  • 常用的散列函数
    • MD5:生成128位的哈希值
    • SHA-1:生成生成160位的哈希值
    • 当然上面两个现在已经不安全了…只是说常用,真实的企业或者自己在知道不安全的情况下其实也不敢用…

认证 + 加密

别的不说,真的太像MAC鉴别码了
首先区分的是,我们的散列哈希操作也就是【H】,他只使用了M报文内容的摘要作为内容传进散列函数生成H贴在M的后面,这里跟MAC不同,MAC使用的是密钥和M原文,这里直接摘要就可以生成了,很吊,不仅减少了一个参数K密钥,而且这个散列值反推回去也很那破解。

在这里插入图片描述

  • 操作流程
    M直接放进哈希取摘要生成H哈希值
    将哈希值贴到原文后面使用共享密钥进行加密
    对方接收到后先解密,然后取出M原文进行哈希,哈希之后对附加过来的哈希进行比较就能够实现消息认证了。
    因为我们的散列哈希值是固定的,破解是不大可能,除非双方使用的散列哈希函数已经被人攻击成功了。要说缺点肯定是有,就是当攻击方可以知道了你的哈希函数,然后破解了你的密钥K,在途中截取了密文C ,直接将整个密文替换掉,攻击方就可以自己随便写,然后哈希一下贴在自己随便写的内容里面发送给接收方,这样的话直接第三方攻击了,即使双方没有恶意,有第三方的篡改也没办法。

只认证

在这里插入图片描述
看到这的时候绷不住了,这里是在散列值产生后进行一次密钥加密然后这样的还我们接收方有一次解密的过程,解出来的哈希值跟原文自己生成的哈希值对比即可完成消息认证。这大大提升了我们收到的消息的可信度。

  • 这里就不说缺点了,很明显这两个是可以结合起来的,结合起来后就有数字签名的影子了,但是有一点就是数字签名使用的是公钥私钥而不是双方私下自己协商好的。

但是!但是!这已经接近数字签名了,消息认证手段逐渐成熟。

数字签名

这里简单提一下数字签名
在这里插入图片描述

数字签名就是在哈希完成后,使用公钥和私钥进行签名,也就是我们公钥认证中提到的Sig就是签名,签名使用私钥,验证使用公钥,所以我们在发送给对方的时候使用的是自己的私钥,这个私钥是只有你只知道的,除非你自己泄露出去,这种肯定是可信度高的,将哈希值签名后,贴到原文的后面,这样传输过程中哈希就得到了保证,因为是私钥加密的,只有一个人知道,公钥一验证就知道是不是对方发过来的了。(不要纠结是否能破解密钥,这里肯定是还没到最后的很完善的地步,起码这个签名实打实的得到了认证保证)


以下是扩充(没有疑惑的就可不看):

在这里插入图片描述
实在是忍不住补充,希望自己复习的时候能够明白,这里还是有很多不完美性,因为密钥还是没有得到保证,需要密钥得到保证就要有一个可信任的第三方权威机构,通过可信机构给下来的证书,里面有机构私钥的签名,签名是私钥的话,我们有可信机构的公钥那就可以解出来一个哈希值,然后将证书里面的其他东西也做一个哈希进行对比就知道证书知否有效,为何要证明有效性?=>因为对方也应该要有这个证书,交换证书的过程就是实现安全的彼此的公钥交换(不是交换机构的,因为机构的两个人都知道),为什么是安全的?因为你选择了可信任的第三方机构,你相信机构的私钥不会被人知道。IKE就是验证身份的一个过程,其中协商加密算法,交换公钥,由于公钥得到了安全交换,所以我们就不会担心公钥是否被人篡改替换等等。还有就是那个数据包里面协商的种种信息需要用到发送方的私钥,所以由于私钥的签名,对方拿到我这个消息后,就可以用证书里面存着的发送方公钥解出来哈希,然后进行对比即可完完全全确定就是他发送的了,还解决了互相赖皮的可能性,因为可信机构就是可以作为一个正义使者确保消息就是他发的没有篡改过,也无法抵赖,因为既然能够接受且信任机构就代表是对方送过来的消息,无法抵赖!(其实就是PKI机构,后面会继续学习)

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

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

相关文章

数据结构:单调栈

1.单调栈 单调栈是一种数据结构,其中存放的数据应该是有序的,所以单调栈也有单调递减栈和单调递增栈 单调递增栈:栈顶到栈底的元素大小是从小到大 单调递减栈:栈顶到栈底的元素大小是从大到小 单调栈主要就是用来求一个给定序列中…

GenerateBlocks Pro插件 构建更好的WordPress网站

GenerateBlocks Pro插件 构建更好的WordPress网站 GenerateBlocks Pro插件是一个 WordPress 插件,几乎可以完成任何事情,可让您创建轻量级和多功能的网站。由与流行且快速的 GeneratePress 主题相同的创作者构建,该插件不负众望。使用 Genera…

数字孪生技术的未来预测

这种二维地图与摄像头关联,从实用角度来说,是不是比那些VRGIS和三维实景效果要好的多?也更能够还原现场情况,最重要的是成本也会低很多!​​​ 那些用预先采集数据的方式(比如倾斜摄影和3D建模)来还原真实现…

springboot定时执行某个任务

springboot定时执行某个任务 要定时执行的方法加上Schedule注解 括号内跟 cron表达式 “ 30 15 10 * * ?” 代表秒 分 时 日 月 周几 启动类上加上EnableScheduling 注释

【ROS2】MOMO的鱼香ROS2(一)ROS2入门篇——从Ubuntu操作系统开启

从Ubuntu操作系统开启 引言1 术语汇总2 Ubuntu (操作系统)2.1 Ubuntu权限管理2.2 Ubuntu安装软件2.2.1 使用apt命令安装2.2.2 dpkg安装deb包2.2.3 make install源代码安装 2.3 Ubuntu之常用指令2.3.1 ls命令(查看文件)2.3.2 cd 命…

C语言编程入门 – main()函数

C语言编程入门 – main()函数 C Programming Language Essentials - main() function By JacksonML 初见C语言&#xff0c;总被一个全球闻名的”Hello, world!”打印输出所惊讶。 1. 开启Hello, world!的C程序 代码如下&#xff1a; # include <stdio.h> int main(…

<JavaEE> TCP 的通信机制(四) -- 流量控制 和 拥塞控制

目录 TCP的通信机制的核心特性 五、流量控制 1&#xff09;什么是“流量控制”&#xff1f; 2&#xff09;如何做到“流量控制”&#xff1f; 3&#xff09;“流量控制”的作用 六、拥塞控制 1&#xff09;什么是“拥塞控制”&#xff1f; 2&#xff09;如何做到“拥塞…

OSPF的DR与BDR-新版(16)

目录 整体拓扑 操作步骤 1.基本配置 1.1 配置R1的IP 1.2 配置R2的IP 1.3 配置R3的IP 1.4 配置R4的IP 1.5 检测R1与R4连通性 1.6 检测R1与R2连通性 1.7 检测R1与R3连通性 2.搭建基本的OSPF网络 2.1 配置R1 OSPF 2.2 配置R2 OSPF 2.3 配置R3 OSPF 2.4 配置R4 OSPF…

Python+OpenGL绘制3D模型(九)完善插件功能: 矩阵,材质,法线

系列文章 一、逆向工程 Sketchup 逆向工程&#xff08;一&#xff09;破解.skp文件数据结构 Sketchup 逆向工程&#xff08;二&#xff09;分析三维模型数据结构 Sketchup 逆向工程&#xff08;三&#xff09;软件逆向工程从何处入手 Sketchup 逆向工程&#xff08;四&#xf…

免费的云服务器推荐~三丰云

对于许多初创企业和小型公司来说&#xff0c;寻找一个经济实惠且可靠的云服务提供商是至关重要的。在这方面&#xff0c;三丰云以其免费虚拟主机和云服务器吸引了大量用户。 1. 注册与界面 注册三丰云的账户过程简单明了&#xff0c;只需按照步骤填写必要信息即可。其界面设计…

C语言中灵活多变的动态内存,malloc函数 free函数 calloc函数 realloc函数

文章目录 &#x1f680;前言&#x1f680;管理动态内存的函数✈️malloc函数✈️free函数✈️calloc函数✈️realloc函数 &#x1f680;在使用动态内存函数时的常见错误✈️对NULL指针的解引用✈️ 对动态开辟空间的越界访问✈️对非动态开辟内存使用free释放✈️使用free释放一…