图解系列--密钥,随机数,应用技术

密钥

1.生成密钥
1.1.用随机数生成密钥
密码学用途的伪随机数生成器必须是专门针对密码学用途而设计的。
1.2.用口令生成密钥
一般都是将口令输入单向散列函数,然后将得到的散列值作为密钥使用。
在使用口令生成密钥时,为了防止字典攻击,需要在口令上面附加一串称为盐的随机数,然后再将其输入单向散列函数。这种方法称为“基于口令的密码” 。
1.3.更新密钥
有一种提高通信机密性的技术被称为密钥更新,这种方法就是在使用共享密钥进行通信的过程中,定期改变密钥。
在更新密钥时,发送者和接收者使用单向散列函数计算当前密钥的散列值,并将这个散列值用作新的密钥。简单说,就是用当前密钥的散列值作为下一个密钥。
1.4.保存密钥
会话密钥在通信过程中仅限使用一次,因此我们不需要保存这种密钥。然而,当密钥需要重复使用时,就必须要考虑保存密钥的问题了。
1.5.Diffie-Hellman密钥交换
使用这种算法,通信双方仅通过交换一些可以公开的信息就能够生成出共享的秘密数字,而这一秘密数字就可以被用作对称密码的密钥。实际上双方并没有真正交换密钥,而是通过计算生成出了一个相同的共享秘钥。
1.5.1.Diffie-Hellman 密钥交换的步骤
在这里插入图片描述
(1).Alice向Bob发送两个质数P和G
P必须是一个非常大的质数,而G则是一个和P相关的数,称为生成元。P和G不需要保密,被窃听者Eve获取也没关系。
(2).Alice生成一个随机数A
A 是一个1 ~ P - 2 之间的整数。这个数是一个只有Alice知道的秘密数字。
(3).Bob生成一个随机数B
B是一个1 ~ P - 2 之间的整数。这个数是一个只有Bob知道的秘密数字。
(4).Alice 将 G A m o d P G^A mod P GAmodP这个数发送给Bob
这个数让Eve知道也没关系。
(5).Bob 将 G B m o d P G^B mod P GBmodP这个数发送给Alice
这个数让Eve知道也没关系。
(6).Alice用Bob发过来的数计算A次方并求mod P
Alice计算的密钥= ( G B m o d P ) A m o d P (G^B mod P)^A mod P (GBmodP)AmodP= ( G B ∗ A m o d P ) (G^{B*A}mod P) (GBAmodP)
(7).Bob用Alice发过来的数计算B次方并求mod P
Bob计算的密钥= ( G A m o d P ) B m o d P (G^A mod P)^B mod P (GAmodP)BmodP= ( G B ∗ A m o d P ) (G^{B*A}mod P) (GBAmodP)

1.5.2.Eve能计算出密钥吗
在步骤(1)~(7)中,双方交换的数字(即能够被窃听者Eve知道的数字) 一共有4个: P 、 G 、 G A m o d P 和 G B m o d P P、 G 、G^A mod P 和 G^B mod P PGGAmodPGBmodP。根据这4个数字计算出Alice和Bob的共享密钥 ( G A × B m o d P ) (G^{A×B} mod P) (GA×BmodP)是非常困难的。

如果仅仅是 G A G^A GA的话,要计算出A并不难,然而根据 G A m o d P G^A mod P GAmodP计算出A 的有效算法到现在还没有出现,这个问题称为有限域的离散对数问题。而有限域的离散对数问题的复杂度正是支撑 Diffie-Hellman 密钥交换算法的基础。

1.5.3.生成元的意义
在这里插入图片描述
我们可以发现 2 1 2^1 21 2 12 2^{12} 212的值(共12个)全都不一样。也就是说,2的乘方结果中出现了1到12的全部整数。由于2具备上述性质,因此称为13的生成元。同样地,6、7和11也是生成元。

也就是说,P的生成元的乘方结果与1 ~ P - 1 中的数字是一一对应的。正是因为具有这样一一对应的关系,Alice才能够从1~ P-2的范围中随机选择一个数字(之所以不能选择P-1,是因为 G P − 1 m o d P G^{P-1} mod P GP1modP的值一定是等于1的)。

1.6.基于口令的密码
基于口令的密码就是一种根据口令生成密钥并用该密钥进行加密的方法。其中加密和解密使用同一个密钥。
1.6.1. PBE加密
在这里插入图片描述
(1).生成KEK
首先,伪随机数生成器会生成一个被称为盐的随机数。将盐和Alice输入的口令一起输入单向散列函数,得到的散列值就是用来加密密钥的密钥(KEK)。
(2).生成会话密钥并加密
我们使用伪随机数生成器生成会话密钥。会话密钥是用来加密消息的密钥 (CEK)。
会话密钥需要用刚才步骤(1)中生成的KEK进行加密,并和盐一起保存在安全的地方。会话密钥加密之后,KEK就会被丢弃,因为KEK没有必要保存下来,只要通过盐和口令就可以重建 KEK。
(3).加密消息
(4).保存
“盐”和“用KEK加密的会话密钥”需要保存在安全的地方。

