ECC算法学习(一)算法公式

news2024/12/24 9:15:00

ECC

  • 一、ECC简介
      • 优缺点
      • 运用
  • 二、算法理论基础
      • 1. 椭圆曲线的加法
      • 2. 椭圆曲线的二倍运算
      • 3. 同余运算
      • 4. 有限域
      • 5. 乘法逆元
  • 三、算法公式
      • 1、有限域的负元
      • 2、有限域的加法, P + Q P + Q P+Q
      • 3. 斜率计算(P=Q即要计算P点切线,需要求导)
      • 4. 椭圆曲线加解密算法原理
      • 5. 椭圆曲线签名算法原理
      • 6. 签名过程
      • 7. 验证过程

一、ECC简介

ECC全称为“Ellipse Curve Ctyptography”,是一种基于椭圆曲线数学的公开密钥加密算法。与传统的基于大质数分解难题的加密算法不同,该加密方式基于 “离散对数” 这种数学难题。
椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。

优缺点

优点:
性能提升,同样的密钥长度,基于ECC加密要比基于RSA安全很多。而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。

缺点:

  1. 曲线的选择很复杂。
    ECC是基于椭圆曲线的离散对数问题,这并不是一个很好理解的问题,这里的椭圆曲线实际上并不是一个真正意义的椭圆,它的运算和椭圆类似,实际上是一个随着参数变化而不断变化的曲线,不同参数的选取会出现不同的曲线,不同的曲线就会形成不用的ECC标准,不同标准的ECC产生的加解密效果也是千差万别的。

  2. 有可能这条复杂的曲线被人植入了后门,别人就可以通过这个后门轻松的破解。
    现行的一套很流行的ECC标准是由美国郭建安全局NAS发布的,这个标准就被很多人质疑是有被植入了后门的。

  3. 专利问题。
    关于ECC的使用,很多人申请了很多的专利,现在关于ECC使用的专利大多数都掌握在一家公司的手中,这家公司就是黑莓。所以,当你想要构建自己的一套ECC标准的时候,可能不知道哪里就触及了它们的专利,卷入专利之争。

运用

目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。

二、算法理论基础

椭圆曲线算法可以看作是定义在特殊集合下数的运算,满足一定的规则。椭圆曲线因为用二元三次方程y^2= x^3+ ax + b来表示,类似椭圆周长计算方程而得名。

1. 椭圆曲线的加法

过曲线上的两点A、B画一条直线,找到直线与椭圆曲线的交点,交点关于X轴对称位置的点,定义为A+B,即为加法。如下图A+B=C

请添加图片描述

2. 椭圆曲线的二倍运算

上述方法无法解释A+A,即两点重合的情况,因此在这种情况下,将椭圆曲线在A点的切线,与椭圆曲线的交点,交点关于X轴对称的位置的点,定义为A+A,即2A,即为二倍运算。

请添加图片描述

3. 同余运算

同余就是有相同的余数,两个整数 a、 b,若它们除以正整数 m所得的余数相等,则称 a, b对于模m同余。

a ≡ b ( m o d m ) a \equiv b(mod \quad m) ab(modm)

4. 有限域

椭圆曲线是连续的,并不适合用于加密;所以必须把椭圆曲线变成离散的点,要把椭圆曲线定义在有限域上。而椭圆曲线密码所使用的椭圆曲线是定义在有限域内,有限域最常见的例子是有限域GF§,指给定某质数p,由0,1,2…p-1共p个元素组成的整数集合中加法、二倍运算。例如GF(233)就是
y 2 = ( x 3 + 7 ) ( m o d 223 ) y^2 = (x^3 + 7)(mod \quad 223) y2=(x3+7)(mod223)

5. 乘法逆元

在模7乘法中:

  • 1的逆元为 1 ( 1 ∗ 1 ) 1(1*1)%7 = 1 1(11)
  • 2的逆元为 4 ( 2 ∗ 4 ) 4(2*4)%7 = 1 4(24)
  • 3的逆元为 5 ( 3 ∗ 5 ) 5(3*5)%7 = 1 5(35)
  • 4的逆元为 2 ( 4 ∗ 2 ) 2(4*2)%7 = 1 2(42)
  • 5的逆元为 3 ( 5 ∗ 3 ) 3(5*3)%7 = 1 3(53)
  • 6的逆元为 6 ( 6 ∗ 6 ) 6(6*6)%7 = 1 6(66)

