应用密码学期末速通复习

news2024/11/25 0:59:58

文章目录

  • 模运算
      • 分数求模
      • 负数求模
      • gcd最大公约数
      • 逆元
  • 分组密码
      • DES加密
      • AES加密
      • 操作模式
        • ECB电子密码本
        • CBC分组链接
        • CFB密码反馈
        • OFB输出反馈
  • 序列密码
      • A5-1算法
      • RC4算法
  • Hash函数
      • Md5算法
      • SHA-1算法
      • 消息认证
      • 数字信封
  • 公钥密码
      • 背包公钥算法
      • RSA公钥算法
      • Rabin公钥算法
      • ElGamal公钥算法
      • ECC公钥算法
  • 数字签名
      • Rsa数字签名
      • ElGamal数字签名
      • Schnorr数字签名
  • 秘钥协商DH算法
  • 秘钥共享门限方案
  • 公钥管理

模运算

分数求模

# 一个例子
1/2 mod 23
n ≡ 1/2 mod 23
2n ≡ 1 mod 23
# 也就是求2的逆元了
n = 12

负数求模

# 一个例子	x mod y ≡ x-y* |⎣x/y⎦|
# 后面的是 x/y并且向下取整
-73 mod 23-73 - 23 * ⎣-73/23⎦
					 = -73 - 23 * ⎣-3.17⎦
					 = -73 - 23 * -4
					 = -73 + 92
					 = 19

gcd最大公约数

请添加图片描述

逆元

# 辗转相除
除数作为被除数、余数作为除数
一直循环除,直到除数为 0
逆元 = 余数不为0的商相乘 + 除数为0的被除数(也就是gcd)

请添加图片描述

分组密码

DES加密

# 分组长度64位,64位秘钥(8位校验位),16轮迭代,每轮子密钥48位
# Feistel网络

# 加密
Li = Ri-1
Ri = Li-1⨁F(ki,Ri-1)
# 解密
Ri-1 = Li
Li-1 = Ri⨁F(ki,Li)

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

# S盒 4行16列,每行都是打乱顺序的0~15,48位8组,每组6位
# 100011,首尾代表行11(3),中间代表列0001(1),所以置换成第3行1列的数字,也就是6位压缩成4位

请添加图片描述

AES加密

........

操作模式

  • ECB最快最简单,安全性最弱,通常加密随机数据

  • CBC适合文件、软件加密,少量错误不会造成同步失败

  • CFB加密字符序列,具有同步恢复

  • OFB极易出错的环境使用,需要严格高速的同步机制

ECB电子密码本

简单,主要内容较短且随机的报文传递
加密独立分组,可以并行
单个分组的比特错误不会传播其他分组
# 相同明文或秘钥得到相同的密文,明文中重复的内容在密文体现出来,容易被统计

请添加图片描述

CBC分组链接

反馈机制,密文不仅依赖明文,还依赖前面的密文分组
正确解密需要确保前面的每个密文分组都是正确的
密文分组中的比特错误传播影响到本组和下一组的解密

请添加图片描述

CFB密码反馈

对信道错误较敏感且造成错误传播
数据加解密的速率降低,其数据率不会太高
主要适用数据库加密、无线电通信或密文信号容易丢失出错的环境

请添加图片描述

OFB输出反馈

克服错误传播带来的问题,但对密文被篡改难于检测
不具有自同步,需要保持严格的同步

请添加图片描述

序列密码

A5-1算法

请添加图片描述

# 三个反馈序列LFSR,长度19、22、23

a1= [18][17][16][13]
a2= [21][20]
a3= [22][21][20][7]

x,y,z = LFSR1[8],LFSR2[10],LFSR3[10]
# (x,y,z)作为忠控函数的输入
# 钟控方式:择多原则,占比多的被驱动,保证至少两个LFSR是被驱动的
010,0更多,所以LFSR1和LFSR3被驱动
101,1更多,所以LFSR1和LFSR3被驱动

请添加图片描述

将得到的 228 bit的密钥流ks分组 k1和k2
手机用 k1对要发送的信息 M加密,基站用 K1解密
基站用 k2对要发送的信息 M加密,手机用 k2解密

请添加图片描述

RC4算法

