加密与安全_密钥体系的三个核心目标之完整性解决方案

news2024/9/22 23:17:42

文章目录

  • Pre
  • 机密性
  • 完整性
    • 1. 哈希函数(Hash Function)
      • 定义
      • 特征
      • 常见算法
      • 应用
      • 散列函数常用场景
      • 散列函数无法解决的问题
    • 2. 消息认证码(MAC)
      • 概述
      • 定义
      • 常见算法
      • 工作原理
      • 如何使用 MAC
      • MAC 的问题
  • 不可否认性
    • 数字签名(Digital Signature)
  • 总结

在这里插入图片描述


Pre

加密与安全_常见的分组密码 ECB、CBC、CFB、OFB模式介绍

加密与安全_ 解读非对称密钥解决密钥配送问题的四个方案

密钥体系的三个主要目标

机密性:确保第三者无法通过密文猜测出明文。
完整性:确保第三者无法篡改原文内容。
不可否认性:确保第三者不能冒充其他人发送消息。
在这里插入图片描述

接下来我们将围绕以下几点展开:

  1. 重述密钥体系的三个主要目标:机密性、完整性和不可否认性。
  2. 介绍确保机密性的对称密码和非对称密码的作用。
  3. 详细讲解如何通过技术手段确保消息的完整性。
  4. 介绍确保不可否认性的技术方法。
  5. 总结加密与消息完整性及不可否认性的方法及其应用场景。

机密性

对称密码:使用相同的密钥进行加密和解密。主要的实现方式包括AES、DES等。

  • 优点:加密速度快,适合大数据量的加密。
  • 缺点:密钥管理困难,需确保密钥的安全传递。

非对称密码:使用一对密钥进行加密和解密,公钥加密,私钥解密。主要的实现方式包括RSA、ECC等。

  • 优点:无需安全通道传递公钥,私钥无需共享。
  • 缺点:加密速度较慢,不适合大数据量的加密。

对称密码和非对称密码解决的是机密性,也就是确保 Eve 即便截获到密文,也无法猜测出 Alice 和 Bob 传递的是啥内容。


完整性

有的时候,Eve 并非需要破解消息。 比如 Alice 辛辛苦苦写了一个程序,Eve 晚上偷偷在程序后面追加了一些代码。 第二天 Alice 将被替换的程序发给了 Bob。 虽然 Eve 没有截获任何密钥,但事实上也破坏了 Alice 和 Bob 之间的信任关系。

所以密钥体系仍然需要解决完整性,即第三者无法篡改原文内容.

在这里插入图片描述

为了确保消息的完整性,即防止消息在传输过程中被篡改,我们可以使用以下技术手段:

1. 哈希函数(Hash Function)

定义

哈希函数将任意长度的数据映射为固定长度的散列值(哈希值)。 散列函数是一个单向计算函数,只有一个输入和对应的输出。f(x)=y . 其中x称为消息, 而y则称为散列值。 f(x)=y可以跟进消息内容计算出对应的散列值,而我们就可以通过散列值来检查信息的完整性

特征

一个合格工业级散列函数,必须具备以下特征

  • 固定长度的散列值

    无论x是多长的消息,单向散列函数必须能够生成固定长度的y(散列值)。比如SHA-256它所计算出来的散列值永远是 256 比特

  • 计算速度非常快

    当然快是相对的,尽管随着x的变大,计算时间势必会加长。但如果不能在现实的时间内计算出来,那么就丧失实际应用的价值了

  • 散列值的唯一性

    散列值的唯一性称之为抗碰撞性。也就是只要x不同那么计算出来的y一定不能相同。抗碰撞性分为两类: 强抗碰撞性和弱抗碰撞性

    弱抗碰撞性指的是x确定,那么y也就确定。 此时找到一个散列值等于y的x是非常困难的.

    在这里插入图片描述

    和弱抗碰撞性对应的是强抗碰撞性。强抗碰撞性指的是在茫茫数据集中,指定任意一个y,找到 x 和 x’ 是非常困难的

    在这里插入图片描述
    一个合格的散列函数,必须同时具备强抗碰撞性和弱抗碰撞性。

  • 单向性: 根据x可以计算出y,但无法根据y反推出x。

    在这里插入图片描述

