椭圆曲线密码学(ECC)原理

2023-05-16

1.椭圆曲线的定义

满足以下形式二元三次方程的点集

y 2 + a x y + b y = x 3 + c x 2 + d x + e ( 其 中 a , b , c , d 是 实 数 ) y^2+axy+by=x^3+cx^2+dx+e (其中a,b,c,d是实数) y2+axy+by=x3+cx2+dx+e(a,b,c,d)

称为椭圆曲线。
ECC中最常用的椭圆曲线方程是:

y 2 = x 3 + a x + b ( a , b ∈ G F ( p ) , 4 a 3 + 27 b 2 ≠ 0 ) y^2=x^3+ax+b(a,b \in GF(p), 4a^3+27b^2 \ne 0) y2=x3+ax+b(a,bGF(p),4a3+27b2=0)

以下是两个椭圆曲线的例子。

2.有限域上的椭圆曲线

密码学专注于离散的数学,而上面介绍的椭圆曲线是连续的。我们想把椭圆曲线及其加法应用于密码学,需要在整数集上讨论椭圆曲线 的点集。
E p ( a , b ) E_p(a, b) Ep(a,b)表示椭圆曲线 y 2 = x 3 + a x + b y^2=x^3+ax+b y2=x3+ax+b上的点集,则求解 E p ( a , b ) E_p(a,b) Ep(a,b)上的点集的步骤如下:
(1) 对区间 [ 0 , p ) [0,p) [0,p)中的每个正整数 x x x,计算 x 3 + a x + b   ( mod  p ) x^3+ax+b\ (\text{mod} \ p) x3+ax+b (mod p)
(2) 对区间 [ 0 , p ) [0,p) [0,p)中的每个正整数 y y y,计算 y 2   ( mod  p ) y^2 \ (\text{mod} \ p) y2 (mod p)
(3) 看以上两个计算结果是否相等(即 x 3 + a x + b ≡ y 2  mod  p x^3+ax+b\equiv y^2 \ \text{mod} \ p x3+ax+by2 mod p),如果相等(存在同余关系),则 ( x , y ) (x,y) (x,y)是椭圆曲线上的点,否则不是。、
例. E 11 ( 1 , 6 ) E_{11}(1,6) E11(1,6)表示椭圆曲线 y 2 = x 3 + x + 6 y^2=x^3+x+6 y2=x3+x+6,则点集 E 11 ( 1 , 6 ) E_{11}(1,6) E11(1,6)如下表:

(2,4)

(2,7)

(3,5)

(3,6)

(5,2)

(5,9)

(7,2)

(7,9)

(8,3)

(8,8)

(10,2)

(10,9)

说明:
2 3 + 2 + 6 ( mod  11 ) = 5 2^3+2+6(\text{mod} \ 11)=5 23+2+6(mod 11)=5
4 2 ( mod  11 ) = 5 4^2(\text{mod} \ 11)=5 42(mod 11)=5
7 2 ( mod  11 ) = 5 7^2(\text{mod} \ 11)=5 72(mod 11)=5

3.椭圆曲线上的加法法则

在椭圆曲线 E E E上定义"加"的运算:假设有两个点 P P P, Q Q Q P P P Q Q Q的和 P ⊕ Q P\oplus Q PQ由如下步骤得到:
连接 P Q PQ PQ两点形成直线,这条直线交椭圆曲线 E E E R R R点,则 R R R点关于 x x x轴的对称点 R ′ R' R就是 P ⊕ Q P\oplus Q PQ的运算结果。

P P P Q Q Q两点重合时,微积分的知识告诉我们,此时直线 P Q PQ PQ成为椭圆曲线 E E E的切线,亦即作曲线在 P P P点的切线交曲线于另一点 R R R R R R关于 x x x轴的对称点 R ′ R' R即为 P ⊕ P P\oplus P PP的值。

. 假设椭圆曲线 E E E方程为 y 2 = x 3 − 15 x + 8 y^2=x^3-15x+8 y2=x315x+8 P P P点坐标为 ( 7 , 16 ) (7,16) (7,16) Q Q Q点坐标 ( 1 , 2 ) (1,2) (1,2),在这条曲线上计算 ( 7 , 16 ) ⊕ ( 1 , 2 ) (7,16) \oplus (1,2) (7,16)(1,2)
首先获取这条直线 P Q PQ PQ斜率为

