【网络安全技术】公钥密码体制

news2024/11/29 3:56:55

一、两种基本模型

1.加密模型

A要给B发信息,那就拿B的公钥加密,传给B,B收到后会拿他自己的私钥解密得到明文。

2.认证模型(数字签名)

A用自己的私钥加密,传输之后,别人拿A的公钥解密,如果解密成功,那就可以说明这条信息是A发的。

二、公钥密码体制数学基础

1.单向函数

1)给定x,正着计算y=f_{k}(x)是容易的

2)给定y,逆着计算y=f{_{k}}^{-1}(x)是不可行的

就比如说大整数分解,在数很大的时候,要遍历所有所有比它小的素数,这被认为是困难的。

三、Diffie-Hellman

这个和上面提到的标准的公钥模型有区别,这个算法简单来说,就是双方通过一个公共的信息(q,a),计算得到一个只有他们两人知道的共享密钥k。

1.首先a和b共享两个全局参数q和a,q是个素数,a是q的本原根。

本原根:a是q的本原根,那么a的1到q-1次方分别模q,分别得到不同的数。

2.然后a和b分别各自选一个数X_{A}X_{B},都小于q,作为各自的私钥。

3.他们分别用X_{A}X_{B}算各自的公钥,公钥=a的密次幂模q

Y_{A}=a^{X_{A}}\ mod\ qY_{B}=a^{X_{B}}\ mod\ q,并发送给对方,这个计算就相当于单向函数中的正着算,被认为是容易的。

4.a和b收到对方的发来的公钥后,计算共享密钥,共享密钥=公共的密次幂模q

对于a来说,K=(Y_{B})^{X_{A}}\ mod\ q

对于b来说,K=(Y_{A})^{X_{B}}\ mod\ q 

这两个算出来的k是相等的,双方就有了共享密钥,这个密钥可以用来例如作为AES的密钥。

四、中间人攻击Man in the Middle attack

先看左半边,a选定私钥之后,计算自己的公钥发给b,这个信息被大司截获,大司选定一个私钥,用这个私钥计算公钥,还给a。a用大司给他的公钥计算出k2来,之后就用k2来加密例如AES了。

然后右半边,b选定私钥之后,计算自己的公钥发给a,大司也把他截获了,自己选定另一个私钥,计算公钥还给b。b拿大司给他的公钥算出来k1,之后就用k1来加密了。

这样,大司要计算k1=b的公钥的密次幂,k2=a的公钥的密次幂,所以它是有k1和k2的,之后a和b所有的数据通信对大司来说都是透明的了。

这个问题的根本在于,a和b分别不能知道收到的公钥是否是对方发来的,如果a能验证收到的公钥是b发来的,b反之也可以,那么就不会被大司截胡了,因为大司发来的一验证就直接露馅了。

五、RSA算法

这个算法是生成自己的私钥和公钥的算法,就像一开始提到的标准的公钥密码体制,生成自己的私钥和公钥后,别人要给自己发消息,就拿自己的公钥加密,自己收到后拿自己的私钥解密。

1.密钥产生流程

1)选p,q两个不相等的素数。

2)算n=p*q。

3)算phi(n)=(p-1)*(q-1)。

4)选一个和phi(n)互质的数e,1<e<phi(n)

5)拿phi(n)和e算d,de和1模phi(n)同余,简单来说就是d*e模phi(n)=1。这样能算出很多个d,取最小的那个。

6)这样就有了公钥PK={e, n}, 私钥SK={d, n}

别人有了公钥,e和n是算不出来d的,因为d是拿e和phi(n)算的,要求phi(n)就得分解n,这被认为是不可能的。

2.加密:

1)将明文转换为一个数M,M<n

2)密文C=M^{e}\ mod\ n

3.解密:

明文M=C^{d}\ mod\ n

4.与对称加密结合

RSA加密速度比DES慢1000倍,那么加密大量明文就不适用。

考虑用RSA加密密钥,再用对称加密例如AES加密。

考虑以下场景,a要和b通信,那么a就通过RSA生成自己的公私钥,b生成AES加密用的密钥。b将密钥用a的公钥加密,发送给a,a用自己的私钥解密,拿到密钥。

之后双方通信就有共享密钥了。

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

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

相关文章

IMU漂移相关

个人对IMU的漂移一直以来都很困惑&#xff0c;总结整理了这些材料&#xff0c;希望能理清楚一点思路。 总的来讲&#xff0c;IMU的漂移可建模为三部分&#xff0c;随机常值相关漂移白噪声&#xff0c; 但实际使用时&#xff0c;三者都出现的用法很少。严恭敏老师在博客中有相关…

cp没有--exclude选项!Linux复制文件夹时如何排除一些文件?

之前使用tar命令压缩文件将时&#xff0c;使用了–exclude选项排除了一些不需要的文件。现在我想复制一个文件夹&#xff0c;但是其中一些文件不需要复制&#xff0c;此时注意到cp命令居然没有–exclude选项。 rsync可以快速地帮助我们完成相同的事情&#xff0c;命令如下&…

Android Framework学习之Activity启动原理

Android Activity启动原理 Android 13.0 Activity启动原理逻辑流程图如下&#xff1a;

排序——选择排序

基本思想 每一趟在待排序元素中选取关键字最小的元素加入有序子序列。 算法代码 #include <iostream> using namespace std;//选择排序 void SelectSort(int nums[],int n){int i,j,min;for(i0;i<n-1;i){ //一共需要进行 n-1 趟 mini; //记录最小元素的下…