哈希函数具有不可逆性和抗碰撞性,即难以通过哈希值反推出原始数据,也难以找到两个不同的输入具有相同的哈希值。

在一些场合中,单向散列函数也称之为"消息摘要函数"、“哈希函数"和"杂凑函数”. 计算出的散列值也称之为"消息摘要"或者"指纹"


常见算法

  • MD4/5 : MD 是消息摘要(Message Digest)的缩写。 常用的是 MD5,目前 MD5 已经被证实强抗碰撞性是不安全的,即根据 md5 的算法,现在已经可以产生具有相同y的两个不同x了。所以在安全性高的场合中,不建议使用 md5
  • SHA-1/256/384/512: 这是一个系列。后面的数字表示y的长度(SHA-1 除外)。 SHA-1 已经被证实强抗碰撞性是不安全的,而 SHA-256/384/512 仍未被攻破,所以后面这三个仍可以使用。后面这三类统称SHA-2
  • SHA-3: 算法和 SHA-2 已经完全不一样了。 SHA-3 使用的是Keccak算法。Keccak算法理论上可以生成任意长度的散列值,目前在 SHA-3 规范中规定了SHA3-224\256\384\512这四种版本。Keccak使用的是一种称之为海绵结构的分组算法,大意是将x进行分组,然后每个分组计算生成y’,再将y’作为输入和下一个明文分组一起计算
  • RIPEMD-160: 这个算法系列有两个版本: RIPEMD 和 RIPEMD-160。 其中 RIPEMD 已经被证实强抗碰撞性是不安全的。但 RIPEMD-160 仍然是安全的

应用

  • Alice发送消息前,计算消息的哈希值,并将消息和哈希值一起发送给Bob。
  • Bob收到消息后,计算消息的哈希值,并与Alice发送的哈希值比较,确保消息未被篡改。

散列函数常用场景

  • 口令加密
  • 消息认证码
  • 数字签名
  • 伪随机数生成器
  • 一次性口令

散列函数无法解决的问题

散列函数只能确保信息内容不被篡改,而无法保证消息一定是从合法渠道发来的。 例如 Eve 可以伪装成 Alice 向 Bob 发送消息和对应的散列值。 Bob 接受到消息和散列值后,如果校验一致,那么也只能证明消息没有经过篡改,而无法证明消息是 Alice 发来的。

而为了解决这个问题,就需要同时使用散列值和数字签名了


2. 消息认证码(MAC)

概述

散列函数中,我们提到过通过散列函数我们确保消息原文并没有被篡改过。但无法保证消息是双方真实意思的表现。

比如说 Bob 收到一条借款消息,上面写着请 Bob 给 Alice 的银行账户 xxxxx 转 1000. Bob 通过计算消息内容的散列函数,证实消息没有被篡改过。 那么此时此刻,Bob 应该给这个账户转账吗?

不能!

因为 Bob 并不能证实这条消息是来自于 Alice 的。 有可能这条消息来自于 Eve。 所有仅通过散列函数只能解决是否篡改,而不能解决是否真实。

这是 Bob 以为的

在这里插入图片描述

而实际上却是这样的:
在这里插入图片描述

而消息认证码则可以解决这个问题.

定义

消息认证码是基于哈希函数或对称加密算法生成的一段固定长度的代码,用于验证消息的完整性和真实性。消息认证码是一种确认信息完整性并可以进行认证的技术,简称 MAC(Message Authentication Code)。 MAC 由两部分组成: 消息 + 共享密钥
在这里插入图片描述

和散列函数类似, MAC 可以将任意长度的消息计算出固定长度的输出值。但和散列函数不同的是,如果没有共享密钥,则无法计算出最终的 MAC 值。 所以通过这一个性质来确保安全性.