三、算法公式

并不是所有的椭圆曲线都适合加密, y 2 = x 3 + a x + b y^2 = x^3 + ax + b y2=x3+ax+b 类可以用来加密的椭圆曲线,也是最为简单的一类。

针对曲线Ep(a,b)表示为 y 2 = x 3 + a x + b ( m o d p ) , x , y ∈ [ 0 , p ] , p 为质数 y^2 = x^3 + ax + b(mod \quad p), x,y \in [0,p], p为质数 y2=x3+ax+b(modp),x,y[0,p],p为质数

该曲线关于x轴对称。选择两个满足下列条件的小于p(p为素数)的非负整数a、b,要求满足以下条件
3 a 3 + 27 b 2 ≠ 0 3a^3 + 27b^2 \neq 0 3a3+27b2=0

1、有限域的负元

P ( x , y ) P(x,y) P(x,y) 的负元是 ( x , − y m o d p ) = ( x , p − y ) (x, -y \quad mod \quad p) = (x, p - y) (x,ymodp)=(x,py)

2、有限域的加法, P + Q P + Q P+Q

P ( x 1 , y 1 ) P(x_1, y_1) P(x1,y1) Q ( x 2 , y 2 ) Q(x_2, y_2) Q(x2,y2) R ( x 3 , y 3 ) R(x_3, y_3) R(x3,y3)三点(其中R是PQ直线与曲线的交点的关于x轴的对称点,即 R = P + Q R = P + Q R=P+Q)有如下关系:
x 3 ≡ k 2 − x 1 − x 2 ( m o d p ) x_3 \equiv k^2 - x_1 - x_2(mod \quad p) x3k2x1x2(modp)
x 3 ≡ k 2 − x 1 − x 2 ( m o d p ) x_3 \equiv k^2 - x_1 - x_2(mod \quad p) x3k2x1x2(modp)

3. 斜率计算(P=Q即要计算P点切线,需要求导)

P = Q P = Q P=Q,则 k = ( 2 x 2 + a ) / 2 y 1 k = (2x_2 + a)/2y_1 k=(2x2+a)/2y1
P ≠ Q P \neq Q P=Q,则 k = ( y 2 − y 1 ) / ( x 2 − x 1 ) k = (y_2 - y_1)/(x_2 - x_1) k=(y2y1)/(x2x1)

为了方便理解,可以套用以上公式,解决以下例题。

例:已知 E 23 ( 1 , 1 ) E_{23}(1,1) E23(1,1) 上两点 P ( 2 , 10 ) P(2,10) P(2,10), Q ( 9 , 7 ) Q(9,7) Q(9,7),求1) − P -P P, 2) P + Q P + Q P+Q, 3) 2 P 2P 2P