RK3566上运行yolov5模型进行图像识别

一、简介 本文记录了依靠RK官网的文档&#xff0c;一步步搭建环境到最终在rk3566上把yolov5 模型跑起来。最终实现的效果如下&#xff1a; 在rk3566 板端运行如下app&#xff1a; ./rknn_yolov5_demo model/RK356X/yolov5s-640-640.rknn model/bus.jpg其中yolov5s-640-640.r…

【GEE】​3、 栅格遥感影像波段特征及渲染可视化

1、简介 在本单元中&#xff0c;将学习以下内容&#xff1a; 使用遥感传感器捕获的不同类型的能量。如何构建 JavaScript 字典和列表以选择单个栅格波段。如何可视化多波段和单波段栅格的不同组合。 2、背景 在您探索如何将 Google 地球引擎和遥感数据集成到您的研究中时&…

测试员如何快速熟悉新业务?

身处职场&#xff0c;学习新业务在所难免&#xff0c;尤其是测试人员&#xff0c;具备良好的业务知识是我们做好质量保障的前提&#xff0c;不管是职场「新人」还是「老人」&#xff0c;快速熟悉业务的能力都是不可或缺的&#xff0c;这是我们安身立命的根本。 但&#xff0c;…

简答-【1 绪论】

关键字&#xff1a; 数据类型、数据结构定义、递归关键、线性结构、非线性结构、算法特性、算法目标、时间复杂度排序

jQuery案例专题

jQuery案例专题 本学期主要担任的课程是js和jQuery&#xff0c;感觉用到的有一些案例挺有意思的&#xff0c;就对其进行了一下整理。 目录&#xff1a; 电影院的幕帘特效 手风琴特效 星光闪烁 网页轮播图 1.电影院的幕帘特效代码如下 html <!DOCTYPE html > <html…

spring面试题笔记

SpringBoot 有几种读取配置文件的方式 1.value 必须是bean里才能生效&#xff0c;&#xff0c;final或static无法生效 2ConfigurationProperties注解 ConfigurationProperties是springboot提供读取配置文件的一个注解 注意&#xff1a; 前缀定义了哪些外部属性将绑定到类的字…

分布式服务框架设计

目录 服务框架的设计 服务框架的功能 服务框架的性能指标 服务治理需要哪些功能 服务框架的设计 尽管不同的分布式服务框架实现细节存在差异&#xff0c;但是核心功能差异不大&#xff0c;下面的架构图描绘了一个分布式服务框架的整体逻辑架构 总共分为 3 层&#xff1a;1…

带斜杠的能读出来,不带斜杠的读不出来,为什么?

能读出来。 读不出来&#xff0c;为什么呢&#xff1f;

MySQL进阶_5.逻辑架构和SQL执行流程

文章目录 第一节、逻辑架构剖析1.1、服务器处理客户端请求1.2、Connectors1.3、第1层&#xff1a;连接层1.4、第2层&#xff1a;服务层1.5、 第3层&#xff1a;引擎层1.6、 存储层1.7、小结 第二节、SQL执行流程2.1、查询缓存2.2、解析器2.3、优化器2.4、执行器 第三节、数据库…

leetcode每日一题-周复盘

前言 该系列文章用于我对一周中leetcode每日一题or其他不会的题的复盘总结。 一方面用于自己加深印象&#xff0c;另一方面也希望能对读者的算法能力有所帮助。 该复盘对我来说比较容易的题我会复盘的比较粗糙&#xff0c;反之较为细致 解答语言&#xff1a;Golang 周一&a…

ICCV2023 Tracking paper汇总(一)(多目标跟随、单目标跟随等)

一、PVT: A Simple End-to-End Latency-Aware Visual Tracking Framework paper&#xff1a; https://openaccess.thecvf.com/content/ICCV2023/papers/Li_PVT_A_Simple_End-to-End_Latency-Aware_Visual_Tracking_Framework_ICCV_2023_paper.pdf github&#xff1a; https://…

c#如何把字符串中的指定字符删除

可以使用以下四种方法&#xff1a; 一、使用关键字&#xff1a;Replace public string Replace(char oldChar,char newChar); 在对象中寻找oldChar&#xff0c;如果寻找到&#xff0c;就用newChar将oldChar替换掉。 1、实例代码&#xff1a; 2、执行结果&#xff1a; 二、Rem…

centos7中多版本go安装

安装go的方式 官网下载tar.gz包安装 # 1.下载tar包 wget https://go.dev/dl/go1.18.1.linux-amd64.tar.gz # 2.解压tar包到指定路径 tar -xvf go1.18.1.linux-amd64.tar.gz -C /usr/local/go1.18 # 3.配置环境变量&#xff0c;打开 /etc/profile 文件添加以下文件每次开机时…

第六章:进制转换与数据存储

系列文章目录 文章目录 系列文章目录前言一、进制二、进制的转换三、原码、反码、补码总结 前言 进制转换是程序员的基本功。 一、进制 进制组成二进制0-1 &#xff0c;满2进1以0b或0B开头十进制0-9 &#xff0c;满10进1八进制0-7&#xff0c;满8进1以数字0开头表示十六进制0…

合肥中科深谷嵌入式项目实战——人工智能与机械臂(六)

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;订阅本专栏前必读关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明作者&#xff1…