密码学中的椭圆曲线

 

密码学中的椭圆曲线

 密码学中的椭圆曲线不是定义在是实数域上的,我们要把椭圆曲线定义在有限域上(顾名思义,有限域是一种只有由有限个元素组成的域)。

  域的概念是从我们的有理数,实数的运算中抽象出来的,严格的定义请参考近世代数方面的数。简单的说,域中的元素同有理数一样,有自己得加法、乘法、除法、单位元(1),零元(0),并满足交换率、分配率。

  下面,我们给出一个有限域Fp,这个域只有有限个元素。
  
  Fp中只有p(p为素数)个元素0,1,2 …… p-2,p-1;
  Fp 的加法(a+b)法则是 a+b≡c (mod p);即,(a+c)÷p的余数 和c÷p的余数相同。
  Fp 的乘法(a×b)法则是  a×b≡c (mod p);
  Fp 的除法(a÷b)法则是  a/b≡c (mod p);即 a×b-1≡c  (mod p);(b-1也是一个0到p-1之间的整数,但满足b×b-1≡1 (mod p);我们称b-1是元素b在该有限域上的逆元)。
  Fp 的单位元是1,零元是 0。

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

y2=x3+ax+b定义在实数域上的时候大致形状是这样的:

 

现在我们就把y2=x3+ax+b 这条曲线定义在Fp上:图形又如下图所示

  选择两个满足下列条件的小于p(p为素数)的非负整数a、b
  4a3+27b2≠0 (mod p)
  则满足下列方程的所有点(x,y),再加上 无穷远点O∞ ,构成一条椭圆曲线。
  y2=x3+ax+b  (mod p)
  其中 x,y属于0到p-1间的整数,并将这条椭圆曲线记为Ep(a,b)。

  我们看一下y2=x3+x+1  (mod 23)的图像

  是不是觉得不可思议?椭圆曲线,怎么变成了这般模样,成了一个一个离散的点?
  椭圆曲线在不同的数域中会呈现出不同的样子,但其本质仍是一条椭圆曲线。举一个不太恰当的例子,好比是水,在常温下,是液体;到了零下,水就变成冰,成了固体;而温度上升到一百度,水又变成了水蒸气。但其本质仍是H2O。

  Fp上的椭圆曲线同样有加法,但已经不能给以几何意义的解释。不过,加法法则和实数域上的差不多,请读者自行对比。

  1. 无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P
  2. P(x,y)的负元是 (x,-y),有P+(-P)= O∞
  3. P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下关系:
  x3≡k2-x1-x2(mod p)
  y3≡k(x1-x3)-y1(mod p)
  其中若P=Q 则 k=(3x2+a)/2y1  若P≠Q,则k=(y2-y1)/(x2-x1)

  例5.1 已知E23(1,1)上两点P(3,10),Q(9,7),求1)-P,2)P+Q,3) 2P。
  解 1)  –P的值为(3,-10)
    2)  k=(7-10)/(9-3)=-1/2,2的乘法逆元为12 因为2*12≡1 (mod 23)
     k≡-1*12 (mod 23) 故 k=11。
     x=112-3-9=109≡17 (mod 23);
     y=11[3-(-6)]-10=89≡20 (mod 23)
     故P+Q的坐标为(17,20)
    3)  k=[3(32)+1]/(2*10)=1/4≡6 (mod 23)
     x=62-3-3=30≡20 (mod 23)
     y=6(3-7)-10=-34≡12 (mod 23)
     故2P的坐标为(7,12)
    
  最后,我们讲一下椭圆曲线上的点的阶。
  如果椭圆曲线上一点P,存在最小的正整数n,使得数乘nP=O∞,则将n称为P的 阶,若n不存在,我们说P是无限阶的。
  事实上,在有限域上定义的椭圆曲线上所有的点的阶n都是存在的(证明,请参考近世代数方面的书)

练习:
  1. 求出E11(1,6)上所有的点。
  2.已知E11(1,6)上一点G(2,7),求2G到13G所有的值。


六、椭圆曲线上简单的加密/解密

  公开密钥算法总是要基于一个数学上的难题。比如RSA 依据的是:给定两个素数p、q 很容易相乘得到n,而对n进行因式分解却相对困难。那椭圆曲线上有什么难题呢?

  考虑如下等式:
  K=kG  [其中 K,G为Ep(a,b)上的点,k为小于n(n是点G的阶)的整数]
  不难发现,给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就相对困难了。
  这就是椭圆曲线加密算法采用的难题。我们把点G称为基点(base point),k(k<n,n为基点G的阶)称为私有密钥(privte key),K称为公开密钥(public key)。

  现在我们描述一个利用椭圆曲线进行加密通信的过程:

  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进行解码就可以得到明文。

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

  密码学中,描述一条Fp上的椭圆曲线,常用到六个参量:
       T=(p,a,b,G,n,h)。
  (p 、a 、b 用来确定一条椭圆曲线,G为基点,n为点G的阶,h 是椭圆曲线上所有点的个数m与n相除的整数部分)

  这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件:

  1、p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;
  2、p≠n×h;
  3、pt≠1 (mod n),1≤t<20;
  4、4a3+27b2≠0 (mod p);
  5、n 为素数;
  6、h≤4。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值