1.6.2.PBE解密
(1).重建KEK
我们将之前保存下来的盐,和Alice输入的口令一起输入单向散列函数。这个计算过程和生成 KEK时的计算过程是一样的,因此所得到的散列值就是KEK。
(2).解密会话密钥
我们获取之前保存下来的“用KEK加密的会话密钥”,用步骤(1)中恢复的KEK进行解密。这一步我们可以得到会话密钥。
(3).解密消息
在这里插入图片描述
1.6.3.盐的作用
盐是用来防御字典攻击的。字典攻击是一种事先进行计算并准备好候选密钥列表的方法。

我们假设在生成KEK的时候没有加盐。那么主动攻击者 Mallory 就可以根据字典数据(各种可能口令)事先生成大量的候选KEK。
在这里,事先是很重要的一点。这意味着Mallory可以在窃取到加密的会话密钥之前,就准备好了大量的候选KEK 。当 Mallory 窃取加密的会话密钥后,就需要尝试将它解密,这时只要利用事先生成的候选KEK,就能够大幅缩短尝试的时间,这就是字典攻击。

如果在生成KEK 时加盐,则盐的长度越大,候选KEK的数量也会随之增大,事先生成候选KEK 就会变得非常困难。加盐之后,候选KEK的数量会变得非常巨大。

1.6.4.口令的作用
在使用基于口令的密码时,需要将盐和加密后的CEK通过物理方式进行保护。例如可以将盐和加密后的CEK保存到存储卡中随身携带。

1.6.5.通过拉伸来改良PBE
将单向散列函数进行多次迭代的方法称为拉伸。

1.6.6.如何生成安全的口令
(1).使用只有自己才能知道的信息
(2).将多个不同的口令分开使用
(3).有效利用笔记
用伪随机数生成器生成一个随机的字符串作为口令,然后将口令记下来保存在安全的地方。换言之, 应该将笔记与物理的钥匙同等对待。仅将口令的一部分写下来的方法也是非常有效的。
(4).理解口令的局限性
(5).使用口令生成和管理工具

随机数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【追求卓越13】算法--深度和广度优先算法

引导 前面的几个章节,我们介绍了树这种数据结构,二叉搜索树在进行查找方面比较高效;有二叉树演变来的堆数据结构在处理优先级队列,top K,中位数等问题比较优秀;今天我们继续介绍新的数据结构——图。它在解…

【20年扬大真题】编写程序,功能是给a数组输入30个数据,并以每行5个数据的形式输出

【20年扬大真题】编写程序&#xff0c;功能是给a数组输入30个数据&#xff0c;并以每行5个数据的形式输出 #include<stdio.h> int main() {int arr[30] { 0 };int i 0;printf("请输入30个数据&#xff1a;");for (i 0;i < 30;i){scanf("%d", …

C语言—指针入门

内存存放数据 如果发送指令&#xff0c;读取f变量的内容&#xff0c;则先找f - >10005这个字节&#xff0c;然后再找到123。 指针和指针变量 通常说的指针就是地址的意思&#xff0c;C中有专门的指针变量存放指针。一个指针占4个字节。 定义指针变量 类型名 *指针变量名…

童装店铺如何通过软文增加客流量

在信息超负载、媒介粉尘化、产品同质化多重因素下&#xff0c;传统营销疲态尽显、日渐式微&#xff0c;很难支撑新环境下品牌和企业的持续增长。聚焦童装行业更是如此&#xff0c;一方面用户迭代速度快&#xff0c;另一方面&#xff0c;新时代父母的育儿观念更加精细化&#xf…

跨境电商客服系统:提升客户满意度与优化电商体验的关键

随着全球电子商务的快速发展&#xff0c;跨境电商已经成为新的商业发展趋势。在这个高度竞争的市场环境中&#xff0c;优质的客户服务成为区分优秀与平庸的关键因素。一个高效的跨境电商客服系统不仅可以提高客户满意度&#xff0c;还能帮助企业优化电商体验&#xff0c;进而提…

电商领域的三大沉疴难题?实在智能RPA来帮你药到病除!

在电商市场规模迅速扩大的当下&#xff0c;厂家们为了保持自身的竞争力&#xff0c;纷纷走上了数智化转型的道路&#xff0c;明白学会使用自动化利器才是制胜之道。 如今从产业的生产线到运营商、物流运输、商品售前、商品售后&#xff0c;实在RPA在电商平台的应用已经十分广泛…

