当前位置: 首页 > news >正文

【密码学】密码协议的分类:②认证协议

        密码协议的分类有很多种方式,这里我采取的是基于协议实现的目的来分类。可以将密码协议分成三类:认证协议密钥建立协议认证密钥建立协议

一、认证协议是什么?

        认证协议都在认证些什么东西呢?认证一般要认证三个东西:消息认证、数据源认证和实体认证,用于防止欺骗、伪装等攻击。简单说明一下这三者:

  • 消息认证:目的是要确保数据没有被篡改。
  • 数据源认证:目的是确保接收到的消息确实来自声称的发送者,而不是由第三方伪造的。
  • 实体认证:目的是验证双方身份的真实性,确保通信的另一方是真实的、授权的实体,而不是冒充者。

二、有哪些认证方法?

         认证方法多种多样,每种方法都有其优缺点和适用场景。重点理解数字证书认证基于挑战应答的认证

(1)口令认证

        传统的认证方法是采用口令来解决这个问题。比如:账号密码(静态口令认证)或者手机验证码(动态口令认证)

(2)数字证书认证

        数字证书认证基于公钥基础设施(PKI),通过颁发数字证书CA来验证用户的身份。数字证书包含了用户的公钥、身份信息以及证书颁发机构的数字签名等信息。用户在进行身份认证时,需要出示有效的数字证书,并由接收方进行验证。

CA认证工作原理图

 

数字证书认证工作原理

  1. 用户申请数字证书时,需向CA提交个人或组织的相关信息。
  2. CA审核通过后,使用自己的私钥对用户的公钥和相关信息进行签名,生成数字证书。
  3. 用户在网络通信中使用数字证书证明自己的身份,接收方通过验证证书上的签名确认证书的真实性,并使用证书中的公开密钥进行加密通信。

(3)基于挑战应答的认证

        挑战应答认证方式要求认证服务器向用户发送一个随机数(又叫“挑战值”),用户根据这个随机数和自己的私钥生成一个应答发送给服务器。服务器再根据自己的私钥和用户的公钥验证应答的正确性。这种方式可以有效防止重放攻击和中间人攻击,提高了认证的安全性。

挑战应答认证工作原理图

挑战应答认证工作原理

  1. 客户端向认证服务器发出身份认证请求。
  2. 认证服务器生成一个随机的挑战字串发送给客户端。
  3. 客户端根据挑战字串和约定的规则生成应答字串,并发送给认证服务器。
  4. 认证服务器验证应答字串的正确性,若正确则认证通过,否则认证失败。

对比数字证书认证与基于挑战应答的认证:

数字证书认证基于挑战应答的认证
安全性与特点数字证书由权威的CA签发,具有广泛的认可度。用户无需在网络上传输敏感信息(如密码),提高了安全性。
使用证书中的公开密钥进行加密通信,确保信息传输的安全性。每次认证都生成不同的挑战字串,增加了攻击者破解的难度。
数字签名技术确保信息的发送方无法抵赖曾发送过该信息。可以根据需要自定义挑战和应答的规则,适用于多种场景。
应用场景广泛应用于电子政务、电子商务、网上银行等领域,为机构和个人提供身份认证和信用认证服务。适用于需要高安全性身份认证的场景,如远程登录、VPN接入、敏感信息访问等。

(4)其他认证方式

        生物特征认证:利用人体固有的生物特征进行身份认证,如指纹、面部识别、虹膜识别、声纹识别等。这种认证方式具有高度的唯一性和便携性,难以伪造,因此安全性较高。然而,生物特征信息的采集和存储需要严格遵守隐私保护规定,以防止信息泄露。

        智能卡认证:通过智能卡硬件的不可复制性来确保用户身份的真实性。智能卡通常包含用户的私钥等敏感信息,用户在进行身份认证时需要插入智能卡并输入密码或进行其他操作。这种方式结合了物理硬件和密码的双重保护,提高了安全性。

        此外还有基于行为的认证(如通过分析用户的操作习惯来验证身份)、多因素认证(结合多种认证方式以提高安全性)等。

        但是口令容易被窃取,所以采用口令认证的方式,其安全性比较脆弱。要解决这个问题,必须设计安全的认证协议,以防止假冒和欺骗等攻击。认证可以分为单向认证和双向认证。

