【密码算法 之十四】非对称算法,ECC椭圆曲线算法 之 ECDSA、ECDH、SM2、SM9等

news2024/10/5 22:21:41

文章目录

  • 1. ECC椭圆曲线
    • 1.1 曲线类型
    • 1.2 曲线标准
    • 1.3 表示方法
    • 1.4 曲线运算
      • 1.4.1 点加(Point Addition)
      • 1.4.2 点乘(Point Multiplication)
      • 1.4.3 倍点(Point Double)
  • 2. ECDSA
    • 2.1 私钥签名
    • 2.2 公钥验签
  • 3. ECDH
  • 4. SM2
    • 4.1 数字签名
    • 4.2 秘钥交换
    • 4.3 加密
    • 4.4 解密
  • 5. SM9
  • 6. 总结

1. ECC椭圆曲线

  ECC(Elliptic Curve Cryptography),就是椭圆曲线密码算法,它是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全,RSA加密算法也是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密(有待考证)。
  ECDSA(Elliptic Curve Digital Signature Algorithm)算法是基于 ECC 的的一种签名算法,广泛用于区块链、HTTPS 等需要非对称加密的场景。

1.1 曲线类型

  曲线分为素数域曲线、二元域曲线。

  • 素数域:P-192、P-224、P-256、P-384、P-521
  • 二元域:K-163、K-233、K-283、K-409、K-571、B-163、B-233、B-283、B-409、B-571

1.2 曲线标准

  曲线标准主要有:SECG / NIST / WTLS / ANSI X9.62 / RFC 5639 / SM2

  • SECG
    (1)SECG(Standards for Efficient Cryptography Group),高效密码学标准组织(SECG),它是一个行业联盟,成立于1998年,旨在开发商业标准,输出SEC标准规范;
    (2)SECG成员包括信息安全行业的领先技术公司和关键行业参与者。主要输出SEC的规范;
    (3)SECG官网:https://www.secg.org/;

  • NIST
    (1)NIST(National Institute of Standards and Technology),是美国国家标准技术研究所,前身是美国国家标准局,目前是隶属于商务部的政府实验室。主要从事标准测量方面的研究,职能类似中国计量院或者法国的LNE,为业界提供国家计量标准,计量检测和校准技术,参加标准委员会制定标准等,但本质上还是一个大型的实验室。有两个分部,一个在马里兰州的Gaithersburg,一个在科州的Boulder;
    (2)NIST是美国的标准,并不是世界标准;
    (3)NIST官网:https://www.nist.gov/ ;

  • WTLS
    WTLS(Wireless Transport Layer Security),无线传输层安全,它是无线应用协议(WAP)的安全级别,特别是针对使用WAP的应用程序。
    官网:https://www.techtarget.com/searchmobilecomputing/definition/Wireless-Transport-Layer-Security

  • ANSI X9.62
    该项目始于1995年,并于1999年正式作为ANSI标准颁布。ANSI X9.62具有高安全性和通用性。它的基域可以是Fp,也可以是F2m。F2m中的元素可以以多项式形式或正规基形式来表示。若用多项式形式,ANSI X9.62要求模多项式为不可约三项式,标准中提供了一些不可约三项式,另外还给出了一个不可约五项式。为了提高通用性,针对每一个域提供了一个模多项式。若使用正规基表示方法,ANSI X9.62规定使用高斯正规基。椭圆曲线最主要的安全因素是n,即基点阶,ANSI X9.62的n大于2160。椭圆曲线是使用随机方法选取的。ANSI X9.62规定使用以字节为单位的字符串形式来表示曲线上的点,ASN.1语法可以清楚地描述域参数,公钥和签名。

  • RFC5639
    ECC曲线标准
    官网:https://www.rfc-editor.org/

  • FIPS 186-2
    1997年,NIST开始制定包括椭圆曲线和RSA签名算法的FIPS 186标准。1998年,NIST推出了FIPS186,它包括RSA与DSA数字签名方案,这个方案也称为FIPS 186-1。1999年NIST又面向美国G0vment推出了15种椭圆曲线。这些曲线都遵循ANSI X9.62和IEEE 1363-2000的形式。2000年,包含ANSI X9.62中说明的ECDSA,使用上述曲线的FIPS 186-2问世。

  • SM2
    SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。
    SM2是基于椭圆曲线的非对称算法,相对于RSA算法,SM2具有密钥更小,运算速度更快,相同密钥长度下具有更高安全性等优势。

  • IEEE 1363-2000
    该标准于2000年作为IEEE标准问世。IEEE 1363的覆盖面很广,包括公钥加密,密钥协商,基于IFP、DLP、ECDLP的数字签名。它与ANSI X9.62和FIPS 186完全不同,它没有最低安全性限制(比如不再对基点阶进行限制),用户可以有充分的自由。