在这里插入图片描述

MAC = 单向散列 + 共享密钥

常见算法

HMAC (基于哈希函数的消息认证码), CMAC (基于块密码的消息认证码)等。

HMAC 的 H 指的是 Hash 的意思,是一种利用 Hash 来构造消息认证码的算法。 我们说过MAC = 散列函数 + 共享密钥 。 HMAC 使用的散列函数有:SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 几种函数。

因此相对应的 HMAC 也称为:HMAC-SHA-1、HMAC-SHA-224、HMAC-SHA-256、HMAC-SHA-384、HMAC-SHA-512.

HMAC 用数学公式来表示是:

hash(opadKey || hash(ipadKey || message ))

其中:

ipadKey 是 key(密钥)ipad(内部 16 进制的 36 比特流) opadKey 是 key(密钥)opad(外部 16 进制的 5C 比特流)

所以 HMAC 是两层 HASH 的结果值。

在这里插入图片描述

步骤分解:

密钥填充:如果密钥不足预设长度(散列函数的分组长度),则填充’0’。如果长呢?那就用散列函数计算固定长度的散列值作为密钥值

  1. 将填充后的密钥与 Ipad 进行异或操作,最后达到散列函数分组长度。此时将此值称为IpadKey
  2. 将IpadKey附加在 message 开头
  3. 将第三步的结果输入 hash 函数,得出散列值
  4. 将填充后的密钥与 Opad 进行异或操作,最后达到散列函数分组长度。此时将此值称为OpadKey
  5. 将IpadKey附加在 message 末尾
  6. 将第六步的结果输入 hash 函数,得出散列值

工作原理

  1. Alice和Bob共享一个对称密钥。
  2. Alice使用共享密钥和哈希函数生成消息认证码,并将消息和消息认证码一起发送给Bob。
  3. Bob使用共享密钥和哈希函数重新计算消息认证码,并与Alice发送的消息认证码比较,确保消息未被篡改。

如何使用 MAC

以 Bob 和 Alice 之间借钱的例子开始说。 假设这俩人之间通过 MAC 确保安全性,那么双方处理流程应该大致是这个样子

在这里插入图片描述

  1. Alice 将借钱消息发给 Bob。
  2. Bob 收到借钱消息后并不急于执行,而是等着 Alice 发来消息认证码 Alice
  3. 通过共享密钥和散列函数计算出 mac
  4. Alice 将消息认证码发送给 Bob
  5. Bob 按照相同的规则计算一遍 Mac
  6. Bob将自己计算的 Mac 和 Alice 发来的 Mac 比对一遍。通过是否相同判断请求是否合法

MAC 的问题

在 MAC 算法里面既然提到了共享密钥,那么就无法逃离对称密钥体系的宿命:“密钥配送问题”。 而解决这个问题,目前来说只能依靠公钥密钥、Diffie-Hellman 密钥交换,密钥中心等解决方案.

使用 HMAC 可以解决消息合法性和完整性的问题,但却无法抵御重放攻击。 比如 Eve 截获到 Alice 和 Bob 之间的 Hmac 报文后,无限制的重复这段报文。 那么 Bob 就会无限制的进行转账。所以使用 HMAC 进行消息认证时,也会配合序号、时间戳等辅助信息,来判断报文是否需要处理。

同时 HMAC 也无法解决否认的问题,比如 Alice 完全可以事后否认找 Bob 借过钱,因为 Bob 完全有能力伪造出这段报文。即便 Bob 拿出了 MAC 值,也无法证明是 Alice 生成的。

那又该如何证明钱是由 Alice 借的呢?

这就需要数字签名技术了


不可否认性

不可否认性确保消息的发送者不能否认曾经发送过消息,这通常通过数字签名实现。

数字签名(Digital Signature)

定义:数字签名是一种基于非对称密码技术的认证机制,用于验证消息的发送者身份和消息的完整性。

