【密码学】六、公钥密码

公钥密码

  • 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.hqwc.cn/news/60965.html

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

相关文章

pytest fixture 常用参数

fixture 常用的参数 参数一:autouse,作用:自动运行,无需调用 举例一:我们在类中定义一个function 范围的fixture; 设置它自动执行autouseTrue,那么我们看下它执行结果 输出: 说明:…

WebRTC | 音视频直播客户端框架

端到端通信互动技术可分解为以下几个技术难点:客户端技术、服务器技术、全球设备网络适配技术和通信互动质量监控与展示技术。 一、音视频直播 音视频直播可分成两条技术路线:一条是以音视频会议为代表的实时互动直播;另一条是以娱乐直播为代…

【TypeScript】类型断言-类型的声明和转换(五)

【TypeScript】类型断言-类型的声明和转换(五) 【TypeScript】类型断言-类型的声明和转换(五)一、简介二、断言形式2.1 尖括号语法2.2 as形式 三、断言类型3.1 非空断言3.2 肯定断言-肯定化保证赋值3.3 将任何类型断言为any3.4 调…

multi-head_seft-attention(多头自注意力)

对比 相比于single-head,multi-head就是将 q i q^i qi分成了 h h h份 multi-head_seft-attention的计算过程 将 q i q^i qi分成了 h h h份 计算过程 对于每个Head,我们可以提取出他的 b 11 b_{11} b11​到 b m 1 b_{m1} bm1​,以 H e…

B2B2C小程序商城系统--跨境电商后台数据采集功能开发

搭建一个B2B2C小程序商城系统涉及到多个步骤和功能开发,其中包括跨境电商后台数据采集功能的开发。具体搭建步骤如下: 一、系统搭建 1. 确定需求和功能:根据B2B2C商城的需求,确定系统的功能和模块,包括商品管理、订单…

问道管理:信创概念走势活跃,恒银科技斩获四连板

信创概念9日盘中走势活泼,截至发稿,新晨科技、竞业达、恒银科技等涨停,宇信科技涨近10%,中孚信息涨近9%,华是科技、神州数码涨超7%。 新晨科技今天“20cm”涨停,公司昨日晚间公告,近来收到投标代…

【数据结构】单链表OJ题(二)

🔥博客主页:小王又困了 📚系列专栏:数据结构 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、链表分割 💡方法一: 二、链表的回文 &#x…

idea报“Could not autowire. No beans of ‘UserMapper‘ type found. ”错解决办法

原因和解决办法 1.原因 idea具有检测功能,接口不能直接创建bean的,需要用动态代理技术来解决。 2.解决办法 1.修改idea的配置 1.点击file,选择setting 2.搜索inspections,找到Spring 3.找到Spring子目录下的Springcore 4.在Springcore的子目录下…

Leetcode24 两两交换链表相邻的节点

迭代解法: class Solution {public ListNode swapPairs(ListNode head) {ListNode dummyHead new ListNode(0);dummyHead.next head;ListNode temp dummyHead;while (temp.next ! null && temp.next.next ! null) {ListNode node1 temp.next;ListNode n…

利用NtDuplicateObject进行Dump

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。(本文仅用于交流学习) 这是国外老哥2020年提出的一种蛮有意思的思路。 我们先来看看大致的思路是…

前端js--剪刀石头布

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><linkrel"stylesheet"href"ht…

LeetCode--HOT100题(24)

目录 题目描述&#xff1a;234. 回文链表&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;234. 回文链表&#xff08;简单&#xff09; 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &…