椭圆曲线算法

椭圆曲线加密算法(ECC - Elliptic curve encryption algorithm)是基于椭圆曲线数学的一种公钥加密算法。随着计算机计算能力的不断提升,RSA的使用率越来越高。但是为了安全,其密钥的长度一直饱受诟病,于是ECC这种新算法使用率和重要性都在逐年上升。

现在就来介绍一下椭圆曲线加密算法。

一. 椭圆曲线方程

椭圆曲线是这样一个齐次方程 y2+a1xy+a3y=x3+a2x2+a4x+a6 在直角坐标系上确定的一条平面曲线,其中,系数 ai(i=1,2,3,4,6) 定义在某个有理数域、或者无理数域、复数域,或者有限域 GF(pr) 。如果在计算机中应用,则使用有限域 GF(pr) 。

另外,曲线上每个点都必须是非奇异的,或者叫做“光滑”的,即数学上的“任意一点都存在切线”。

二. 群

群,是一种代数结构,由一个集合及一个二元运算组成。如果一个集合或者运算是群的话,就必须满足如下的条件:

  • 封闭性:所有的二元运算,起结果还是在当前定义的域内
  • 结合性:组合一个二元运算链,运算之间没有优先级之分
  • 单位元:单位元是集合里一种特别的元素,与该集合里的二元运算有关。当单位元与其他元素结合时,并不会改变那些元素,也叫幺元
  • 逆元素:指一个可以取消另一个给定元素的运算的元素。在数学里,逆元素广义化了加法中的加法逆元和乘法中的倒数

三. 阿贝尔群

阿贝尔群,就是定义了加法交换律操作的群。阿贝尔群的加法定义如下:

如果一个群 G ,对于群 G 中的任意两个元素 ,a,b ,以及定义的二元操作 ∗ ,满足 a∗b=b∗a ,则该群 G 就可以称为阿贝尔群,也叫加法群。

3.1. 定义椭圆曲线的二元加法

在椭圆曲线中,中任意取两点 P 和 Q ,做直线交于椭圆曲线上的一点 A ,过点 A 做 y 轴的平行线交于点 B ,则定义椭圆曲线的任意两点的二元加法元算逻辑为:

P+Q=B

这样,该加法的结果也在此椭圆曲线上,满足了交换律和结合律。

3.2. 关键等式

有了加法,自然就会想到“乘法”,表示多个相同的数相加。一般就是这样的一个概念:

mP=m个(P+P+P+...+P)=Q

即: m 个 P 相加,得到另一个数 Q 。在椭圆曲线的加法里,可以表示成:已知一个数 m 和一个点 P ,如果 m 个相同点 P 相加,就得到一个新点 Q 。

反过来,已知点 Q ,和另一个点 P ,能否求出是经过多少个点 P 相加得来的呢?这个问题就非常难求解了。

椭圆曲线密码体制,就是利用这个困难来设计的。

四. 椭圆曲线中的有限域

椭圆曲线是连续的,假设某一条椭圆曲线的值域为 Fq ,那么 Fq 域里的数值也是连续的。如果采用计算机来计算椭圆曲线上点的值,那么可能由于精度问题,求得的值无法落在 Fq 域内。如果采用连续的椭圆曲线来做加密算法,就可能无法解密了。因此,需要定义一个有限的域 Fq 。

4.1 有限素域 Fp

有限域 Fq 的描述及其元素的表示: q 是一个奇数,或者是 2 的次幂方。当 q 是奇素数 p 时,要求 p>2191 ;当 q 是 2 的方幂 2m 时,要求 m>192 且为素数。于是有:

  • 当 q 是奇数 p 时,素域 Fq 中的元素用整数 0,1,2,…,p−1 表示,且有:
  1. 加法单位元是整数 0
  2. 乘法单位元是整数 1
  3. 域元素的加法是整数的模 p 加法,即若 a,b∈Fp ,则 a+b=(a+b) mod p
  4. 域元素的乘法是整数的模 p 乘法,即若 a,b∈Fp ,则 a∗b=(a∗b) mod p
  • 定义在 Fp ( p 是大于3 的素数)上的椭圆曲线方程为:

y2=x3+ax+b,a,b∈Fp

(4a^3+27b^2) mod p=0

椭圆曲线 E(Fp) 的定义为:

E(Fp)=(x,y)|x,y∈Fp ,且满足: (1)∪O

其中, O 表示无穷远点。

五. 加密

描述一条 Fp 上的椭圆曲线,常用到的六个参量: T=(p,a,b,n,x,y) 。其中,

  • (p,a,b) 用来确定一条椭圆曲线, p 为素数域内点的个数, a 和 b 是其内的两个大数
  • x,y 为 G 基点的坐标,也是两个大数
  • n 为点 G 基点的阶

以上六个量就可以描述一条椭圆曲线,有时候还会用到 h (椭圆曲线上所有点的个数 p 与 n 相除的整数部分)。

加解密过程:

  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
  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 后,再进行解密就可以得到明文。

这个加密通信过程中,如果有一个偷窥者 H ,他只能看到 Ep(a,b)、K、G、C1、C2 ,而通过 、K、G 求 k 或通过 、C2、G 求 r 都是相当困难的。因此, H 无法得到A、B间传送的明文信息。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值