网络安全—认证技术

文章目录

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

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

相关文章

这次,数据泄露的目标受害者指向了---救护车服务公司

已停业的救护车服务遭到勒索软件攻击导致近百万人受到威胁! 此次数据泄露的目标受害者是法伦救护车服务公司,该公司是Transformative Healthcare的子公司。ALPHV勒索软件团伙声称对2023年4月下旬对Transformative Healthcare的攻击负责,并导…

SpringBoot 集成支付宝支付

网页操作步骤 1.进入支付宝开发平台—沙箱环境 使用开发者账号登录开放平台控制平台 2.点击沙箱进入沙箱环境 说明:沙箱环境支持的产品,可以在沙箱控制台 沙箱应用 > 产品列表 中查看。 3.进入沙箱,配置接口加签方式 在沙箱进行调试前…

rime中州韵小狼毫 inputShow lua Translator 输入字符透传翻译器

在 rime中州韵小狼毫 help lua Translator 中我们分享了如何使用 lua 脚本定义一个 translator,并以 五笔・拼音 为例引用了该 translator,并且达到了预期的效果。 今天,我们继续通过 lua 脚本为 rime中州韵/小狼毫 输入法打造一个 translat…

实验3 vTPM相关

可以代做实验手册等私聊 一、实验目的 1.了解vTPM原理和相关知识;2.创建具备vTPM的虚拟机;3.加深对可信计算技术的理解。 二、实验内容 安装seabios,libtpms,swtpm,qemu‐tpm;启动vTPM;安装…

守正出奇,穿越周期 - Bytebase 的 2023

前情提要:Bytebase 的 2022|埋头苦干,孕育希望 产品迭代 2023 年共发布了 25 个版本。这个数字和 2022 年一样,除开春节和一次全员疫情,做到了两周一次的更新。 版本号从 1.11.0 升级到了 2.13.0。其中在 5 月份&…

MySQL常见面试题总结

1.MySQL基础 1.1什么是关系型数据库? 顾名思义,关系型数据库(RDB,Relational Database)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多…

图像分割-漫水填充法 floodFill

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的C#版本请访问:图像分割-漫水填充法 floodFill (C#)-CSDN博客 FloodFill方法是一种图像处理算法&#…

C++上位软件通过Snap7开源库访问西门子S7-200/合信M226ES数据块的方法

前言 上一篇文章中介绍了Snap7访问西门子S7-1200/S7-1500 DB块的方法,对于S7-200PLC是没有数据块访问的。S7-200PLC中Snap7只能通过访问MB块,VB块的方法进行和PLC之间的Snap7通信和数据交换。手头没有S7-200PLC故通过合信CTMC M226ES运动控制器进行测试&…

SSM的校园二手交易平台----计算机毕业设计

项目介绍 本次设计的是一个校园二手交易平台(C2C),C2C指个人与个人之间的电子商务,买家可以查看所有卖家发布的商品,并且根据分类进行商品过滤,也可以根据站内搜索引擎进行商品的查询,并且与卖…

如何用js动态修改字体大小

在项目中,我们常常会遇到使用v-html渲染文本的情况。 如果需要点击大中小三个字号按钮,需要修改字体的大小。那我们应该怎么做呢 function fontSize(element, type) {let size {big: 22,middle: 16,small: 12};var result element.innerHTML.replac…

hAdmin漂亮的后台html模板免费下载

hAdmin漂亮的后台html模板免费下载-遇见你与你分享

autograd与逻辑回归

一、autograd—自动求导系统 torch.autograd.backward() torch.autograd.backward()是PyTorch中用于计算梯度的函数。以下是对该函数的参数的解释: 功能:自动求取梯度 • tensors: 用于求导的张量,如 loss • retain_graph : 保存计算图 •…

【Linux】基本指令了解(一)

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:1. 认识Linux1.1 什么是Linux1.2 Linux特点 2. ls指令3. pwd命令4. cd 指令5. touch命令6. mkdir指令7. …

SSM共享汽车租赁平台----计算机毕业设计

项目介绍 本项目分为前后台,前台为普通用户登录,后台为管理员登录; 管理员角色包含以下功能: 管理员登录,修改管理员信息,用户信息管理,管理新闻公告,汽车品牌信息管理,城市信息管理,租赁点信息管理,共享汽车信息管理,汽车订单信…

【Linux Shell】1. Shell 简述

文章目录 【 1. Shell 解释器、Shell语言、Shell脚本 】【 2. Shell 环境 】【 3. 一个简单的 Shell 脚本 】3.1 Shell 脚本的编写3.2 Shell 脚本的运行3.2.1 作为可执行程序运行 Shell 脚本3.2.2 作为解释器参数运行 Shell 脚本 【 1. Shell 解释器、Shell语言、Shell脚本 】 …

解决Redis序列化乱码问题

如果我们使用原生的JDK序列化&#xff0c;那么当我们将数据存储到Redis中就会出现乱码的情况 为了解决这个问题我们需要重写RedisTemplate从而解决序列化乱码问题 首先在Maven中引入相应的依赖 <dependency> <groupId>com.fasterxml.jackson.core</group…

七、Redis 缓存 —— 超详细操作演示!

七、Redis 缓存 —— 超详细操作演示&#xff01; 七、Redis 缓存7.1 Jedis 客户端7.1.1 Jedis 简介7.1.2 创建工程7.1.3 使用 Jedis 实例7.1.4 使用 JedisPool7.1.5 使用 JedisPooled7.1.6 连接 Sentinel 高可用集群7.1.7 连接分布式系统7.1.8 操作事务 7.2 金融产品交易平台7…

Python怎么修改进程名称

目录 一、进程名称的概念 二、Python修改进程名称的方法 三、代码示例与使用说明 四、注意事项 五、适用场景 六、总结 Python是一种强大的编程语言&#xff0c;广泛应用于各种应用程序的开发。在Python中&#xff0c;修改进程名称可以通过多种方式实现。下面我们将深入探…

python c语言 代码动态检查,python c语言语法分析

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python c语言 代码动态检查&#xff0c;python c语言语法分析&#xff0c;今天让我们一起来看看吧&#xff01; Source code download: 本文相关源码 初学编程&#xff0c;应该学习哪一门编程语言&#xff0c;有不少人感…

项目经理面试10问

今天我们来说说项目经理专业面试的十条经验总结。如果你认真阅读并思考&#xff0c;相信对在屏幕前的你会有所帮助和启发。 1、请做一下自我介绍 自我介绍很重要。无论面试什么岗位&#xff0c;面试官通常都会问你一个最常见的问题&#xff1a;“请做一下自我介绍。” 在准备…