【密码学】六、公钥密码

公钥密码

  • 1、概述
    • 1.1设计要求
    • 1.2单向函数和单向陷门函数
  • 2、RSA公钥密码体制
    • 2.1加解密
    • 2.2安全性分析
  • 3、ElGamal公钥密码体制
    • 3.1加解密算法
    • 3.2安全性分析
  • 4、椭圆曲线
    • 4.1椭圆曲线上的运算
    • 4.2ECC
  • 5、SM2公钥密码体制
    • 5.1参数选取
    • 5.2密钥派生函数
    • 5.3加解密过程
      • 5.3.1初始化
      • 5.3.2加密过程
      • 5.3.3解密过程

公钥密码体制的出现是迄今为止密码学发展史上一次最伟大的革命。
在公钥密码体制中有公钥(用于加密或验证签名)和私钥(用于解密或签名)之分,且公钥是公开的,通信双方不需要利用秘密信道就可以进行加密通信。
在公钥密码之前的密码都是基于代换和置换两个基本方法实现的,而公钥密码体制是采用的数学函数。
在对称密码体制中,密钥的分配、管理不方便,密钥量很大。

1、概述

1.1设计要求

密钥对(pk,sk),pk是公钥,sk是私钥。
使用公钥进行加密,使用私钥进行解密。
①产生密钥对的计算是容易的;加解密的计算是容易的;
②不能通过pk计算出sk;不能通过密文和公钥恢复出明文;
③加解密的次序可换。

1.2单向函数和单向陷门函数

单向函数
已知X求Y很简单,但是已知Y求X很难;
单向陷门函数
已知X求Y很简单,在参数t未知的情况下,已知Y求X很难,但是t已知的情况下,已知Y求X很简单。
单向陷门的例子:大素数相乘比因式分解容易;函数求导很容易但是求积分有可能很困难。

2、RSA公钥密码体制

RSA的基础是数论的欧拉定理,它的安全性依赖于大整数因子分解的困难性。RSA既可以用于加密,也可以用于数字签名,具有安全、易懂、易实现等特点。

2.1加解密

①选取两个不同的大素数p,q
②计算n=pq,r(n)=(p-1)(q-1),其中r(n)是n的欧拉函数
③随机选取整数e作为公钥,满足gcd(e,r(n))=1
④采用欧几里得算法计算私钥d,使得ed=1(modr(n)),即d=e-1(modr(n))
⑤加密函数:E(m)≡me(mod n)
⑥解密函数:D©≡cd(mod n)

2.2安全性分析

大因子分解很难;
侧信道安全性分析也称为信息泄露攻击,分为能量分析攻击、计时攻击、错误分析攻击。

3、ElGamal公钥密码体制

是基于离散对数问题且主要为数字签名的目的而设计,是继RSA之后最著名的数字签名方案。

3.1加解密算法

参数p是一个素数,g是Z*p上的一个生成元。
密钥生成,a∈(1,p-1),b=ga mod p,那么私钥为a,公钥为(p,g,b)
加密过程:任意选择随机数k∈(1,p-1),计算r=gk mod p和 t= mbk mod p,得到密文c=(r,t)
解密过程:计算r-a t = (gk)-at = m mod p =m,得以得到明文m

3.2安全性分析

算法的安全性是基于离散对数问题,求解离散对数问题的攻击算法有:Shanks算法、指标计算法、Pohlig-Hellman算法

4、椭圆曲线

研究学者将椭圆曲线引入密码学,提出了基于有限域GF§的椭圆曲线上的点集构成群,在这个群上定义了离散对数系统并构造出基于离散对数的一类公钥密码体制,即基于椭圆曲线的公钥密码体制,其安全性基于椭圆曲线上离散对数问题求解的困难性
椭圆曲线是指由三次平滑代数平面曲线,可以表达为
E: y2+axy+by = x3+cx2+dx+e
其中a b c d e属于F,椭圆曲线是其上所有的点外加一个无限远点O(O不在椭圆曲线上)

通过坐标变换,可以简化称E:y2 = x3+ax+b

4.1椭圆曲线上的运算

⊕的运算如下:
①O⊕O=O;O是椭圆曲线的无穷远点
②P⊕O=P
③若P=(x,y),则P⊕(-P)=O,即P的逆-P=(x,-y)
④若P=(x1,y1),Q=(x2,y2),则R=P⊕Q=(x3,y3)
公式
⑤满足加法交换律,P⊕Q=Q⊕P
⑥满足假发结合律,(P⊕Q)⊕R=P⊕(Q⊕R)