三、具体有哪些认证协议?

(1)采用单向函数的认证协议

        在单向函数的认证协议中,发送方计算消息的散列值并将其发送给接收方,接收方使用相同的单向函数重新计算接收到的消息的散列值,以验证消息的完整性和来源。 

采用单向函数的认证协议实现HOST验证Alice的身份

 【注】采用单向函数的认证协议无法抵抗字典攻击。

(2)采用双钥体制的认证

Alice向Host采用双钥体制的实现单向认证

【注】上图中的随机数R可以看成是一个挑战值。

(3)采用联锁协议的双向认证

        采用联锁协议的双向认证旨在提供双向的身份验证,确保双方都能够确认彼此的身份。

采用联锁协议的双向认证

(4)单向SKID身份识别协议——SKID2

        这是一种简单的单向身份识别协议,其中SKID代表“Simple Key ID”,Alice和Bob在SKID协议里事先共享了密钥K

Bob向Alice采用SKID2认证协议认证其身份
  • 步骤
  1. 验证者Alice向被验证者Bob发送一个挑战。
  2. Bob使用其私钥对挑战进行签名(图中通过MAC实现数字签名)。
  3. Bob将签名后的挑战发送回Alice。
  4. 验证者Alice使用被验证者Bob的公钥验证签名。
  • 优点:简单且易于实施。
  • 缺点:没有防止重放攻击的能力。

(5)双向SKID身份识别协议——SKID3

        Alice和Bob在SKID协议里事先共享了密钥K

  • 步骤
  1. Alice向Bob发送一个挑战(上图中的随机数R_A)。
  2. Bob使用自己的私钥对挑战进行签名,并发送回Alice,还发送了用于验证Alice身份的挑战(R_B)。
  3. Alice验证签名,并向Bob发生Alice自己的签名。
  4. Bob验证签名,并确认双方身份。
  • 优点:提供了更强的身份验证保障,实现了双向认证。
  • 缺点:增加了交互次数和复杂度。

相关文章:

【密码学】密码协议的分类:②认证协议

密码协议的分类有很多种方式,这里我采取的是基于协议实现的目的来分类。可以将密码协议分成三类:认证协议、密钥建立协议、认证密钥建立协议。 一、认证协议是什么? 认证协议都在认证些什么东西呢?认证一般要认证三个东西&#x…...

异步编程(Promise详解)

目录 异步编程 回调函数 回调地狱 Promise 基本概念 Promise的特点 1.Promise是一种构造函数 2.Promise接收函数创建实例 3.Promise对象有三种状态 4.Promise状态转变不可逆 5.Promise 实例创建即执行 6.Promise可注册处理函数 7.Promise支持链式调用 Promise的静…...

DjangoORM注入分享

DjangoORM注入 简介 ​ 这篇文章中,分享一些关于django orm相关的技术积累和如果orm注入相关的安全问题讨论。 ​ 攻击效果同数据库注入 从Django-Orm开始 开发角度 ​ Django ORM(Object-Relational Mapping)是Django框架中用于处理数…...

【HBZ分享】Redis各种类型的数据结构应用场景

String(字符串类型) 计数器: incr / decr, 比如商品库存,业务号的发号器业务数据key-value缓存, 缓存结果数据,提高网站性能,缓解DB压力分布式session会话, 集群环境下存储token鉴权信息分布式锁&#xff…...

anaconda创建并且配置pytorch(完整版)

📚博客主页:knighthood2001 ✨公众号:认知up吧 ** 🎃知识星球:【认知up吧|成长|副业】介绍** ❤️如遇文章付费,可先看看我公众号中是否发布免费文章❤️ 🙏笔者水平有限,欢迎各位大…...

高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?