λ = y P − y Q x P − x Q = 7 3 \lambda=\frac{y_P-y_Q}{x_P-x_Q}=\frac{7}{3} λ=xPxQyPyQ=37

从而得到直线 P Q PQ PQ的表达式:

P Q : y = 7 3 x − 1 3 PQ:y= \frac{7}{3}x-\frac{1}{3} PQ:y=37x31

将其与曲线方程 y 2 = x 3 − 15 x + 8 y^2=x^3-15x+8 y2=x315x+8联立消去 y y y可得关于x的方程:

x 3 − 49 9 x 2 − 121 9 x + 161 9 = 0 x^3-\frac{49}{9}x^2-\frac{121}{9}x+\frac{161}{9}=0 x3949x29121x+9161=0

不需要硬解该方程,因为我们知道这个方程必有两根 x 1 = 7 x_1=7 x1=7, x 2 = 1 x_2=1 x2=1,因此该方程等价于

( x − 1 ) ( x − 7 ) ( x − x 3 ) = 0 (x-1)(x-7)(x-x_3)=0 (x1)(x7)(xx3)=0

观察两式一次项不难得到

− 7 x 3 = 161 9 -7x_3=\frac{161}{9} 7x3=9161

因此

x 3 = − 23 9 x_3=-\frac{23}{9} x3=923

再将 x 3 x_3 x3代入直线方程可得 y 3 = − 170 27 y_3=-\frac{170}{27} y3=27170
( 7 , 16 ) (7,16) (7,16) ( 1 , 2 ) (1,2) (1,2)的连线与曲线交点为 R ( − 23 9 , − 170 27 ) R(-\frac{23}{9},-\frac{170}{27}) R(923,27170),因此

P ⊕ Q = R ′ = ( − 23 9 , 170 27 ) P \oplus Q=R'= (-\frac{23}{9},\frac{170}{27}) PQ=R=(923,27170)

无穷远点
如果 P 、 Q P、Q PQ两点本身关于 x x x轴对称,那么直线 P Q PQ PQ就不与曲线有第三个交点,此时规定 P ⊕ Q = 0 P \oplus Q=0 PQ=0,即 P 、 Q P、Q PQ在无穷远处相交,这里的" 0 0 0"就算无穷远点。
显然有 P + 0 = P P+0=P P+0=P,亦即无穷远点 0 0 0是加法运算的单位元。
同时注意到:
如果 P = ( x , y ) P=(x,y) P=(x,y),那么 ( x , y ) ⊕ ( x , − y ) = 0 (x,y) \oplus (x,-y)=0 (x,y)(x,y)=0,即(x,-y)是 P P P的加法逆元,即 − P -P P

因此,对于一般情况,求椭圆曲线 E p ( a , b ) E_p(a,b) Ep(a,b)上任意两点 P ( x 1 , y 1 ) , Q ( x 2 , y 2 ) P(x_1,y_1),Q(x_2,y_2) P(x1,y1),Q(x2,y2)之和 P ⊕ Q P \oplus Q PQ的方法如下:
如果 y 1 + y 2 = 0 y_1+y_2=0 y1+y2=0 P + Q = 0 ( 无 穷 远 点 ) P+Q=0(无穷远点) P+Q=0()
如果 y 1 + y 2 ≠ 0 y_1+y_2\ne 0 y1+y2=0,则 P + Q = ( x 3 , y 3 ) P+Q=(x_3,y_3) P+Q=(x3,y3)由以下规则确定:

x 3 ≡ λ 2 − x 1 − x 2 ( mod  p ) x_3\equiv \lambda^2-x_1-x_2(\text{mod}\ p) x3λ2x1x2(mod p)

y 3 = λ ( x 1 − x 3 ) − y 1 ( mod  p ) y_3=\lambda (x_1-x_3)-y_1(\text{mod}\ p) y3=λ(x1x3)y1(mod p)

其中