解:1) P ( 3 , 10 ) P(3,10) P(3,10)的负元是 ( 3 , − 10 m o d 23 ) = ( 3 , 23 − 10 ) = ( 3 , 13 ) (3, -10 \quad mod \quad 23) = (3, 23 - 10) = (3, 13) (3,10mod23)=(3,2310)=(3,13)
2) P ≠ Q , k = ( 7 − 10 ) / ( 9 − 3 ) = − 1 / 2 P \neq Q, k = (7 - 10)/(9 - 3) = -1/2 P=Q,k=(710)/(93)=1/2,因为 2 ∗ 12 ≡ 1 ( m o d 23 ) 2 ∗ 12 ≡ 1 (mod \quad 23) 2121(mod23)
所以2的乘法逆元为12,
k ≡ − 1 ∗ 2 − 1 ( m o d 23 ) ≡ − 1 ∗ 12 ( m o d 23 ) k \equiv -1 * 2^{-1}(mod \quad 23) \equiv -1 * 12(mod \quad 23) k121(mod23)112(mod23),故k=11.
x 3 ≡ k 2 − x 1 − x 2 ( m o d p ) ≡ 1 1 2 − 3 − 9 ( m o d 23 ) = 109 ( m o d 23 ) ≡ 17 x_3 \equiv k^2 - x_1 - x_2(mod \quad p) \equiv 11^2 -3 - 9(mod \quad 23) = 109(mod \quad 23) \equiv 17 x3k2x1x2(modp)11239(mod23)=109(mod23)17
y 3 ≡ k ( x 1. − x 3 ) − y 1 ( m o d p ) ≡ 11 [ 3 − ( − 6 ) ] − 10 ( m o d 23 ) = 89 ( m o d 23 ) ≡ 20 y_3 \equiv k(x1. - x3) - y_1(mod \quad p) \equiv 11[3-(-6)] - 10(mod \quad 23) = 89(mod \quad 23) \equiv 20 y3k(x1.x3)y1(modp)11[3(6)]10(mod23)=89(mod23)20,故 P + Q P + Q P+Q 的坐标为 ( 17 , 20 ) (17,20) (17,20)
3) P = Q P = Q P=Q
k ≡ [ 3 ∗ ( 3 2 ) + 1 ) ] / ( 2 + 10 ) ( m o d 23 ) = 7 + 5 − 1 ( m o d 23 ) k \equiv [3 * (3^2) + 1)] / (2 + 10)(mod \quad 23) = 7 + 5^{-1}(mod \quad 23) k[3(32)+1)]/(2+10)(mod23)=7+51(mod23)
因为 5 ∗ 14 ≡ 1 ( m o d 23 ) 5 * 14 \equiv 1(mod \quad 23) 5141(mod23),5的乘法逆元为14,
故k=6。
x 3 ≡ k 2 − x 1 − x 2 ( m o d p ) = 6 2 − 3 − 3 ( m o d 23 ) = 30 ( m o d 23 ) ≡ 7 x_3 \equiv k^2 - x_1 - x_2(mod \quad p) = 6^2 - 3 - 3(mod \quad 23) = 30(mod \quad 23) \equiv 7 x3k2x1x2(modp)=6233(mod23)=30(mod23)7
y 3 ≡ k ( x 1 − x 3 ) − y 1 ( m o d p ) = 6 ∗ ( 3 − 7 ) − 10 ( m o d 23 ) = − 34 ( m o d 23 ) ≡ 12 y^3 \equiv k(x_1 - x_3) - y_1(mod \quad p) = 6 * (3 - 7) - 10(mod \quad 23) = -34(mod \quad 23) \equiv 12 y3k(x1x3)y1(modp)=6(37)10(mod23)=34(mod23)12,故 x P xP xP 的坐标为 ( 7 , 12 ) (7,12) (7,12)

4. 椭圆曲线加解密算法原理

设私钥、公钥分别为d、Q,即 Q = d G Q = dG Q=dG,其中G为基点,椭圆曲线上的已知G和dG,求d是非常困难的,也就是说已知公钥和基点,想要算出私钥是非常困难的。
公钥加密:选择随机数r,将消息M生成密文C,该密文是一个点对, C = r G , M + r Q C = {rG, M+rQ} C=rG,M+rQ,其中Q为公钥。
私钥解密 M + r Q − d ( r G ) = M + r ( d G ) − d ( r G ) = M M + rQ - d(rG) = M + r(dG) - d(rG) = M M+rQd(rG)=M+r(dG)d(rG)=M,其中d、Q分别为私钥、公钥。

5. 椭圆曲线签名算法原理

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

私钥签名:

  • 选择随机数r,计算点 r G ( x , y ) rG(x, y) rG(x,y)
  • 根据随机数r、消息M的哈希h、私钥d,计算 s = ( h + d x ) / r s = (h + dx)/r s=(h+dx)/r
  • 将消息M、和签名 r G , s {rG, s} rG,s发给接收方。

公钥验证签名:

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

6. 签名过程

假设要签名的消息是一个字符串:“Hello World!”。DSA签名的第一个步骤是对待签名的消息生成一个消息摘要,不同的签名算法使用不同的消息摘要算法,而ECDSA256使用SHA256生成256比特的摘要。

摘要生成结束后,应用签名算法对摘要进行签名:

  • 产生一个随机数k
  • 利用随机数k,计算出两个大数r和s。将r和s拼在一起就构成了对消息摘要的签名。