# 初始状态向量S,256字节,0~255
# 初始秘钥T,不足256字节长度,轮转补充
# T表对S表初始置换
j = 0;
for (i = 0 ; i < 256 ; i++){
  j = (j + S[i] + T[i]) mod 256;
  swap(S[i] , S[j]);
}
# 密钥流生成
i=0;
j=0;
while(datalength--){
  i = (i + 1) mod 256;
   j = (j + S[i]) mod 256;
  swap(S[i] , S[j]);
  t = (S[i] + S[j]) mod 256;
  k = S[t];
   # 加密方法
   c[] = data[] ⨁ k
}

请添加图片描述

Hash函数

Md5算法

迭代模型
输入任意长度数据块,每一次迭代处理512bit的消息分组,最终输出散列值128bit
# 所以必须是512bit的整数倍
消息 + 填充(100...00,一个1, 若干个0,必须被 填充1~512bit) + 消息长度预留空间(64bit)
# 4个初始化缓冲区,用于计算消息摘要的128位缓冲区
A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10
。。。

SHA-1算法

# 填充方法和MD5相同
# 5个初始缓冲区
A: 67 45 23 01
B: ef cd ab 89
C: 98 ba dc fe
D: 10 32 54 76
E: c3 d2 e1 f0 
。。。

消息认证

只对消息完整性认证,但没有对消息来源认证,可以被替换
请添加图片描述

消息认证码:共享秘钥 k

秘钥参与,要篡改必须知道秘钥k

请添加图片描述

CBC-MAC
HMAC-MD5
HMAC-SHA1

CBC-MAC:用相同的Pi、相同的方法、相同的秘钥计算Cn,然后与接收到的Cn比较实现消息认证

请添加图片描述

HMAC:秘钥 K长度填充0,使长度为b比特
Si = k ⨁ ipad ,ipad是一个长度b比特的固定比特串,将 00110110重复b/8次后得到的比特串
作为Hash函数H的输入,得到 t 比特的输出 h
So = k ⨁ opad , opad是一个长度b比特的固定比特串,将 01011010重复b/8次后得到的比特串
和h连接作为第二个 H的输入,得到 t比特的输出,即消息的认证码

请添加图片描述

数字信封

# A 产生一个128bit会话秘钥k
Ek(M,sigA(H(M))),PEB(k) 发送给B,称为数字信封

B 用私钥解密 PEB(k)得到会话秘钥 k,利用 k对Ek(M,sigA(H(M)))解密,得到 M和 sigA(H(M)),用A的公钥解密 sigA得到H(M),计算M的hash,对比 H(M)是否相等

公钥密码

背包公钥算法

b1v1 + b2v2 + b3v3 + ... = c
# b = 1或0,1代表存在这个物品,0代表不存在这个物品
# c 指背包容量
# 总能找到一个子集合作为背包向量的解

**超值增背包问题 **

V = (v1,v2,v3,v4...vn),是一个背包向量
# 满足下一个Vi > 前面i-1个向量之和,这样的序列称为超递增序列
# 比如 1、2、4...2^n

可以发现,超递增序列要找出一个子集合的解还是很容易的。

只需要从后往前找,如果小于 c,那么 bi就置为1,更新 c的值,继续向前找直到 c更新到0,否则就不是存在这样的子集合解。

请添加图片描述

超值增背包问题找到一个子集合的解很容易,但是求解一般的背包问题是困难的。
加密采用一般背包加密是难以求解的,求解的过程如果可以把一般背包问题转变成超递增背包问题,那就很容易求解。

1、产生一个超递增向量 V
2、超递增向量 V转化成非超递增向量 U
3、公钥就是 U
4、私钥就是转化因子 t 和 k

# gcd(t,k)=1  互素,保证t在模k下的乘法逆元t^-1存在
# U = tV mod k = t(v1,v2,v3,v4...vn) mod k

请添加图片描述

# 加密过程前需要先将明文长度按照 U 的长度划分,(b1,b2,b3...bn)
# 计算分组向量内积,BU = b1u1 + b2u2 +b3u3 +...+ bnun
得到密文c
# 利用 k 和 t^-1 还原出超递增背包向量 V
c = BU
V = t^-1U mod k 
# 得到背包容量
ct^-1 mod k = BUt^-1 mod k = BtVt^-1 mod k

请添加图片描述

RSA公钥算法

# 独立选取两个大素数 p 和 q
# n = p * q
# 欧拉函数 𝜑(n) = (p-1)(q-1)
# 随机选取一个e,满足gcd(𝜑(n),e) = 1,1 <e< 𝜑(n)
那么e就存在逆元d
ed = 1 mod 𝜑(n)
# (n,e)作为公钥,d作为私钥
# 加密前先将明文分组长度小于 n的长度
c = m^e mod n
# 解密
m = c^d mod n
# 一个例子
p= 5,q= 11,n= 55,𝜑(n)= 40e= 7,满足 1<e<𝜑(n),且与𝜑(n)互素
得 d= 23
明文m= 531953,分组得m1= 53,m2= 19,m3= 53
# 加密
c1= m^e mod n = 53^7 mod 55 = 37
c2= 19^7 mod 55 = 24
c3= 53^7 mod 55 = 37
# 解密
m1= 37^23 mod 55 = 53
m2= 24^23 mod 55 = 19

Rabin公钥算法

# p=3 mod 4 ,q=3 mod 4, p≠q
# n= p*q
n作为公钥,(p,q)作为私钥
# 加密
c = m^2 mod n
# 解密
m^2 = c mod n
# 等价于
m^2 = c mod p
m^2 = c mod q
# 得到四个方程
m1 = c^[(p+1)/4] mod p
m2 = -c^[(p+1)/4] mod p
m3 = c^[(q+1)/4] mod q
m4 = -c^[(q+1)/4] mod q
# 两两组合根据中国剩余定理求解(m1,m3)、(m1,m4)、(m2,m3)、(m2,m4)
# 得到四个解,是c mod n的平方根,明文就是其中之一  

请添加图片描述
请添加图片描述

ElGamal公钥算法

# 已知素数p ,有限域Zp上的一个本原根g ,Zp*上的整数y
y = g^x mod p
x = logg(y) mod p
# 已知 g、x、p 求y 容易
# 已知 g、y、p 求x 困难

(g、y、p)作为公钥,(x)作为私钥
# 加密
# Zp*上随机取一整数k
c1 = g^k mod p
c2 = my^k mod p
# 密文c = (c1,c2),密文长度扩展为明文长度两倍
# 解密
m = c2(c1^x)^-1 mod p
# c2(c1^x)^-1 = my^k *(g^xk)^-1 = mg^xk * g^-xk = m

请添加图片描述

# 根据加密算法会发现,每次加密的密文不只是和公钥y有关,还与随机数k有关
# 当k泄露时,可以根据 c2 = my^k mod p 得到明文m
# 当k被重复使用时,可以通过 c2/c2' = m/m',假如知道m,那么m'就也是已知的了

ECC公钥算法

y2 + axy +by = x3 + cx2 + dx +e (关于x轴对称)

Abel群,无穷远点作为单位元O

曲线上任意一点P,P⨁O=P

曲线上PQR三点共线,P⨁Q⨁R=O

p(x,y) 的⨁逆元为 -p(x,-y)

P⨁Q⨁R=O,P⨁Q=-R,R(x,y)时,⨁逆元-R(x,-y)

当PQ在一点时,也就是重合时,上面连线交点就不适用了,而是用P点的切线与曲线的交点,R(x,y)时,P⨁Q=-R=(x,-y)

请添加图片描述
请添加图片描述

x3 = k^2-x1-x2 mod p,y3 = k(x1-x3)-y1 mod p
# PQ 不同时:k = (y2-y1)/(x2-x1) mod p
# PQ 相同时(切线需要求导):k = (3x^2 + a)/2y mod p	 
# 椭圆曲线连续的,必须变成离散的点,定义在有限域上,最常见GF(p)
# 不是所有的曲线都适合加密
y^2 = x^3 + ax + b 是最简单的一种加密曲线

Ep(a,b):y^2 = x^3 + ax + b mod p
0 ≤x、y≤ p,p为质数
Ep(a,b),基点g属于Ep的Abel群,取x<p,y=xg
(g、y、p)作为公钥,(x)作为私钥
# 加密
# 取随机整数k
c1 = kg,c2 = m⨁ky
c = (c1,c2)
# 解密
m = c2⨁(-xc1)

请添加图片描述

数字签名

请添加图片描述

Rsa数字签名

(n,e)作为公钥,(p,q,d)作为私钥
# 私钥加密签名,公钥验证

请添加图片描述

ElGamal数字签名

(g,y,p)作为公钥,(x)作为私钥
# 随机数k,gcd(k,𝜑(p))=1
# 签名 s = SIG(m,k)=(y,𝒮)
y = g^k mod p
𝒮 = (m - xy)k^-1 mod 𝜑(p)
# 验证 VER(m,y,s)=true <=> 

请添加图片描述

Schnorr数字签名

p 大素数,q= p-1
g^q = 1 mod p
私钥 x , 1<x<q
公钥 y , y = g^x mod p

# hash函数 H