OpenSSLNISTSECCGANSI
prime192v1nistp192secp192r1prime192v1
secp224r1nistp224secp224r1
prime256v1nistp256secp256r1prime256v1
secp384r1nistp384secp384r1
secp521r1nistp521secp521r1
sect163k1nistk163sect163k1
sect163r2nistb163sect163r2
sect233k1nistk233sect233k1
sect233r1nistb233sect233r1
sect283k1nistk233sect283k1
sect283r1nistb283sect283r1
sect409k1nistk409sect409k1
sect409r1nistb409sect409r1
sect571k1nistk571sect571k1
sect571r1nistb571sect571r1

1.3 表示方法

  椭圆曲线其实是一个数学方程,通常用下面的方程式来表示:y2 = (x3 + ax + b) mod p

  如果a和b取的值不同,那么对应的曲线形状也会不一样,如下图:
在这里插入图片描述

1.4 曲线运算

  椭圆曲线的运算有多种,包括:点加(Point Addition)、点乘(Point Multiplication)、倍点(Point Double)等。

1.4.1 点加(Point Addition)

在这里插入图片描述

  1. 两点决定一条直线,也就是说,我们定义通过两个点(P,Q) 做一条直线,找到这条直线和EC曲线相交的那个点(图1中R’点)
  2. 根据点加法运算的定义,可以得到 P+Q+R’=0 ,那么 P+Q=−R’ , − R’的定义是关于 x 轴对称所得到的一个点R,如上图所示,这就是点加法的定义

1.4.2 点乘(Point Multiplication)

  “点加”是ECC计算中最基本和原始的概念,它描述群当中的两个元素(点)之间的操作,实际运算中大量使用的是“点乘”。但是不要被点乘这个名字所迷惑,其实它描述的是:对同一个点进行多次操作时的规则。
  很多常见的写法例如 kG,很容易误导初学者,其实这个kG描述的其实是:针对点G进行“k-1”次点加操作。比如k = 4,如何计算4G呢,既然我们知道如何任意两个点的点加,那么计算4G无非就是:
  第1步:计算G+G得到2G
  第2步:计算2G+G得到3G
  第3步:计算3G+G得到4G,计算完成。

1.4.3 倍点(Point Double)

  倍点其实就是点加的特殊运算,当P和Q完全重合时,就变成了倍点运算。如下图:
在这里插入图片描述

2. ECDSA

  ECDSA,即ECC椭圆曲线签名算法。设私钥、公钥分别为d、Q,即Q = dG,其中G为基点。

2.1 私钥签名

签名过程如下:

  1. 选择随机数r,计算点rG(x,y);
  2. 根据随机数r,消息M的哈希值h、私钥d,计算出 s = (h + dx)/r;
  3. 将消息M和签名值(rG, s)发给接收方;

举例:假设要签名的消息是一个字符串:“Hello World!”。

  1. 是对“待签名的消息”生成一个消息摘要,不同的签名算法使用不同的消息摘要算法,而ECDSA256使用SHA256生成256比特的摘要;
  2. 产生一个随机数k,利用随机数k,计算出两个大数r和s。将r和s拼在一起就构成了对消息摘要的签名;

2.2 公钥验签

  1. 接收方收到消息M、以及签名{rG=(x,y), s};
  2. 根据消息求哈希h;
  3. 使用发送方公钥Q计算:hG/s + xQ/s,并与rG比较,如相等即验签成功(原理:hG/s + xQ/s = hG/s + x(dG)/s = (h+xd)G/s = r(h+xd)G / (h+dx) = rG))。

3. ECDH

  ECDH 是椭圆曲线的笛福赫尔曼算法的变种,它其实不单单是一种加密算法,而是一种密钥协商协议,也就是说 ECDH 定义了(在某种程度上)密钥怎么样在通信双方之间生成和交换,至于使用这些密钥怎么样来进行加密完全取决通信双方。

ECDH的工作流程如下:
(1)Alice 和 Bob 生成各自的私钥和公钥。
  Alice的私钥为 dA,公钥为 HA = dAG
  Bob的私钥为 dB,公钥为 HB = dBG

Alice 和 Bob 需要使用一样的主要参数:在同一条曲线的同一个有限域上选择一样的基点 G。