这里需要注意的是,因为随机数k的存在,对于同一条消息,使用同一个算法,产生的签名是不一样的。从函数的角度来理解,签名函数对同样的输入会产生不同的输出。因为函数内部会将随机值混入签名的过程。

7. 验证过程

关于验证过程,这里不讨论它的算法细节。从宏观上看,消息的接收方从签名中分离出r和s,然后利用公开的密钥信息和s计算出r。如果计算出的r和接收到的r值相同,则表示验证成功,否则,表示验证失败。

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

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

相关文章

chatgpt赋能python:PYTHON如何进行累乘操作?

PYTHON如何进行累乘操作? 在PYTHON编程中,累乘操作是指不断地将一个给定数字序列中的数字相乘的过程。这个操作在数学中也被称为阶乘,通常用符号“!”来表示。 在PYTHON中,进行累乘操作的方法主要有两种:使用循环实现…

Java实现TestNg+ExtentReport实现接口测试,并生成测试报告

一 在pom.xml文件中引入TestNg以及ExtentReport包 <dependencies> <!--testNg引入--> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.9.10</version> </de…

学习css样式的第二章

1.CSS 布局 - display 属性 display 属性是用于控制布局的最重要的 CSS 属性。 display 属性 display 属性规定是否/如何显示元素。 每个 HTML 元素都有一个默认的 display 值&#xff0c;具体取决于它的元素类型。大多数元素的默认 display 值为 block 或 inline 块级元素…

chatgpt赋能python:Python编程:如何粘贴代码

Python编程&#xff1a;如何粘贴代码 在Python编程过程中&#xff0c;粘贴代码是一个非常普遍的操作。不幸的是&#xff0c;许多初学者并不知道如何正确地粘贴代码&#xff0c;这可能会导致一些常见的错误和问题。本文将介绍如何正确地粘贴代码以及一些常见的问题和解决方案。…

Wise 的平台工程 KPI 探索之旅

作者&#xff5c;Lambros Charissis 翻译&#xff5c;Seal软件 链接&#xff5c;https://medium.com/wise-engineering/platform-engineering-kpis-6a3215f0ee14 平台即产品&#xff08;PaaP&#xff09;已经成为软件企业构建内部平台的一种流行方式。在众多软件公司争夺市场份…

地球物理专业毕业生毕业后能干高性能计算工程师吗?

很多高校都开设有地球物理专业&#xff0c;但是很多身为地球物理专业的毕业生&#xff0c;很多同学却不清楚以后能做什么工作&#xff0c;做什么工作有前景&#xff0c;十分迷茫。在这里&#xff0c;我们有很多从事高性能计算领域的前地球物理专业学长现身说法——地球物理专业…

Qt弱加密漏洞分析

0x00 漏洞背景 Qt是一个跨平台的C应用程序开发框架&#xff0c;用于创建图形用户界面&#xff08;GUI&#xff09;应用程序、命令行工具、嵌入式系统和网络应用等各种类型的应用。 Qt框架包含的Qt Network&#xff08;网络模块&#xff09;&#xff0c;提供了QNetworkAccessM…

Vue中如何进行游戏开发与游戏引擎集成?

Vue中如何进行游戏开发与游戏引擎集成&#xff1f; Vue.js是一款流行的JavaScript框架&#xff0c;它的MVVM模式和组件化开发思想非常适合构建Web应用程序。但是&#xff0c;如果我们想要开发Web游戏&#xff0c;Vue.js并不是最合适的选择。在本文中&#xff0c;我们将介绍如何…

mycat分库分表中间件介绍,有案例

目录 MyCat分库分表概述水平拆分和垂直拆分安装JDK安装MyCat安装 MyCat案例1、创建数据库2、分片配置&#xff08;schema.xml&#xff09;3、分片配置&#xff08;server.xml&#xff09;4、启动服务5、查看日志&#xff0c;看是否启动成功6、登录MyCat7、查看数据库和表8、创建…

SpringBoot自动配置原理简单分析

说明&#xff1a;在SpringBoot项目中&#xff0c;我们添加了许许多多的注解&#xff0c;这些注解提高了开发效率。这是因为SpringBoot在项目启动时&#xff0c;帮我们自动装配了大量的Bean对象&#xff0c;可以通过分析源码查看自动装配的大致原理。 第一步&#xff1a;Spring…