请添加图片描述
请添加图片描述

秘钥协商DH算法

# 大素数 p,本原元 a
# 1~ p-1 这些数恰好可以通过a的不同幂次 mod p得到 

Ka = Kb

请添加图片描述

中间人

请添加图片描述

秘钥共享门限方案

# 秘钥分成 n个人保管,但是恢复秘钥至少需要 t个人数

# 计算拉格朗日差值公式得到 q(0),也就是D

请添加图片描述
请添加图片描述
请添加图片描述

公钥管理

1、A的请求+时间戳
2、CA私钥加密(B的公钥+A的请求+时间戳)
3、A用CA的公钥解密拿到B的公钥加密(A的ID和随机数N)
4、B解密拿到A的ID,向CA请求A的公钥
5、CA返回A的公钥

请添加图片描述

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

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

相关文章

C/C++刷题DAY2

1.第一题 27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 分析&#xff1a;对于此题&#xff0c;我们使用双指针的方式去写它&#xff0c;需要注意空间复杂度是O&#xff08;1&#xff09;&#xff0c;时间复杂度也是尽量的越低越好&#xff0c;要去需要原地修改数组&a…

Matplotlib设置刻度和刻度标签

Matplotlib在我们之前的所有例子中都自动接管了轴上间隔点的任务。Matplotlib的默认刻度定位器和格式化器在很多常见情况下通常都足够了。可以明确提及刻度线的位置和标签以满足特定要求。 xticks()和yticks()函数将列表对象作为参数。列表中的元素表示将显示刻度的相应操作的位…

nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇

文章目录前言一、对上一篇博文的分析二、配置文件分析1. nginx 官方网址&#xff08;很详细&#xff09;2、配置文件&#xff08;全&#xff09;3、配置文件&#xff08;去掉注释&#xff09;4、讲解a、nginx 配置文件有三部分组成b、全局块c、events块d、http块5、http块中loc…

无脚本自动化测试

在当今的企业环境中&#xff0c;软件测试不再被视为不必要的投资&#xff1b;相反&#xff0c;它已经上升到一种需要而不是奢侈品的水平。随着市场的不断变化和竞争的加剧&#xff0c;企业必须做一些让他们与竞争对手区分开来的事情。 为了使自己与众不同&#xff0c;公司必须…

Dockerfile

Dockerfile指令集 对于Dockerfiel而言&#xff0c;是在学习docker工具里面&#xff0c;最重点的内容&#xff0c;它可以帮助我们生成自己想要的基础镜像。部署一个容器最重要的就是镜像&#xff0c;指令都已经内置好了。 FROM 这个镜像的妈妈是谁&#xff1f;&a…

数据结构每日亿题(四)

复制带随机指针的链表 原题传送门&#xff1a;力扣 题目&#xff1a; 这题的大概意思就是&#xff1a; 有这样一个链表&#xff0c;他比普通的链表多一个成员变量&#xff1a;random指针&#xff0c;这个random指针指向的是这个链表中随机一个地方&#xff0c;这个地方是其它节…

NetSim网络仿真使用及静态路由配置

&#x1f370; 个人主页:__Aurora__ &#x1f35e;如果文章有什么需要改进的地方还请各位大佬指正。 &#x1f349;如果我的文章对你有帮助➡️ 关注&#x1f64f;&#x1f3fb; 点赞&#x1f44d; 收藏⭐️ NetSim网络仿真使用及静态路由配置。 实验要求及其步骤 使用Boson N…

Java面试笔记:Java线程安全的集合类有哪些?线程不安全的集合类有哪些?ArrayList为什么会发生并发修改异常?

一、Java的集合类有哪些&#xff1f; 二、如何定义集合是线程不安全的&#xff1f; 当多个并发同时对线程不安全的集合进行增删改的时候会破坏这些集合的数据完整性&#xff0c;例如&#xff1a;当多个线程访问同一个集合或Map时&#xff0c;如果有超过一个线程修改了A…

3A企业认定有哪些好处?

企业参与申报和认证有什么益处&#xff1f;这个问题可能应该是广大企业参与前最为关心的问题之一了 1、可快速有效提升企业资质、获得国家政府的认可&#xff1b;并将获得由商务部颁发的具有统一编号的牌匾和证书。 2、是企业履约能力、投标信誉、综合实力与竞争力的体现&…

数学建模--优化类模型