(2)Alice和Bob通过不安全信道交换各自的公钥 HA HB,中间人可以窃听到和,但是在无法攻破离散对数难题的情况下无法得到 dA dB
(3)Alice计算 S = dAHB(使用自身的私钥和Bob的公钥),Bob计算 S = dBHA(使用自身的私钥和Alice的公钥),双方求得的S是一样的,因为 S = dAHB = dA(dBG) = dB(dAG) = dBHA

4. SM2

  SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。
  SM2是基于椭圆曲线的非对称算法,相对于RSA算法,SM2具有密钥更小,运算速度更快,相同密钥长度下具有更高安全性等优势。
  国密SM2算法标准包括5个部分:

  • GMT 0003.1-2012 SM2椭圆曲线公钥密码算法第1部分:总则
    主要介绍了ECC基本的算法描述,包括素数域和二元扩域两种算法描述
  • GMT 0003.2-2012 SM2椭圆曲线公钥密码算法第2部分:数字签名算法
    这个算法不同于ECDSA算法,其计算量大,也比ECDSA复杂些,也许这样会更安全吧
  • GMT 0003.3-2012 SM2椭圆曲线公钥密码算法第3部分:密钥交换协议
    与ECDH功能相同,但复杂性高,计算量加大
  • GMT 0003.4-2012 SM2椭圆曲线公钥密码算法第4部分:公钥加密算法
    使用ECC公钥进行加密和ECC私钥进行加密算法,其实现上是在ECDH上分散出流密钥,之后与明文或者是密文进行异或运算,并没有采用第3部分的密钥交换协议产生的密钥。
  • GMT 0003.5-2012 SM2椭圆曲线公钥密码算法第5部分:参数定义
    给出了SM2使用素数域256位椭圆曲线参数

  SM2与RSA的比较如下:

算法SM2RSA
算法结构基于椭圆曲线(ECC)基于椭圆曲线(ECC)
计算复杂度完全指数级亚指数级
存储空间192~256bit1024~8192bit
秘钥生成速度较RSA算法快百倍以上
解密加密速度较快一般

4.1 数字签名

待添加

4.2 秘钥交换

待添加

4.3 加密

待添加

4.4 解密

待添加

5. SM9

待添加

6. 总结

待添加

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

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

相关文章

Java——旋转数组的最小数字

题目链接 牛客在线oj题——旋转数组的最小数字 题目描述 有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2]&…

Stable Diffusion成为生产力工具(五):放大并修复老照片、马赛克照片、身份证件照

S:你安装stable diffusion就是为了看小姐姐么? I :当然不是,当然是为了公司的发展谋出路~~ 预先学习: 安装webui《Windows安装Stable Diffusion WebUI及问题解决记录》。运行使用时问题《Windows使用Stable Diffusion时…

Kubernetes 多集群管理工具Kuboard v3

目录 一、概述 二、安装和基本使用 2.1 添加k8s集群 2.2 信息查看 2.2.1概要信息查看 2.2.2导入集群的节点信息 2.2.3 存储 2.3创建工作负载 一、概述 Kuboard,是一款免费的 Kubernetes 图形化管理工具,Kuboard 力图帮助用户快速在 Kubernetes 上…

Tomcat8性能优化

文章目录授人以鱼不如授人以渔目的服务器资源Tomcat整体架构Tomcat配置优化Linux环境安装运行Tomcat8AJP连接什么是AJP执行器(线程池)3种运行模式bionioapr禁用DNS查询添加Listener版本号隐藏压缩传输部署测试用的web项目查看服务器信息查看Linux版本查看…

three.js学习 01-使用最基本的方法创建出来一个threejs立方体,three.js开发环境搭建

1.当前实现的最终效果: 我们将会在页面上使用threejs的渲染器创建场景和相机,并且将一个简单几何体结果的canvas嵌入到我们的网页中 2.环境以及工具介绍: three中文官方文档地址:https://www.three3d.cn/docs/index.html 使用的开…

制作两栏布局的 6+5 种方法:从相当合理到完全错误

一个挑战 假设您需要创建一个两列布局。是的,最简单的那种:左边一列,右边一列,中间有一些空隙。有一个明显的现代解决方案: .columns {display: grid;grid-template-columns: 1fr 1fr;gap: 20px; }完毕!当…

Go 语言高质量编程

编写高质量的 Go 代码~ 前言: 本次课程简要介绍了高质量编程的定义和原则,分享了代码格式、注释、命名规范、控制流程、错误和异常处理五方面的常见编码规范,帮助我们在今后的开发过程中写出更加优秀的代码 … 什么是高质量编程&#xff1f…