【EI会议征稿】第九届能源科学与化学工程国际学术研讨会 (ISESCE 2024)

第九届能源科学与化学工程国际学术研讨会 &#xff08;ISESCE 2024&#xff09; 2024 9th International Symposium on Energy Science and Chemical Engineering 第九届能源科学与化学工程国际学术研讨会&#xff08;ISESCE 2024&#xff09;定于2024年3月22-24日在中国南京…

创建 Springboot 项目

前言 创建 Spring Boot 项目是很多Java开发人员入门的重要一步&#xff01; 欢迎来到本篇关于创建 Spring Boot 项目的博客&#xff01;Spring Boot作为一个快速、便捷的开发框架&#xff0c;为我们提供了简化和加速应用程序开发的利器。 在这个数字化时代&#xff0c;快速响…

java的继承特性和方法重写

java的继承特性和方法重写 Java的继承特性是一种面向对象编程的重要概念&#xff0c;它允许我们基于已有的类创建新的类&#xff0c;并且保留了已有的类的一些特性。这是通过使用"继承"这个关键词来实现的&#xff0c;新创建的类称为子类&#xff08;subclass&#…

计算机系统的存储原理

文章目录 高速缓存存储设备的层次结构操作系统的两个基本功能参考 高速缓存 高速缓存至关重要。 helloworld 程序揭示了一个重要的问题&#xff1a;系统花费了大量的时间把信息从一个地方挪到另一个地方。 程序的机器指令最初是存放在磁盘上&#xff0c;当程序加载时&#xf…

Linux之进程替换

创建子进程的目的 创建子进程的第一个目的是让子进程执行父进程对应的磁盘代码中的一部分, 第二个目的是让子进程想办法加载磁盘上指定的程序,让子进程执行新的代码和程序 一是让子进程执行父进程代码的一部分, 比如&#xff1a; 1 #include<stdio.h> 2 #include<…

【中间件】服务化中间件理论intro

中间件middleware 内容管理 intro服务化middleware架构注册中心intro服务治理系统intro 本文主要intro服务化中间件的探讨 去年cfeng写了一篇博客走马观花般阐述了Spring Cloud下面的各种中间件&#xff0c;连深入使用都谈不上&#xff0c;只能说intro&#xff0c;在实际work中…

时态图根据时间轴动态播放热力图

效果图如下&#xff1a; <!DOCTYPE html> <html><head><title>时态图</title><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><!-- 引入样式 --&g…

练习九-利用状态机实现比较复杂的接口设计

练习九-利用状态机实现比较复杂的接口设计 1&#xff0c;任务目的&#xff1a;2&#xff0c;RTL代码3&#xff0c;RTL原理框图4&#xff0c;测试代码5&#xff0c;波形输出 1&#xff0c;任务目的&#xff1a; &#xff08;1&#xff09;学习运用状态机控制的逻辑开关&#xff…

101. 对称二叉树

101. 对称二叉树 题目&#xff1a; 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例&#xff1a; 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输…

【云原生-Kurbernetes篇】 玩转K8S不得不会的HELM

Helm 一、Helm1.1 使用背景1.2 Helm简介1.3 Helm的几个概念1.4 helm2 和 helm3 的区别1.5 chart包的关键组成 二、Helm相关命令2.1 应用管理操作2.2 Helm repository仓库管理命令2.2 Helm chart包管理命令2.3 Helm release(实例) 管理命令2.4 Helm私有仓库管理命令 三、部署He…

react大文件上传

目录 大文件上传优点&#xff1a; 大文件上传缺点: 大文件上传原理&#xff1a; 为什么要用md5 实现流程&#xff1a; 部分代码1&#xff1a; 部分代码2&#xff1a;​ 大文件上传优点&#xff1a; 文件太大分片上传能加快上传速度,提高用户体验能断点续传 如果上次上传失败…

C++:继承

一、继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设计的层次结构&#xff0c…

网络异常检测

随着社交网络、视频流、点对点技术、云计算和 SaaS 的出现&#xff0c;可以肯定地说&#xff0c;现代企业的好坏取决于他们的网络&#xff0c;尤其是在它们提供的带宽和安全性方面。无论是银行保护其数据免遭盗窃&#xff0c;还是商业组织保护其网络免受安全威胁和攻击&#xf…

Linux 中 .tar 和 tar.gz 的区别

1、前言 有时候你会发现&#xff0c;即便是有些拥有 3 年左右工作经验的运维或开发工程师对 .tar 和 .tar.gz 的区别并不是很清楚。.tar 和 .tar.gz 是在 Linux 系统中用于打包和压缩文件的两种常见格式。它们之间的主要区别在于压缩算法和文件扩展名。 2、区别 .tar .tar 是…