工作原理

  1. Alice使用自己的私钥对消息的哈希值进行加密,生成数字签名,并将消息和数字签名一起发送给Bob。
  2. Bob使用Alice的公钥对数字签名进行解密,得到消息的哈希值,并计算接收到的消息的哈希值。
  3. Bob比较两个哈希值,若相同,则确认消息完整且由Alice发送。

优点

  • 提供身份认证和完整性验证。
  • 防止发送者否认发送过消息。

应用场景

  • 安全电子邮件、数字合同、软件分发等需要验证身份和完整性的场景。

总结

确保信息的机密性完整性不可否认性是密钥体系的重要目标。对称密码和非对称密码主要解决机密性问题。哈希函数、消息认证码(MAC)和数字签名是实现消息完整性和不可否认性的主要技术手段。

应用建议

  • 对于大数据量的加密,使用对称密码如AES。
  • 对于身份验证和不可否认性,结合使用非对称密码和数字签名。
  • 对于消息完整性,使用哈希函数和消息认证码。

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

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

相关文章

c++语法之缺省参数

缺省参数通俗来说就是一个函数里面有初值的参数。有初值那么就可以不传参。 基础语法 缺省分为全缺省和半缺省 全缺省 我们来看它的基础语法,我们以add函数为例: 语法基础就是在给要规定成缺省参数的变量后面一个值 我们可以看到给add传参就会使用默认的数据。…

WPF 表格控件斑马线使用

这里用ListView为案例。 如图效果: 主要思路: 用AlternationCount属性来设置需要使用斑马线的条数,就是说几行一换色,也可以理解为需要几种颜色, 然后再样式模板中,写触发器属性ItemsControl.Alternatio…

CSS原子化

目录 一、定义 二、原子化工具 2.1、tailwind 2.1.1、以PostCss插件形式安装 2.1.2、不依赖PostCss安装 2.1.3、修改原始配置 2.2、unocss 三、优缺点 3.1、优点 3.2、缺点 一、定义 定义:使用一系列的助记词,利用类名来代表样式。 二、原子化…

.locked勒索病毒解析与防护指南

引言 随着信息技术的飞速发展,网络安全问题日益严峻,其中勒索病毒成为威胁企业和个人数据安全的重要隐患之一。在众多勒索病毒家族中,.locked勒索病毒以其独特的加密方式和广泛的传播途径,引起了广泛的关注。本文将从多个方面详细…

LeetCode42(接雨水)[三种解法:理解动态规划,双指针,单调栈]

接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 这是一道困难题,难度确实有点层次.我们先来朴素思想走一波. 要求能接多少雨水,我们可以具化到每个硅谷,每个硅谷能存多少雨水,那么答案就是每个…

基于 LlamaIndex、Claude-3.5 Sonnet 和 MongoDB,构建具有超级检索能力的智能体

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

算法学习笔记(8)-动态规划基础篇

目录 基础内容: 动态规划: 动态规划理解的问题引入: 解析:(暴力回溯) 代码示例: 暴力搜索: Dfs代码示例:(搜索) 暴力递归产生的递归树&…

easily-openJCL 让 Java 与显卡之间的计算变的更加容易!

easily-openJCL 让 Java 与显卡之间的计算变的更加容易! 开源技术栏 本文介绍了关于在 Java 中 easily-openJCL 的基本使用!!! 目录 文章目录 easily-openJCL 让 Java 与显卡之间的计算变的更加容易!目录 easily-op…

【ARMv8/v9 GIC 系列 2.4 -- GIC SGI 和 PPI 中断的启用配置】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 GIC SGI 和 PPI 中断的使能配置GICR_ISENABLER0 操作使用举例SummaryGIC SGI 和 PPI 中断的使能配置 GICR_ISENABLER0寄存器(中断设置-使能寄存器0)用于启用相应的SGI(软件生成中断)或PPI(专用外设中断)向CPU接口的转发。每个…

Vue3中drawer组件无法重新回显数据