如果有遗漏,评论区告诉我进行补充 面试官: 你对跨域了解多少? 我回答: 跨域问题,即Cross-Origin Resource Sharing(CORS),是现代Web开发中一个非常重要的概念,涉及到浏览器的安全策略——同源策略(Same…...

AtCoder Beginner Contest 365 A~E

A.Leap Year(思维) 题意: 给你一个介于 1583 1583 1583和 2023 2023 2023之间的整数 Y Y Y。 求公历 Y Y Y年的天数。 在给定的范围内, Y Y Y年的天数如下: 如果 Y Y Y不是 4 4 4的倍数,则为 365 365 …...

多机部署, 负载均衡-LoadBalance

目录 1.负载均衡介绍 1.1问题描述 1.2什么是负载均衡 1.3负载均衡的一些实现 服务端负载均衡 客户端负载均衡 2.Spring Cloud LoadBalancer 2.1快速上手实现负载均衡 2.2负载均衡策略 自定义负载均衡策略 3.服务部署(Linux) 3.1服务构建打包…...

(回溯) LeetCode 78. 子集

原题链接 一. 题目描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集 (幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出&…...

DQL数据查询语言(多表处理)—/—<7>

一、多表处理 当前有两个表,一个是学生表student,一个是分数表score student表字段名表示如下(共1000条数据): score表字段表示如下(共6000条数据): 1、求每个学生的总分 SELECT …...

力扣刷题总结

去年有段时间一直在刷题,进步神速,解决了以往刷完就忘的问题,这里总结下经验,给有需要的人参考下,核心观点就仨: 1. 打好数据结构与算法基础 2. 多刷题多练习 3. 形成自己的知识体系 下图是我梳理的知识体…...

BLDC ESC 无刷直流电子调速器驱动方式

BLDC ESC 无刷直流电子调速器驱动方式 1. 源由2. 驱动方法2.1 Trapezoidal 1202.2 Trapezoidal 1502.3 Sinusoidal 1802.4 Field-Orientated Control (FOC) 3. FOC(Field-Oriented Control)3.1 引入坐标系3.2 Clarke and Park变换Clarke 变换&#xff08…...

解决 IntelliJ IDEA 编译错误 “Groovyc: Internal groovyc error: code 1” 及 JVM 内存配置问题

在使用 IntelliJ IDEA 进行开发时,我们可能会遇到各种编译和运行错误,其中之一就是 Groovy 编译器错误(Groovyc: Internal groovyc error: code 1)或 JVM 内存不足错误。这类错误可能会影响开发效率,但通过调整 JVM 内…...

LeetCode.2940.找到Alice和Bob可以相遇的建筑

友情提示:这个方法并没有通过案例,只通过了944个案例(很难受),超时了,但是想着还是分享出来吧 题目描述: 给你一个下标从 0 开始的正整数数组 heights ,其中 heights[i] 表示第 i …...

OFD板式文件创建JAVA工具-EASYOFD 四、文字 Text

JAVA版本的OFD板式文件创建工具easyofd. 功能包含了图像、 图像、 文字、和模版页功能。同时也支持OFD文件的数字签名及验签,电子签章及验签。 本JAVA版本的easyofd使用原生方式创建板式文件,不依赖JAVA的SWT库。 项目地址:http://…...

【概念速通】李群 lie group

李群 lie group 概念速通 快速示例介绍:【引入】单位复数 (The unit complex numbers) 是李群 (lie group) 最简单的例子之一【进一步】SO(2): The 2D rotation matrices【Typical uses】SE(2): Pose of a robot in the plane Group & Lie Group 定义&#xff1…...

day_39

198. 打家劫舍 class Solution:def rob(self, nums: List[int]) -> int:if len(nums) 1:return nums[0]dp [0] * len(nums)dp[0], dp[1] nums[0], max(nums[0], nums[1])for i in range(2, len(nums)):dp[i] max(dp[i - 1], dp[i - 2] nums[i])return dp[len(nums) - …...

计算机系统层次结构

1.计算机系统的组成 计算机系统的组成硬件系统软件系统 2.计算机的硬件部分 2.1冯诺依曼机的结构特点: 图示: 1.五大部分由运算器(ALU),控制器(CU),存储器(主存辅存),输入设备,输出设备五大部分组成2.指…...

java语言特点

Java语言是一种广泛使用的编程语言,它具有以下几个显著的特点: 面向对象:Java是一种纯面向对象的语言,它支持类的封装、继承和多态等特性。面向对象的设计使得Java程序更加模块化,易于维护和扩展。 平台无关性&#xf…...

单元测试注解:@ContextConfiguration

ContextConfiguration注解 ContextConfiguration注解主要用于在‌Spring框架中加载和配置Spring上下文,特别是在测试场景中。 它允许开发者指定要加载的配置文件或配置类的位置,以便在运行时或测试时能够正确地构建和初始化Spring上下文。 基本用途和工…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...