目录 一、根据目标函数约束条件类型分类 1、线性规划 ①线性规划模型的一般形式 ​②用MATLAB优化工具箱解线性规划 ③模型分析 2、非线性规划 ①非线性规划的基本概念 ②非线性规划的基本解法 ③二次规划 ④一般非线性规划 二、控制变量类型分类 1、整数规划 …

总结线程安全问题的原因和解决方案

一. 线程安全问题 概念 首先, 线程安全的意思就是在多线程各种随机调度的情况下, 代码不出现 bug 的情况. 如果在多线程调度的情况下, 出现 bug, 那么就是线程不安全. 二. 观察线程不安全的情况 下面我们用多线程来累加一个数, 观察线程不安全的情况: 用两个线程, 每个线程…

树--堆和优先权队列

数据结构中的堆和栈与操作系统内存划分中的堆和栈没有关系 一、堆的定义 一个大小为n的堆是一棵包含n个结点的完全二叉树&#xff0c;其根节点称为堆顶。 根据堆中亲子结点的大小关系&#xff0c;分为大堆和小堆&#xff1a; &#xff08;1&#xff09;最小堆&#xff1a;树中…

高斯原型网络原论文高质量翻译

论文地址&#xff1a;Gaussian Prototypical Networks for Few-Shot Learning on Omniglot 文章目录摘要1 引言1.1 Few-shot learning1.2 高斯原型网络2 相关工作3 方法3.1 编码器3.2 偶发性训练3.3 定义一个类3.4 评估模型4 数据集5 实验5.1 协方差估计的用法6 结论摘要 我们…

万字长文解读计算机视觉中的注意力机制(附论文和代码链接)

文中论文和代码已经整理&#xff0c;如果需要&#xff0c;点击下方公众号关注&#xff0c;领取&#xff0c;持续传达瓜货 所向披靡的张大刀 注意力机制是机器学习中嵌入的一个网络结构&#xff0c;主要用来学习输入数据对输出数据贡献&#xff1b;注意力机制在NLP和CV中均有使…

目标检测算法——YOLOv5/YOLOv7改进之结合无参注意力SimAM

目录 &#xff08;一&#xff09;前言介绍 1.摘要 2.不同注意力步骤比较 &#xff08;二&#xff09;相关实验 &#xff08;三&#xff09;YOLOv5结合无参注意力SimAM 1.配置.yaml文件 2.配置common.py 3.修改yolo.py SimAM&#xff1a;无参数Attention助力分类/检测/分…

点云应用——三维空间边界点排序+机器人轨迹引导(1)

三维空间边界点排序机器人轨迹引导一、前言二、思路一&#xff1a;利用重建思路三、思路二&#xff1a;利用PCL边界提取方法三维空间点排序四、后续一、前言 最近做了点云边界提取、并实时发送至机器人进行引导的研究&#xff0c;主要遇到了两个问题&#xff1a; 1&#xff09;…

Python画爱心——一颗会跳动的爱心~

节日就快到来了&#xff0c;给你的Ta一个惊喜吧~ 今天给大家分享一个浪漫小技巧&#xff0c;利用Python制作一个立体会动的心动小爱心 成千上百个爱心汇成一个大爱心&#xff0c;从里到外形成一个立体状&#xff0c;给人视觉上的冲击感&#xff01;浪漫极了↓ 微信扫码添加&a…

CUDA 从入门到放弃(一)

CUDA从入门到放弃系列包含内容 异构并行计算CUDA编程模型CUDA执行模型CUDA内存CUDA流和并发CUDA指令级原语GPU加速库多GPU编程 本文你将了解到 异构并行计算CUDA编程模型 温馨提示: 本文可能引发C/C零基础的读者不适,请谨慎观看. 一、聊聊异构并行计算 异构并行计算的本质是…

MQTT Broker mosquito配置以及使用tls证书登录附上Python调用代码

MQTT Broker mosquito配置以及使用tls证书登录 文章目录MQTT Broker mosquito配置以及使用tls证书登录1. 前言2. 安装3. mosquito相关命令3.1 运行停止查看状态3.2 创建可以登录mosquito的用户3.3 配置权限规则文件3.4 配置mosquito3.5 使用mosquito_pub和mosquito_sub测试3.5.…

web手势库Alloyfinger

前言 在上一篇文章 前端pdf预览、pdfjs的使用&#xff0c;我们使用pdf.js 来实现了pdf的预览。但是客户车间里的电脑是触摸屏&#xff0c;要求能够手势放大图纸&#xff0c;能够拖动图纸。最终决定使用 Alloyfinger 来解决手势的问题。 官方github https://github.com/Alloy…