不做drawer的时候数据是可以正常回显的,点击详情id是正常传值的,但是使用了drawer组件以后发现只会调用一次详情功能,以后不管点击哪条信息都不会刷新信息永远都是第一条的信息,但是id刷新成功了,后来发现是没有加v-if…

HTML5新增的input元素类型:number、range、email、color、date等

HTML5 大幅度地增加与改良了 input 元素的种类,可以简单地使用这些元素来实现 HTML5 之前需要使用 JavaScript 才能实现的许多功能。 到目前为止,大部分浏览器都支持 input 元素的种类。对于不支持新增 input 元素的浏览器,input 元素被统一…

数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比

开源生态 众所周知,MySQL主备库(两节点)一般通过异步复制、半同步复制(Semi-Sync)来实现数据高可用,但主备架构在机房网络故障、主机hang住等异常场景下,HA切换后大概率就会出现数据不一致的问…

动感剧场设计师:打造流畅而生动的三维动画和特效

三维画图软件是设计领域必不可少的工具,它可以创建非常精确的三维模型,能够帮助设计师直观感受产品的外观,随时进行编辑和调整。与传统的三维画图软件相比,的三维画图软件无需进行安装步骤,节省时间又节省内存。本文将…

docker安装以及简单使用

如何安装安装 yum install -y yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 列出可用的版本 yum list docker-ce.x86_64 --showduplicates | sort -r yum install -y docker-ce-23.0.6-1.el8 #开机自动启动 …

高创新 | CEEMDAN-VMD-GRU-Attention双重分解+门控循环单元+注意力机制多元时间序列预测

目录 效果一览基本介绍模型设计程序设计参考资料 效果一览 基本介绍 高创新 | CEEMDAN-VMD-GRU-Attention双重分解门控循环单元注意力机制多元时间序列预测 本文提出一种基于CEEMDAN 的二次分解方法,通过样本熵重构CEEMDAN 分解后的序列,复杂序列通过VMD…

BFS:边权相同的最短路问题

一、边权相同最短路问题简介 二、迷宫中离入口最近的出口 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:const int dx[4]{1,-1,0,0};const int dy[4]{0,0,1,-1};int nearestExit(vector<vector<char>>& maze, vector<int>& e…

思路打开!腾讯造了10亿个角色,驱动数据合成!7B模型效果打爆了

世界由形形色色的角色构成&#xff0c;每个角色都拥有独特的知识、经验、兴趣、个性和职业&#xff0c;他们共同制造了丰富多元的知识与文化。 所谓术业有专攻&#xff0c;比如AI科学家专注于构建LLMs,医务工作者们共建庞大的医学知识库&#xff0c;数学家们则偏爱数学公式与定…

p11函数和递归

递归与迭代 求n的阶乘。&#xff08;不考虑溢出&#xff09; int Fac1(int n) {int i0;int ret1;for(i1;i<n;i){ret*i;}return ret; } int main(){//求n的阶乘int n0;int ret0;scanf("%d",&n);retFac1(n);printf("%d\n",ret);return 0; } int Fac…

一.2.(5)共射、共集、共基三种基本放大电路的静态及动态分析;

共什么的问题&#xff1a;共什么取决于输入输出&#xff0c;共剩下的那一极 1.基本共射放大电路 见前面章节&#xff0c;不做累述 2.基本共集放大电路 列KVL方程&#xff0c;求解 AU1&#xff0c;所以又叫射极跟随器 Ib是流入基极的电流&#xff0c;Ii是从输入交流信号源流出的…

昇思25天学习打卡营第11天|文本解码原理-以MindNLP为例

文本解码原理-以MindNLP为例 这篇主要讲讲文本生成的几个方法&#xff0c;首先介绍一下什么是自回归语言模型。 自回归语言模型 autoregressive language model&#xff0c;根据前面的词或上下文&#xff0c;生成后续的词或句子的语言模型。 有几种典型的自回归语言模型&…