椭圆曲线加密法

来源:互联网 发布:吴昕的淘宝店铺网址 编辑:程序博客网 时间:2024/05/03 18:14

       一种相对比较新的技术--椭圆曲线加密系统,已经逐渐被人们用做基本的数字签名系统。椭圆曲线作为数字签名的基本原理大致和RSA与DSA的功能相同,并且数字签名的产生与认证的速度要比RSA和DSA快。

       下面我们简单的介绍一下椭圆曲线和椭圆曲线上的密码算法。

       1. 有限域上的椭圆曲线

       设K表示一个有限域,E是域K上的椭圆曲线,则E是一个点的集合:

       E/K = { ( x, y ) | y2+a1xy+a3y=x3+a2x2+a4x+a6,a1,a3,a2,a4,a6x, y, K } 

       { O } 其中O表示无穷远点。

       在E上定义‘+’运算,P + Q = R,R是过P、Q的直线与曲线的另一交点关于x轴的对称点,当P = Q时R是P点的切线与曲线的另一交点关于x轴的对称点。

       这样,( E, + )构成可换群( Abel群),O是加法单位元(零元)。

       椭圆曲线离散对数问题(ECDLP)定义如下:给定定义在K上的椭圆曲线E,一个n阶的点P∈E/K,和点Q∈E/ K,如果存在l,确定整数l, 0≤l≤n-1,Q = lP。

       我们知道,RSA是基于因子分解,其算法的核心就是如何寻找大数的因子分解,但ECDLP是比因子分解难得多的问题。

       椭圆曲线上的加法: P + Q = R(如果曲线三点在一条直线上,则三点和为0)

       椭圆曲线上一点的2倍: P + P = R(一个点的两倍是它的切线与曲线的另一个交点).

       以上的椭圆曲线是连续的,不适合用来进行加密,因此我们必须把椭圆曲线变成离散的点。因此,我们要把椭圆曲线定义在有限域上(顾名思义,有限域是一种只有由有限个元素组成的域)。

    下面,我们给出一个有限域Fp,这个域只有有限个元素。    
     Fp中只有p(p为素数)个元素0,1,2 …… p-2,p-1; 
     Fp 的加法(a+b)法则是 a+b≡c (mod p);即,(a+b)÷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)
)。 
     Fp 的单位元是1,零元是 0。 

    同时,并不是所有的椭圆曲线都适合加密。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)的图像 


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

    2.椭圆曲线上简单的加密/解密 

   公开密钥算法总是要基于一个数学上的难题。比如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间传送的明文信息。 


0 0
原创粉丝点击