【密码学】六、公钥密码

公钥密码

  • 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’就是解密后的明文

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

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

相关文章

安装linux操作系统

安装虚拟机的步骤: 安装linux系统 之后开启虚拟机 之后重启,打开虚拟机,登录root账号

探索泛型与数据结构:解锁高效编程之道

文章目录 引言第一部分:了解泛型1.1 为什么使用泛型1.2 使用泛型的好处 第二部分:泛型的使用场景2.1 类的泛型2.2 方法的泛型2.3 接口的泛型 第三部分:泛型通配符3.1 通配符3.2 通配符的受限泛型 第四部分:数据结构和泛型的应用4.…

微信小程序开发摇一摇功能_javascript技巧

方法定义: let shakeInfo {openFlag: false,// 是否开启摇一摇,*****注意:如果是小程序全局监听摇一摇,这里默认为trueshakeSpeed: 110,//设置阈值,越小越灵敏shakeStep: 2000,//摇一摇成功后间隔lastTime: 0,//此变量用来记录…

cmake 如何添加依赖库

1 说明 cmake 经常需要添加依赖库,但是不知如何确定依赖的库名称,如何编写 2 环境 ubuntu 机器 3 依赖方法 以 dbus 为例 3.1、确定库的名字 通过dpkg 命令搜索库名,如下所示,确定libdbus-1-dev 为自己需要的版本 usereba…

MySQL 事务

目录 一、事务的概念 二、事务的ACID特点 1)事务的原子性 2)事务的一致性 3)事务的隔离性 (1)脏读 (2)不可重复读 (3)幻读 (4) 丢失更…

测试开发之前端篇-Web前端简介

自从九十年代初,人类创造出网页和浏览器后,Web取得了长足的发展,如今越来越多的企业级应用也选择使用Web技术来构建。 前面给大家介绍网络协议时讲到,您在阅读这篇文章时,浏览器是通过HTTP/HTTPS协议向服务器发送请求…

MyBatisPlus

一、MyBatis-Plus 1、简介 [MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P&#…

探索ES高可用:滴滴自研跨数据中心复制技术详解

Elasticsearch 是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎,其每个字段均可被索引,且能够横向扩展至数以百计的服务器存储以及处理TB级的数据,其可以在极短的时间内存储、搜索和分析大量的数据。 滴滴ES发展至今&#xf…

Telink泰凌微TLSR8258蓝牙开发笔记(一)

一、开发环境搭建 1.1、软件开发环境: 1.1.1、开发的IDE: IDE下载链接 1.1.2、烧录工具 DBT下载地址 1.1.3、蓝牙SDK 蓝牙SDK下载地址 1.2、硬件开发环境 8258开发板烧录工具一套 二、运行例程,并使能打印调试信息功能 File-->Impo…

c#学习记录-文件操作

文件操作/文件夹操作 文件夹会创建在\bin\Debug\net6.0 namespace _23_文件操作 {internal class Program{static void Main(string[] args){-------------------文件操作File--------------//复制方法1FileInfo myFile new FileInfo("E:\\VScodes\\第四季-高级编程\\2…

状态模式(C++)

定义 允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。 应用场景 在软件构建过程中,某些对象的状态如果改变,其行为也会随之,而发生变化,比如文档处于只读状态,其支持的行为和读写…

xshell新建文件传输失败-使用sftp如何上传及下载数据

问题描述 我在使用xshell时,点击操作栏中的新建文件传输,报错为:要继续使用此程序,您必须应用最新的更新或使用新版本,然后就给我跳到了sftp界面,界面上显示的是当前目录,我要下载数据到本地。 …

C++中动态数组的使用

C中动态数组的使用 假设要在应用程序中存储医院的病历,程序员将无法知道需要处理的病历数上限。就小医院而言,为稳妥起见,程序员可对上限做合理的假设。在这种情况下,程序员将预留大量的内存,进而降低系统的性能。 为…

仅使用 CSS 创建打字机动画效果

创建打字机效果比您想象的要容易。虽然实现这种效果的最常见方法是使用 JavaScript,但我们也可以使用纯 CSS 来创建我们的打字机动画。 在本文中,我们将了解如何仅使用 CSS 创建打字机动画效果。它简单、漂亮、容易。我们还将看看使用 CSS 与 JavaScrip…

全球互联网步入IPv6时代,IPv4逐渐告别历史舞台

随着互联网技术的飞速发展,全球互联网正迎来IPv6与IPv4并存转型阶段。IPv6, 新一代互联网协议,以其更大的地址空间和更高的效率正逐渐取代IPv4成为互联网的主导。 全球互联网开始全面实施IPv6这意味着IPv4时代正在逐渐走向尾声。IPv4与IPv6为互联网协议版…

【Spring Boot】了解Spring Boot 的日志文件

目录 一、日志的作用 二、日志文件的简单使用 1、Spring Boot中的默认日志 2、自定义日志打印 三、日志级别 1、日志级别分类 2、日志级别的设置 3、日志持久化 四、基于LomBok的日志输出 1、安装Lombok插件 2、使用Lombok添加日志 3、使用Lombok添加getter和setter…

Java关键字:final解析

目录 一、final变量 二、final方法 三、final类 final是Java语言中的一个关键字,凡是被final关键字修饰过的内容都是不可改变的。 一、final变量 final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常&#xff0…

C++STL简介

1.STL简介 1.1.STL的概念 STL(standard template libaray即:“标准模板库”)是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 1.2.STL的版本 原始版本:Alexander Stepanov、Meng …

SAM 大模型Colab快速上手【Segment Anything Model】

Google Colab 是一个基于云的 Jupyter 笔记本环境,允许您通过浏览器编写、运行和共享 Python 代码。 它就像 Google 文档,但用于代码。 通过免费版本的 Google Colab,你可以获得带有约 16GPU VRAM 的 Nvidia Tesla T4 GPU,这对于…

centos手动离线安装php,nginx

1、CentOS 7上安装并配置Nginx https://www.cnblogs.com/xujiecnblogs/p/16843984.html /usr/local/nginx/sbin/nginx #启动 /usr/local/nginx/sbin/nginx -s stop #关闭 /usr/local/nginx/sbin/nginx -s reload #重启 增加h…