【密码学补充知识】

🔑密码学🔒概述

📕 1.基本概念

明文 : 要交换的信息

密文 : 明文经过一组规则变换成看似没有意义的随机消息。

加密 : 明文经过一组规则变换成密文的过程

解密 : 密文恢复出明文的过程

加密和解密都需要一个密钥来完成。

根据密钥的特点,密码体制可以分文两类

对称密码体制(单钥密码体制: 加密密钥和解密密钥相同,或者从一个密钥很容易推导出另外一个密钥。密码需要保密,所以对称密码体制又叫私钥密码体制

非对称密码体制 (双钥密码体制,公钥密码体制): 加密密钥和解密密钥不相同,并且从一个密钥很难推导出另外一个密钥。加密密钥可以公开,所以非对称密码体制又叫公钥密码体制

📕 2.密码体制

一个密码体制通常包括5部分

(1) 明文空间 M :全体明文m的集合;

(2) 密文空间 C : 全体密文c的集合;

(3) 密钥空间 K : 全体密钥的集合 ; 在具体的一次加密过程中,加密密钥ke和解密密钥kd都来自该空间,密钥空间不同密钥的个数称为密码体制的密钥量,通常来说:密钥量越大,密码体制的安全强度越高。

(4) 加密算法 E : 由加密密钥控制的加密交换的

(5) 解密算法 D : 由加密密钥控制的加密变换的集合。

一个密码体制要满足一致性,即如果

🌼

那么

🌼

👮‍安全性要求

保密性:信息只为授权用户使用,不能泄漏给未授权的用户。

完整性:信息在传输或者储存过程中,不能被偶然或者蓄意地破坏(删除,修改,伪造,重放,插入等)和丢失。

认证性:确保通信方的确是服务方认证地那位。

        认证方法分为: 实体认证和消息认证。实体认证指的是 确认一个实体的身份;消息认证 指的是 确认一个消息地来源。(arp欺骗就是破坏了认证性)

不可否认性:防止通信方对以前的许诺或者行为否认

🔪密码分析(攻击方法)

🔪(1)穷举分析:

通过试遍密钥空间中的所有密钥来对密文进行界面,直至得到正确的明文。

应对方法: 增加密钥空间的密钥量,但是也只能增加密码体制的安全强度,不能绝对安全。

🔪(2)统计分析攻击

通过分析明文和密文的统计规律来破译密码体制。

该方法对破译古典密码体制很有效,但是相应的也有其他密码体制。

🔪(3)数学分析攻击

针对加解密算法的数学基础和密码学性质,通过数学求解的方法来破解密码体制

🛠密码体制评估

👮‍(1)无条件安全性

如果一个具有无限计算资源的敌手都不能破译一个密码体制,则这种体制是无条件安全的。一次一密方法在唯密文攻击下可以达到无条件安全,但是一次一密是指每次加密一个信息 的时候都用不同的密钥,会消耗高额的密钥分配成本。 显然不实用。

👮‍(2)计算安全性

如果使用最好的算法来破译一个密码体制所需要的计算代价远远超过敌手的计算资源,则成这个体制是计算安全的。

👮‍(3)可证明安全性

如果一个密码体制的安全性可以规约为 某个数学问题,且这个数学问题是难解的,则这个密码体制是可证明安全的。

☞ 现代密码学的目标

(1) 一个密钥可以重复使用,不是每次使用后就更换新的密钥

(2) 一个短密钥可以加密长明文,密钥的长度比明文短。

也就是说,🙋‍在大多数情况下,我们只要保证计算安全性即可

🔢 2.数字签名

📕基本概念

产生原因:

在电子世界,人们希望用某种方法代替手写签名,实现对数字信息的签名。

数字签名的特性:

※(1)不可伪造性: 除了签名者,任何人不能伪造签名者的合法签名。

※(1)认证性:接收者相信这份签名来自签名者。

※(1)不可重复使用性:一个消息的签名不能用于其他信息

※(1)不可否认性: 签名者事后不能否认自己的二千米

※(1)不可修改性:一个消息在签名后不能被修改。

分类:

按用途分:

=》普通数字签名

=》具有特殊用途的数字签名(如: 盲签名)

=》不可否认签名

=》群签名

=》代理签名

按是否具有消息恢复功能

=》具有消息恢复功能的数字签名

=》不具有消息恢复功能的数字签名

按是否使用随机数

=》确定性数字签名

=》随机化数字签名

📕 RSA数字签名

RSA密码体制可以用来加密,也可以用于数字签名

1.参数与密钥生成

(1)选取两个保密的大素数 p,q 。

(2)计算 n=pq ,Ψ(n)=(p-1)(q-1),其中Ψ(n)是n的欧拉函数值。

(3)随机选取证书e ,1<e<Ψ(n),且满足gcd(e,Ψ(n))=1。(gcd 最小公因数函数)

(4)计算d ,满足de=1 mod  Ψ(n) 。

(5)公钥为 (e,n) 私钥为 d 。

2.签名

对于消息m∈Zn,签名为 

3.验证

对于消息签名对  (m,e) ,如果有

则   s 是 m的有效签名

🆔3.身份识别

📕 概念

让验证者(V: Verifier)相信正在与之通信的另一方(P:Prover)就是所称的那个实体,目的是方式假冒。

一个安全的身份识别协议应该满足三个条件 :

(1)P 能向 V 证明 他的确是P

(2)P向V证明身份后,V没有获得任何有用测定信息,P不能假冒成 V

(3)除了P以外的第三者 以P的身份执行该协议,能够让V相信他是P的概论可以忽略不记。

(想到ARP欺骗没 (*^_^*)  )

身份识别分为 两类:

(1)弱识别 : 使用口令、口令段、口令驱动的密钥来证明自己的身份

(2)强识别 :通过向验证者展示与证明者实体有关的秘密信息来证明自己的身份。这种识别通常通过挑战-应答方式进行,挑战是指一方随机地选取一个秘密数发送给另一方,而应答是对挑战的回答。应答与实体的秘密信息及对方挑战有关系。

📕 Guillou-Quisquater身份识别方案

1988年, Guillou 和 Quisquater 提出了基于 RSA 密码体制安全性的身份识别方案。

1.系统初始化
 Guillou - Quisquater 身份识别方案需要一个信任权威 TA 。 TA 选择两个大素数计算 n = pq ,确定自己的签名算法 
和 Hash 函数 h 。 TA 还要选取一个长度为40bit  的素数 b 作为自己的公钥,计算私钥 公开参数为 n 、 b 、 h 、
2. TA 向 P 颁发身份证书
(1) TA 为 P 建立身份信息 IDp 。
(2) P 秘密选取一个整数 u ,0≤ u ≤ n -1且 ged ( u , n )=1,计算:


并将 v 发送给 TA 。
(3) TA 计算签名 s = SigTA ( IDp , v ),将证书 C ( P )=( IDp , v , s )发送给 P 。
3.P向 V 证明其身份
(1) P 随机选取整数 k ,1≤ k ≤ n -1,计算:



并将证书 C ( P )和r发送给 V 。
(2) V 验证 s 是否是 TA 对( IDp , v )的签名。如果是, V 随机选取整数 r ,0≤ r ≤ b -1,
并把它发送给 P 。
(3) P 计算:


并将 C(p) 和y发送给 V 。
(4) V 验证是否有:



成立。如果成立, V 就接受 P 的身份证明;否则拒绝 P 的身份证明
在 Guillou - Quisquater 身份识别方案中,由于 P 掌握了秘密信息 u ,对于任何挑战,
 P 都可以在步骤(3)中计算 y 使得


成立。如果一个攻击者 C 能够猜测出 V 随机选取的整数 r ,则 C 可以任意选取一个 y ,计算:

在步骤(1)中, C 将 y 发送给 V ,在步骤(3)中, C 将 y 发送给 V 。最后,在步骤(4)中, V -定能够验证:

成立, V 接受 C 的身份证明,从而 C 成功地冒充了 P 。攻击者 C 能够猜测随机数,的概率为1/b。因为6是一个很大的整数,所以 C 想成功冒充 P 的概率非常小。
 

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

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

相关文章

基于 MATLAB 的电力系统动态分析研究【IEEE9、IEEE68系节点】

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

linux-如何用起来ubuntu

1 Oracle VM VirtualBox安装ubuntu20.04虚拟机 【工具】->【新建】 1.1 虚拟电脑名称和系统类型 【名称】&#xff1a;自定义名称即可 【文件夹】&#xff1a;虚拟机文件将要存储的路径 【虚拟光盘】&#xff1a;将要安装的虚拟机iso文件 1.2 自动安装 【用户名】&…

uniapp:tabBar点击后设置动画效果

APP端不支持dom操作&#xff0c;也不支持active伪类&#xff0c;绞尽脑汁也没办法给uniapp原生的tabBar点击加动画效果&#xff0c;所以最终只能舍弃原生tabBar&#xff0c;改用自定义tabBar。 自定义tabBar的原理是&#xff0c;页面的上部分分别是tabBar对应的页面组件&#…

什么是Selenium?使用Selenium进行自动化测试!

你知道什么是 Selenium 吗&#xff1f;你知道为什么要使用它吗&#xff1f;答案就在本文中&#xff0c;很高兴能够与你共飧。 自动化测试正席卷全球&#xff0c;Selenium 认证是业界最抢手的技能之一。 什么是 Selenium&#xff1f; Selenium 是一种开源工具&#xff0c;用于…

400电话申请流程详解,助您快速办理联通、移动、电信400电话

导语&#xff1a;随着企业业务的发展&#xff0c;越来越多的企业开始关注400电话的申请与办理。本文将为您详细介绍联通、移动、电信400电话的申请流程&#xff0c;帮助您快速办理400电话&#xff0c;提升企业形象和客户服务质量。 一、联通400电话申请流程 咨询与选择&#x…

孤网双机并联逆变器下垂控制策略MATLAB仿真模型

微❤关注“电气仔推送”获得资料 主体模块&#xff1a; 建议使用MATLAB2021b及以上版本打开&#xff01; 功率计算模块、下垂控制模块、电压电流双环控制模块 系统输出有功功率: 系统输出无功功率&#xff1a; 系统频率变化曲线: 参考文献&#xff1a; 微电网并网运行模式下…

arcgis搭建离线地图服务WMTS

Arcgis搭建离线地图服务WMTS 发布时间&#xff1a;2021-03-04 版权&#xff1a; ARCGIS搭建离线地图服务器&#xff0c;进行离线地图二次开发 2. 离线地图服务发布&#xff08;WMTS服务&#xff09; &#xff08;详细教程&#xff1a;卫星地图_高清卫星地图_地图编辑_离线地…

数据结构上机1

1、题目&#xff1a; 将1~10存入数组a[10]&#xff0c;并将其逆序输出 #define _CRT_SECURE_NO_WARNINGS 1 //(1) 将1~10存入数组a[10]&#xff0c;并将其逆序输出#include <stdio.h>int main() {int a[10];// 将1到10存入数组a[10]for (int i 0; i < 10; i){a[i] i…

Day 02 python学习笔记

python运算符 算术运算符 混合运算的优先级&#xff1a; () 高于 ** * / // % 高于 - 赋值运算符 - * / ** a 1 > a 3 > a a 3 其余同理 注意&#xff1a; python没有自增自减 &#xff08;a a a-- --a&#xff09;…

ad18学习笔记十一:显示和隐藏网络、铺铜

如何显示和隐藏网络&#xff1f; Altium Designer--如何快速查看PCB网络布线_ad原理图查看某一网络的走线_辉_0527的博客-CSDN博客 AD19(Altium Designer)如何显示和隐藏网络 如何显示和隐藏铺铜&#xff1f; Altium Designer 20在PCB中显示或隐藏每层铺铜-百度经验 AD打开与…

404. 左叶子之和

给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 24示例 2: 输入: root [1] 输出: 0 //bfs …

4年从外包到外企,一个测试老鸟的自述

4年前&#xff0c;我拖着行李箱来到北京&#xff0c;成为了一名北漂&#xff0c;离开了校园的庇护&#xff0c;只身一人&#xff0c;想要在这片陌生的地方闯出一番名堂&#xff0c;可最后却不得人意&#xff0c;面临着所有北漂群体的共同困局&#xff0c;没有归属感&#xff0c…

一文搞懂 this 指向

目录 一、前言二、箭头函数三、new指向四、bind五、call和apply六、bind call apply区别七、对象&#xff08;obj.&#xff09;八、全局this指向九、不在函数里 一、前言 JS 中 this 指向问题 - 掘金 在JavaScript中&#xff0c;this关键字表示当前执行代码的上下文对象。它的…

【Vue.js】使用Element搭建首页导航左侧菜单

目录 Mock.js 是什么 有什么好处 安装mockjs ​编辑 引入mockjs mockjs使用 login-mock Bus事物总线 首页导航栏与左侧菜单搭建 结合总线完成组件通讯 Mock.js 是什么 Mock.js是一个用于生成随机数据的模拟数据生成器。它可以帮助开发人员模拟接口请求&#xff0c;生…

10.正则表达式匹配

10.正则表达式匹配 上述5种可匹配情况的举例&#xff0c;便于理解&#xff1a; 1、a与ab星号是匹配的&#xff0c;分析&#xff1a;a与a匹配&#xff0c;让 b星号看作出现0次。 2、abb与ab*匹配&#xff0c;分析&#xff1a;ab与ab星号匹配&#xff0c;让b多出现1次时&#xff…

如何通过优化Read-Retry机制降低SSD读延迟?

近日,小编发现发表于2021论文中,有关于优化Read-Retry机制降低SSD读延迟的研究,小编这里给大家分享一下这篇论文的核心的思路,感兴趣的同学可以,可以在【存储随笔】VX公号后台回复“Optimizing Read-Retry”获取下载链接。 本文中主要基于Charge Trap NAND架构分析。NAND基…

多线程进阶:Callable和JUC的常见类

Callable 这是一个接口&#xff0c;类似于Runnable。 Runnable用来描述一个任务&#xff0c;描述的任务没有返回值。 Callable也是用来描述一个任务&#xff0c;描述的任务是有返回值的。 如果需要使用一个线程单独的计算出某个结果来&#xff0c;此时用Callable是比较合适…

爬虫异常处理实战:应对请求频率限制和数据格式异常

作为一名资深的爬虫程序员&#xff0c;今天我要和大家分享一些实战经验&#xff0c;教你如何处理爬虫中的异常情况&#xff0c;包括请求频率限制和数据格式异常。如果你是一个正在进行网络爬虫开发的开发者&#xff0c;或者对异常处理感兴趣&#xff0c;那么这篇文章将帮助你更…

【李沐深度学习笔记】基础优化方法

课程地址和说明 基础优化方法p2 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 基础优化方法 在讲具体的线性回归实现之前&#xff0c;要先讲一下基础的优化模型的方法 梯度下降 当模型没有显示解&#xff08…

Rust之自动化测试(二):控制测试如何运行

开发环境 Windows 10Rust 1.72.1 VS Code 1.82.2 项目工程 这里继续沿用上次工程rust-demo 控制测试如何运行 正如cargo run编译您的代码&#xff0c;然后运行生成的二进制文件一样&#xff0c;cargo test在测试模式下编译您的代码&#xff0c;然后运行生成的测试二进制文件…