λ = { y 2 − y 1 x 2 − x 1 , P ≠ Q 3 x 1 2 + a 2 y 1 , P = Q \lambda=\left\{ \begin{aligned} \frac{y_2-y_1}{x_2-x_1}, P \ne Q \\ \frac{3x_1^2+a}{2y_1}, P=Q \end{aligned} \right. λ=x2x1y2y1,P=Q2y13x12+a,P=Q

具体证明如下:
设直线 P Q PQ PQ y − y 1 = λ ( x − x 1 ) y-y_1=\lambda(x-x_1) yy1=λ(xx1)。将直线方程与曲线方程联立并消去 y y y得到

( λ x + y 1 − λ x 1 ) 2 = x 3 + a x + b (\lambda x+y_1-\lambda x_1)^2=x^3+ax+b (λx+y1λx1)2=x3+ax+b

整理可得

x 3 − λ 2 x 2 + ( a + 2 λ 2 x 1 − 2 λ y 1 ) x + b − ( y 1 − λ x 1 ) 2 = 0 x^3-\lambda^2x^2+(a+2\lambda^2x_1-2\lambda y_1)x+b-(y_1-\lambda x_1)^2=0 x3λ2x2+(a+2λ2x12λy1)x+b(y1λx1)2=0

由于直线和椭圆曲线已有两交点 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2),因此上式必有两根 x = x 1 , x = x 2 x=x_1,x=x_2 x=x1,x=x2,设第3根为 e 3 e_3 e3,则上方程等价于

( x − x 1 ) ( x − x 2 ) ( x − e 3 ) = 0 (x-x_1)(x-x_2)(x-e_3)=0 (xx1)(xx2)(xe3)=0

由常数项相等可得

e 3 = ( y 1 − λ x 1 ) 2 − b x 1 x 1 e_3=\frac{(y_1-\lambda x_1)^2-b}{x_1x_1} e3=x1x1(y1λx1)2b

e 3 = y 1 2 − 2 λ x 1 y 1 + λ 2 x 1 2 − b x 1 x 2 e_3=\frac{y_1^2-2\lambda x_1y_1+\lambda^2x_1^2-b}{x_1x_2} e3=x1x2y122λx1y1+λ2x12b

由于 y 1 2 = x 1 3 + a x 1 + b y_1^2=x_1^3+ax_1+b y12=x13+ax1+b,即 b = y 1 2 − x 1 3 − a x 1 b=y_1^2-x_1^3-ax_1 b=y12x13ax1,代入上式得

e 3 = x 1 3 + a x 1 − 2 λ x 1 y 1 + λ 2 x 1 2 x 1 x 2 = x 1 2 + a − 2 λ y 1 + λ 2 x 1 x 2 ( ∗ ) e_3=\frac{x_1^3+ax_1 -2\lambda x_1y_1+\lambda^2x_1^2}{x_1x_2}=\frac{x_1^2+a -2\lambda y_1+\lambda^2x_1}{x_2} (*) e3=x1x2x13+ax12λx1y1+λ2x12=x2x12+a2λy1+λ2x1()

而又有

y 1 2 = x 1 3 + a x 1 + b y_1^2=x_1^3+ax_1+b y12=x13+ax1+b

y 2 2 = x 2 3 + a x 2 + b y_2^2=x_2^3+ax_2+b y22=x23+ax2+b

两式相减得

y 1 2 − y 2 2 = x 1 3 − x 2 3 + a ( x 1 − x 2 ) y_1^2-y_2^2=x_1^3-x_2^3+a(x_1-x_2) y12y22=x13x23+a(x1x2)

( y 1 + y 2 ) λ = x 1 2 + x 1 x 2 + x 2 2 + a (y_1+y_2)\lambda=x_1^2+x_1x_2+x_2^2+a (y1+y2)λ=x12+x1x2+x22+a

将该式中的 a a a代入 ( ∗ ) (*) ()式可得

e 3 = ( y 2 − y 1 ) λ − x 1 x 2 − x 2 2 + λ 2 x 1 x 2 ( ∗ ∗ ) e_3=\frac{(y_2-y_1)\lambda-x_1x_2-x_2^2+\lambda^2x_1}{x_2} (**) e3=x2(y2y1)λx1x2x22+λ2x1()

其中有 y 2 − y 1 = λ ( x 2 − x 1 ) y_2-y_1=\lambda(x_2-x_1) y2y1=λ(x2x1),将其代入 ( ∗ ) (*) ()式得

e 3 = λ 2 x 2 − x 1 x 2 − x 2 2 x 2 = λ 2 − x 1 − x 2 e_3=\frac{\lambda^2x_2-x_1x_2-x_2^2}{x_2}=\lambda^2-x_1-x_2 e3=x2λ2x2x1x2x22=λ2x1x2

即直线 P Q PQ PQ与椭圆曲线的第3个交点横坐标

x 3 = λ 2 − x 1 − x 2 x_3=\lambda^2-x_1-x_2 x3=λ2x1x2

纵坐标为 λ ( x 3 − x 1 ) + y 1 \lambda(x_3-x_1)+y_1 λ(x3x1)+y1,而 P ⊕ Q P\oplus Q PQ仍需作第3个交点关于 x x x轴的对称点,因此

y 3 = λ ( x 1 − x 3 ) − y 1 y_3=\lambda(x_1-x_3)-y_1 y3=λ(x1x3)y1

这不依赖于 P 、 Q P、Q PQ两点是否重合。且上述运算都是在mod p的意义下进行。

4.椭圆曲线离散对数问题

椭圆曲线上的两个点P和Q,k为整数,Q=kP;
点P称为基点(base point)
k为私有密钥(private key)
Q为公开密钥(public key)

5. 椭圆曲线加解密

1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。
2、用户A选择一个私有密钥k,并生成公开密钥K=kG。
3、用户A将Ep(a,b)和点K,G传给用户B。
4、用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r<n)。
5、用户B计算点C1=M+rK;C2=rG。
6、用户B将C1、C2传给用户A。
7、用户A接到信息后,计算C1-kC2,结果就是点M。因为 C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M;再对点M进行解码就可以得到明文。