python:并发编程(十)

前言 本文将和大家一起探讨python的多协程并发编程&#xff08;上篇&#xff09;&#xff0c;使用内置基本库asyncio来实现并发&#xff0c;先通过官方来简单使用这个模块。先打好基础&#xff0c;能够有个基本的用法与认知&#xff0c;后续文章&#xff0c;我们再进行详细使用…

【程序人生-Hello‘s P2P】哈尔滨工业大学深入理解计算机系统大作业

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 xxxx 学 号 2021xxxx 班 级 210xxxx 学 生 xx 指 导 教 师 xxx 计算机科学与技术学院 2023年5月 摘 要 HelloWorld是每个程序员接触的第一个程序&#xff0c;表面上平平无奇的它背后却是由操作系统许多设计精巧的机制支撑…

直击面试!阿里技术官手码12W字面试小册在Github上爆火

Java面试 临近金三银四&#xff0c;想必有不少老哥已经在为面试做准备了。大家想必也知道现在面试就是看项目经验基本技术个人潜力(也就是值不值得培养)。总之就是每一次面试都是对我们能力的检验&#xff08;无论是软实力还是硬实力&#xff09;。软实力其实就是简历包装&…

高性能计算专业发展及就业前景

高性能计算专业是指一种针对计算领域最高端、最具挑战性且最具应用价值的领域专业。本文从专业背景、就业前景、发展趋势、技能需求和职业发展路径等5个角度进行较为详细的论证&#xff0c;旨在为高性能计算专业的学生提供一个全面的了解&#xff0c;以及为需要参考的人员提供参…

Java中常用的工具类

有时间就该多学&#xff0c;我还年轻&#xff0c;吃苦趁现在&#xff01; 文章目录 ❗前言1️⃣Object类①、使用步骤equals方法hashCode方法toString方法❗equals方法和运算符的区别 ②、重要方法总结 2️⃣包装类基本类型和包装类相互转换字符串类型转换成基本类型 3️⃣Date…

【Java入门】-- Java基础详解之 [变量]

目录 1.变量 1.1 变量的概念 1.2 变量的使用基本步骤 1.3 变量使用注意事项 1.4 程序中 号的使用 1.5 数据类型 1.6 整数的类型 1.7 整型的使用细节 1.8 浮点类型 1.9 浮点型的使用细节 2.0 Java API文档 2.1 字符类型(char) 2.2 字符的使用细节 2.3 字符编码 …

JS事件冒泡与JS事件代理(事件委托)

JS事件冒泡与JS事件代理&#xff08;事件委托&#xff09; 1、事件冒泡1.1 概念1.2 要是不给子元素添加具体的oncilck处理方法&#xff0c;也能冒泡么&#xff1f;1.3 子元素触发的事件冒泡会触发父元素所有的事件么&#xff1f;还是触发对应的事件&#xff1f;1.4 那么我们应该…

pytorch笔记:Conv2d 和 ConvMixer

来自B站视频&#xff0c;API查阅&#xff0c;TORCH.NN nn.Conv2d 中一般 kernel_size 是小奇数&#xff08;很多是3&#xff09;&#xff0c;padding 设置为 k − 1 2 \frac{k-1}{2} 2k−1​&#xff08;实际上padding的是 k − 1 k-1 k−1&#xff0c;因为参数的意义是左右各…

苹果新专利曝光:AirTags可以快速找到Apple Pencil

近日&#xff0c;据外媒报道&#xff0c;苹果一项新专利提出&#xff0c;苹果手写笔可以通过“声学谐振器”来帮助用户找出手写笔的位置。根据这项专利&#xff0c;苹果试图在手写笔的笔盖上加入一个被动元件&#xff0c;以响应特定的声波频率。iPhone、iPad或Apple Watch会发出…

【OpenMMLab AI实战营二期笔记】第七天 MMDetection代码课

0. 环境检测和安装 # 安装 mmengine 和 mmcv 依赖 # 为了防止后续版本变更导致的代码无法运行&#xff0c;暂时锁死版本 pip install -U "openmim0.3.7" mim install "mmengine0.7.1" mim install "mmcv2.0.0"# Install mmdetection rm -rf mmd…