网络安全—认证技术

文章目录

  • 加密认证
    • 对称密钥体制
    • 公钥密码体制
      • 公钥的加密
      • 公钥身份认证和加密
  • 鉴别码认证
    • 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.rhkb.cn/news/227751.html

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

相关文章

【OpenCV】OpenCV 4.9.0 正式发布

​ 开源计算机视觉库 OpenCV 4.9.0 已于2023年12月29日正式发布。 此次发布有DNN模块对ONNX Attention、Einsum等层的支持、新的fastGEMM实现、transformers的实验性支持等诸多亮点。 OpenCV 4.9.0 更新内容: (来自OpenCV中国团队以及中国社区的贡献…

Java多线程<三>常见的多线程设计模式

多线程的设计模式 两阶段线程终止 park方法 interrupted() 会让他失效。 使用volatile关键字进行改写 单例模式 双锁检测 保护性暂停 实现1: package threadBase.model;/*** author: Zekun Fu* date: 2022/5/29 19:01* Description:* 保护性暂停,* …

主流级显卡的新选择,Sparkle(撼与科技)Intel Arc A750兽人体验分享

▼前言 对于玩家而言,英特尔独显的出现不仅打破了NVIDIA与AMD双雄天下的局面,而且旗下的Arc A系列显卡还拥有不俗的做工性能以及颇具优势的价格,无论是升级或者是装新机都非常合适。如果要在Arc A系列当中选一个性能不俗,能够满足…

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题)

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 第一部分:数据安全防护(30%) 第二部分:数据安全管理(30%) 第三部分:数据安全处置(40%) 项目介绍…

pytorch01:概念、张量操作、线性回归与逻辑回归

目录 一、pytorch介绍1.1pytorch简介1.2发展历史1.3pytorch优点 二、张量简介与创建2.1什么是张量?2.2Tensor与Variable2.3张量的创建2.3.1 直接创建torch.tensor()2.3.2 从numpy创建tensor 2.4根据数值创建2.4.1 torch.zeros()2.4.2 torch.zeros_like()2.4.3 torch…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C) Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在NEOAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过NEOAPI SDK设置相机固定…

计算机毕业设计 基于HTML5+CSS3的在线英语阅读分级平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

深度学习 | 编码器-解码器网络、seq2seq模型、束搜索算法

我们知道传统RNN输入和输出数据是等长的,这显然极大限制了他的应用范围。 前面几节我们讲到的循环神经网络的各种变体基本上都在解决一个序列的问题。还有一大类问题涉及到的是两个序列间转换。它是自然语言处理中的一个重要领域,包括机器翻译、语音识别…

【GOLANG】使用插件 Goanno 的方式来对方法、接口、结构体注释模板配置

直接 使用插件 Goanno 的方式来对方法、接口、结构体注释模板配置 1、简单安装 Goanno 插件 File->Settings->Plugins , 搜索 Goanno Normal Method 配置内容如下: // Title ${function_name} // Description ${todo} // Author mumu ${date} ${time} // Par…

速卖通详情API接口技术贴:解锁全球商品信息,引领电商创新潮流

一、概述 速卖通详情API接口是一种应用程序接口,允许开发者访问速卖通平台的商品详情数据。通过使用该API接口,开发者可以获取商品的基本信息、描述、图片等,并将其集成到自己的应用程序或网站中,为用户提供更全面的商品信息。 …

进阶学习——Linux系统服务器硬件认识与RAID磁盘

目录 一、服务器知识补充 1.硬件 2.服务器常见故障 二、认识RAID 1.什么是RAID 2.RAID的优点 3.RAID的实现方式 三、RAID磁盘陈列 1.RAID 0 磁盘陈列介绍——RAID 0 2.RAID 1 磁盘陈列介绍——RAID 1 3.RAID 5 磁盘陈列介绍——RAID 5 4.RAID 6 磁盘陈列介绍——RA…

解决阿里云远程连接yum无法安装问题(Ubuntu 22.04)

解决阿里云远程连接yum无法安装问题(Ubuntu 22.04) 第一步 进入阿里云远程连接后,尝试安装宝塔面包第二步:尝试更新软件包等一些列操作第三步:完成上述操作之后,尝试安装yum第四步:尝试更换清华…

代数结构与图论

文章目录 图的基本概念欧拉图与哈密顿图树平面图代数系统群与环格与布尔代数 图的基本概念 图的阶:图中的顶点数 ,n 个顶点被称为 n 阶图零图:一条边都没有 平凡图:一阶零图基图:将有向图的各条有向边改成无向边所得到…

java springboot将接口查询数据放在系统中 一小时系统更新一次 避免用户访问接口查询数据库缓慢

真到了公司 很多数据库表 特别是常用的功能业务对应的 都是几百万条起步的数据 查询会比较缓慢 那么 我们就可以不用每次都真的查询数据库 例如 我这里有一个接口 通过 封装的 IBookService.list 函数去查询数据库 接口返回是这样的 我们先在启动类 条件装配上 这个接口所在的…

阿里云30个公共云地域、89个可用区、5个金融云和政务云地域

阿里云基础设施目前已面向全球四大洲,公共云地域开服运营30个公共云地域、89个可用区,此外还拥有5个金融云、政务云地域,并且致力于持续的新地域规划和建设,从而更好的满足用户多样化的业务和场景需求。伴随着基础设施的加速投入和…

【Java开发岗面试】八股文—Java基础集合多线程

声明: 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验(主要是校招),包括我自己总结的八股文、算法、项目介绍、HR面和面试…

pytorch05:卷积、池化、激活

目录 一、卷积1.1 卷积的概念1.2 卷积可视化1.3 卷积的维度1.4 nn.Conv2d1.4.1 无padding 无stride卷积1.4.2 无padding stride2卷积1.4.3 padding2的卷积1.4.4 空洞卷积1.4.5 分组卷积 1.5 卷积输出尺寸计算1.6 卷积的维度1.7 转置卷积1.7.1 为什么被称为转置卷积1.7.2 nn.Con…

Grafana增加仪表盘

1.Grafana介绍 grafana 是一款采用Go语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。 Grafana下载地址:https://grafana.com/g…

Python+OpenGL绘制3D模型(六)材质文件载入和贴图映射

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

Java强软弱虚引用

面试: 1.强引用,软引用,弱引用,虚引用分别是什么? 2.软引用和弱引用适用的场景? 3.你知道弱引用的话,能谈谈WeakHashMap吗? 目录 一、Java引用 1、强引用(默认支持模式…