6. 拓展

椭圆曲线在Fp域上的加密(python实现)
ECC椭圆曲线密码学的原理、公式推导、例子、Python实现和应用
ECC椭圆曲线详解(有具体实例)
什么是椭圆曲线加密(ECC)?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

椭圆曲线密码学(ECC)原理 的相关文章

随机推荐

  • Windows下的socket使用教程和示例

    Windows下使用WSAStartup 函数加载DLL 已剪辑自 http c biancheng net view vip 5865 html 本节讲解 Windows 下 DLL 的加载 xff0c 学习 Linux Socket 的
  • Windows下socket编程怎么获取本机ip

    方法一 我们可以在cmd中敲入ipconfig来获取本机ip地址 xff0c 下面写个程序来获取本机ip地址 xff08 结果相同 xff09 xff1a span class token macro property span class
  • socket 的阻塞模式和非阻塞模式

    对 socket 在阻塞和非阻塞模式下的各个函数的行为差别深入的理解是掌握网络编程的基本要求之一 xff0c 是重点也是难点 阻塞和非阻塞模式下 xff0c 我们常讨论的具有不同行为表现的 socket 函数一般有如下几个 xff0c 见下
  • C/C++网络编程在windows将socket设置为非阻塞

    在 socket编程中 xff0c 对于socket的读写默认都是阻塞的 xff0c 但有的情况我们需要将其设置为非阻塞 xff0c 比如做多路复用 xff0c 或者通过select实现连接超时等功能 xff0c 将socket设置为非阻塞
  • 嵌入式 C 语言宏配置的各种技巧

    来源 xff1a https blog csdn net lin strong article details 102626503 前言 在项目中 xff0c 我们经常会需要针对不同的需求进行不同的配置 在windows Linux等大平台
  • 实战总结!18种接口优化方案的总结

    文章目录 1 批量思想 xff1a 批量操作数据库2 异步思想 xff1a 耗时操作 xff0c 考虑放到异步执行3 空间换时间思想 xff1a 恰当使用缓存 4 预取思想 xff1a 提前初始化到缓存5 池化思想 xff1a 预分配与循环
  • 嵌入式 RTOS 程序设计的 5 个实战技巧

    已剪辑自 https mp weixin qq com s sGwDJ o9tPGhV2qGd uQgA 今天聊一下RTOS应用程序设计的五个实战技巧 我在编写RTOS应用程序的过程中 xff0c 经常会遇到这些困难 xff0c 包括正确确
  • 单片机中常用的轻量级校验算法

    UART有一个奇偶校验 xff0c CAN通信有CRC校验 Modbus MAVlink USB等通信协议也有校验信息 在自定义数据存储时 xff0c 有经验的工程师都会添加一定校验信息 你平时通信 xff0c 或者数据存储时 xff0c
  • tensorflow.python.framework.errors_impl.AlreadyExistsError解决方案

    tensorflow python framework errors impl AlreadyExistsError Another metric with the same name already exists 这是tensorflow
  • Qt QString 、String、char* 三者之间相互转换

    文章目录 把QString 转化为 char 把char 转化为QStringQString 转C 43 43 自带标准stringstring 转QStringstring gt char char gt string 已剪辑自 http
  • 参数类型string和const char*哪个更合理?

    已剪辑自 https mp weixin qq com s AgJpfmbbCbsyo6oqQDjHNA 看一些C 43 43 项目时 xff0c 发现有些函数传递的参数类型是const char xff0c 我在想 xff0c 为什么一个
  • C语言如何实现动态扩容的string?

    众所周知 xff0c C 43 43 中的string使用比较方便 关于C 43 43 中的string源码实现 xff0c 可以参考这篇文章 xff1a 源码分析C 43 43 的string的实现 最近工作中使用C语言 xff0c 但又
  • 一文搞懂交叉编译,Windows和Linux的交叉编译

    文章目录 什么是交叉编译为什么要交叉编译工具链的种类 我们应该怎样建立交叉编译环境在Windows下交叉编译和调试树莓派软件一 Windows下编译树莓派程序二 用WSL来编译树莓派程序三 通过gdbserver远程调试 基于 MinGW
  • 结构体对齐为什么那么重要?

    已剪辑自 https mp weixin qq com s jPTXM809vxzEBhsPT9NzwA C语言结构体对齐问题 xff0c 是面试必备问题 我参与招聘技术面试的时候 xff0c 也喜欢问这个技术点 这不是在面试时要装B xf
  • 商用飞机表明符合性的10种方法

    已剪辑自 https www cannews com cn 2022 0818 348969 shtml 每一款新型号飞机投入市场之前 xff0c 申请人通常需要采用不同的方法来获得所需的证据资料 xff0c 以表明型号设计对适航条款的符合
  • 什么是项目管理?一文了解项目管理的概念、历史、内容和方法

    已剪辑自 https www 36dianping com dianping 17 项目 是个眼下炙手可热的词 熟人见面问一句 最近忙什么项目 xff0c 已经成为职场打招呼的基本操作 项目起源很久 xff0c 可以说有人类活动时就已经存在
  • 项目管理是什么

    文章目录 一 什么是项目二 什么是项目管理三 项目管理起源四 项目管理的十大知识领域五 项目管理的五大过程和49个子过程1 启动过程2 规划 https worktile com kb tag 规划 过程3 执行过程4 监控过程5 收尾过程
  • 这10种项目管理方法,PMP项目经理备考收藏

    文章目录 1 敏捷开发 2 Scrum 3 Dev O ps 4 Scrumban 5 项目管理的知识体系 6 受控环境下的项目管理 7 六西格玛 8 瀑布开发 9 能力成熟度模型集成 10 关键链项目管理 已剪辑自 https board
  • 符合性矩阵

    已剪辑自 https mp weixin qq com s KKOgk8aJVdcKf5mFasYkhQ 编者注 xff1a 本文作者翱坤科技是一家航空工程综合服务机构 适航思维 在此衷心感谢其无私的知识和经验分享 符合性矩阵 Compli
  • 椭圆曲线密码学(ECC)原理

    1 椭圆曲线的定义 满足以下形式二元三次方程的点集 y 2 43 a x y