凌恩生物文献分享|微刊:三代全长16s扩增子——环境多样性研究的明星

在微生物研究领域,PacBio三代全长的时代已经来临,如果你还没用过那就太可惜了! 要问三代有什么好,那我可得说道说道。 相比于传统二代Illumina平台测序,PacBio Sequel lle 平台获得的序列更长,信息量更多…

Java Servlet Tomcat(HttpServlet)处理底层机制详解总括

以tomact服务器为例: 热知识:Servlet是java定义的处理动态资源(非静态资源)的java接口规范,HttpServlet是tomcat实现了servlet接口的类 一.当第一次发送请求时候: 1.查询web.xml中的url-parrtern中配置的…

LNMP及论坛搭建

安装 Nginx 服务 systemctl stop firewalld systemctl disable firewalld setenforce 01.安装依赖包 #nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。 yum -y install pcre-devel zlib-deve…

排序(4)——归并排序

目录 前言 1.归并排序的递归实现 1.1 归并排序概念 1.2 归并排序递归实现 2.归并排序的非递归实现 前言 今天给大家带来比较排序的最后一种,归并排序,这个排序,需要我们对递归,循环控制要有着较强的理解,我相信大…

【iOS的NSNULL nil Nil 】

前言 偶然看到了NSNULL 简单了解他的兄弟nil Nil记录一下。 NSNULL Nil nil 在iOS中,nil、Nil和NSNull都表示“空值”的概念,但它们在使用时有所不同。 nil和Nil都表示空指针,可以用于指针类型的变量、对象类型的变量、和Objective-C对象…

浙江海發進出口股份有限公司官网上线|LTD五金技术行业案例分享

​浙江海發進出口股份有限公司 (以下简称海發)是一家多元化的国际贸易企业。拥有自己的工厂,稳定的资金储备和最好的服务,在商业领域赢得了很高的声誉。地处长江三角洲交通经济中心嘉兴市。 浙江海發進出口股份有限公司 (以下简称海發)是一家多元化的国…

Python轻量级Web框架Flask(5)——Flask模型基础和数据迁移

0、前言:学习这部分的前提是对python的面向对象有一定的了解,同时对MySQL有扎实的学习 1、Flask模型基础知识: Flask模型 ORM (注意:在flask中用ORM可以实现SQL语句功能,但是并不意味着SQL语句不重要&am…

NISACTF2023 WP

NISACTF2023 WP 前言 2年多没玩CTF了,pwn显得手生了不少,我的PWN环境已经在硬盘的某个角落里吃灰了。今天参加了一场校赛,捣鼓了一下午,Reverse和PWN都AK了。其实比赛是新手向,没啥难度,不过有道PWN设计的…

ChatGPT实战100例 - (02) 自动出PPT它不香么?

文章目录ChatGPT实战100例 - (02) 自动出PPT它不香么?一、需求与思路1. 需求:出个PPT,5分钟后要用2. 思路:生成markdown然后转化二、生成markdown语法的思维导图1. 问题2. 回答三、把markdown文本转换成PPTChatGPT实战100例 - (02…

STM32 gpio外部中断详解

什么是中断? 打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断 中断的作用和意义 中断的意义:高效处理紧急程序,不会一直占用CPU资源 STM32 GPIO外部中断简图 NVIC 什么…

JSTL标签库

英文全称:Java Standard Tag Lib(Java标准的标签库) 使用目的:JSTL标签库通常结合EL表达式一起使用。目的是让JSP中的java代码消失。 使用位置:JSTL标签是写在JSP当中的,但实际上最终还是要执行对应的jav…

Ubuntu 开机启动 通过crontab定时器去检查脚本 实现

有个项目的程序需要实现开机启动 通过添加一个qmcy.service服务的方法 发现 确实执行脚本了 但是脚本的程序缺并没有起来 但是如果手动执行这个脚本 程序是能起来的 不知道为啥 没办法 网上搜了下 可以通过 crontab定时器去检查 程序是否启动 没启动的话去 执行对应的脚…

【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----程序化生成多图层地形贴图的算法设计

(2条消息) 【开发日志】2023.04 ZENO----Image Processing----CompositeCV、Composite2、Composite3_EndlessDaydream的博客-CSDN博客 (2条消息) 【开发日志】2023.04 ZENO----Image Processing----ImageEdit、EditRGB、EditHSV_EndlessDaydream的博客-CSDN博客 (2条消息) 【…