kP=P⊕P⊕P…P⊕P k个P相加
(s+t)P=sP⊕+tP

椭圆曲线的阶是椭圆曲线中元素的个数

4.2ECC

设E是有限域GF(pm)或GF§上的椭圆曲线,其中p是素数,m是正整数,已知E对运算⊕构成一个群,ECC椭圆曲线公钥密码体制包括三个过程:选取参数、加密过程和解密过程
选取参数:选取椭圆曲线E(a,b),取其生成元G,任意选取x∈(1,ord(G))为私钥,Y=xG为公钥
加密过程:任意选取k,密文为c=(c1,c2),其中c1=kG,c2=M⊕kY
解密过程:c2-xc1=M,其中-为⊕的逆过程

5、SM2公钥密码体制

SM2是一种椭圆曲线公钥密码算法,密钥长度是256bit。SM2算法有基于素域和二元扩域的椭圆曲线。

5.1参数选取

p:有限域F( p )中元素的数目,越大越安全,但是会变慢
a,b:是方程中的系数,取值于F( p )
G:是基点
n:是点G的阶,大素数,应当尽可能大
h:是椭圆曲线上点的个数N除以n的结果,也称为余因子

5.2密钥派生函数

密钥派生函数的作用是从一个共享的秘密比特串中派生出密钥数据,需要调用杂凑函数,杂凑函数的输出比特长度为v
在SM2中,密钥派生函数是通过输入比特串Z=x2||y2和整数len,从而得到一个长度为len的比特串。

5.3加解密过程

5.3.1初始化

A->B发送数据,先选取椭圆曲线,后产生B的私钥dB和对应的公钥PB

5.3.2加密过程

发送消息为M,长度为len,则A需要:
①产生随机数k∈[1,n-1],其中n是椭圆曲线基点G的阶次
②计算椭圆曲线点C1=[k]G=(x1,y1)
③计算椭圆曲线上的点S=[h]PB
④计算椭圆曲线点[k]PB=(x2,y2)
⑤计算t=KDF(x2||y2,len)
⑥计算C2=M⊕t
⑦计算C3=Hash(x2||M||y2)
⑧输出密钥C=C1 || C2 || C3

5.3.3解密过程

①从C中取出C1,验证C1是否满足椭圆曲线方程,不满足就解密错误
②计算S=[h]C1,S若为无穷远点则解密错误
③计算[dB]C1=(x2,y2)
④计算t=KDF(x2 || y2,len),若t是全0比特串则解密错误
⑤从C中取出C2,计算M’ = C2⊕t
计算u=hash(x2 ||M’ ||y2),从C中取出C3,若u≠C3则解密错误
⑥M’就是解密后的明文

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

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

相关文章

Maven引入本地jar包

maven做为一种强大的依赖管理工具,可以帮助我们更方便的管理项目中的依赖;而在使用过程中我们难免会有需要引入本地jar包的需求,这里踩过坑之后我分享俩种引入方式; 1.上传jar到本地maven仓库,再引入 使用此方法后可…

最强自动化测试框架Playwright-操作指南(3)-PO模式

playwright支持PO模式 创建页面对象 class SearchPage:def __init__(self, page):self.page pageself.search_term_input page.get_by_role("searchbox", name"输入搜索词")def navigate(self):self.page.goto("https://bing.com")def searc…

探索远程访问内网群晖NAS 6.X(使用独立域名)【内网穿透】

使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 文章目录 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 在之前的文章中,我们向大家演示了如何使用cpolar,创建一条固定的、能够在公共互联网登录内网群晖NAS的数据隧道。这条隧道已经能够应对…

ASEMI快恢复二极管APT80DQ20BG怎么检查好坏

编辑-Z 二极管APT80DQ20BG是一种高压快恢复二极管,常用于电源和电能质量控制等领域。如果您的二极管出现故障或需要进行维修,以下是一些可能的解决方案。 首先,确保您已经断开了电源,并且具备基本的电子维修知识和技能。如果您不…

Linux:shell脚本:基础使用(3)

for循环语句 语句格式 for for变量 in 取值列表(可以是变量或者自己定义) do 循环内容 done 工作方式就是通过取值列表去判断循环的次数,每次循环的同时把列表一行的值赋予到for变量。取值方式如果是数字,那就通过数字去…

neo4j查询语言Cypher详解(二)--Pattern和类型

Patterns 图形模式匹配是Cypher的核心。它是一种用于通过应用声明性模式从图中导航、描述和提取数据的机制。在MATCH子句中,可以使用图模式定义要搜索的数据和要返回的数据。图模式匹配也可以在不使用MATCH子句的情况下在EXISTS、COUNT和COLLECT子查询中使用。 图…

【计算机网络笔记】第一章

1、计算机网络定义 计算机网络主要是由一些通用的、可编程的硬件(包含CPU、计算机、手机、智能电器…)互连而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能…

机器学习深度学习——池化层

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——卷积的多输入多输出通道 📚订阅专栏:机器学习&&深度学习 希望文章对你们…

【解决问题】手动执行maven命令安装指定jar包到本地仓库

背景: 有一个三方jar从远程仓库始终没有拉下来,没办法只能自己去下载,但是自己下载下来,不能直接建立个目录放到本地仓库,需要执行命令才行 操作 命令: mvn install:install-file -DgroupIdcom.alipay …

分享讨论学习IT上培训班有用吗?个人感悟

不知不觉一入行2年有余,回顾自己转行的学习历程,历历在目。我对培训机构好感度为0! IT分行业发展未来,前景还是很好的,但是入门方向很重要,要选择什么方向去学学完才有钱景,需要自己 &#xff0…

在java集合HashMap中如何替换某一个键值

replace() 方法替换 hashMap 中是指定的 key 对应的 value。 replace() 方法的语法为: hashmap.replace(K key, V newValue) 或 hashmap.replace(K key, V oldValue, V newValue)示例代码如下(把hashmap集合中的值为USA 的记录替换 成“US”&#xff0…

数据结构入门:队列

目录 文章目录 前言 1.队列 1.1 队列的概念及结构 1.2 队列的实现 1.2.1 队列的定义 1.2.2队列的初始化 1.2.3 入队 1.2.4 判空 1.2.5 出队 1.2.6 队头队尾数据 1.2.7 队列长度 1.2.8 队列销毁 总结 前言 队列,作为一种重要的数据结构,在计算机科学中扮演…

Metamask登录方式集成

Metamask登录 https://www.toptal.com/ethereum/one-click-login-flows-a-metamask-tutorial#how-the-login-flow-works 参考: https://zh.socialgekon.com/one-click-login-with-blockchain 后端需要在用户表中增加address和nonce字段。兼容其他登录方式&#xff0…

jstack 使用

.、用 ps -ef | grep -i java 命令&#xff0c;找出 Java|tomcat 进程 pid&#xff0c;用于查看全格式进程。 .、用 ps -aux | grep -i java 命令&#xff0c;找出 Java|tomcat 进程 pid&#xff0c;用于查看进程。.、用 top -Hp <pid> 命令&#xff0c;找出 CPU 占用最高…

基于低代码和数字孪生技术的电力运维平台设计

电力能源服务商在为用能企业提供线上服务的时候&#xff0c;不可避免要面对用能企业的各种个性化需求。如果这些需求和想法都要靠平台厂家研发人员来实现&#xff0c;那在周期、成本、效果上都将是无法满足服务运营需要的&#xff0c;这也是目前很多线上能源云平台应用效果不理…

第03天 String, StringBuffer, StringBuilder的区别

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

从三个主要需求市场分析,VR全景创业的潜力发展

VR全景&#xff0c;5G时代朝阳产业&#xff0c;其实拍摄制作很简单&#xff0c;就是利用一套专业的相机设备去给商家拍摄&#xff0c;结合后期专业的3DVR全景展示拍摄制作平台&#xff0c;打造3D立体环绕的效果&#xff0c;将线下商家真实环境1&#xff1a;1还原到线上&#xf…

Unity游戏源码分享-仿开心消消乐Match3Jewel

Unity游戏源码分享-仿开心消消乐Match3Jewel 工程地址&#xff1a; https://download.csdn.net/download/Highning0007/88198762

Linux 1.2.13 -- IP分片重组源码分析

Linux 1.2.13 -- IP分片重组源码分析 引言为什么需要分片传输层是否存在分段操作IP分片重组源码分析ip_createip_findip_frag_createip_doneip_glueip_freeip_expireip_defragip_rcv 总结 本文源码解析参考: 深入理解TCP/IP协议的实现之ip分片重组 – 基于linux1.2.13 计网理论…

【数据结构】二叉树 链式结构的相关问题

本篇文章来详细介绍一下二叉树链式结构经常使用的相关函数&#xff0c;以及相关的的OJ题。 目录 1.前置说明 2.二叉树的遍历 2.1 前序、中序以及后序遍历 2.2 层次遍历 3.节点个数相关函数实现 3.1 二叉树节点个数 3.2 二叉树叶子节点个数 3.3 二叉树第k层节点个数 3…