椭圆曲线加密是一种目前已知的所有公钥密码体制中能够提供最高比特强度的一种公钥体制。在fpga实现椭圆曲线加密系统时,基于gf(2)的多项式有限域中的乘法、求逆运算是其中的两大难点。本文提供了一种椭圆曲线加密的fpga实现的结构,着重讨论了基于gf(2)的多项式有限域中的乘法、求逆运算的实现,并与软件实现的性能进行了比较。
关键词: fpga;多项式有限域;椭圆曲线加密系统
加密的安全性
从数论的角度来说,任何公钥密码系统都建立在一个np(无法处理的问题)的基础上,即对于特定的问题,没有办法找到一个多项式时间算法求解该问题。一般求解此类问题的算法都是指数时间或者亚指数时间,例如现在常用的rsa算法就是基于大整数因式分解问题的难解性。经过近三十多年的研究,rsa算法虽然并不存在多项式时间的算法,但是可以找到亚指数时间的算法,目前其密钥长度必须大于1024位才能保证信息传递的安全,而椭圆曲线加密系统 (elliptic curve cryptosystem—ecc) 是目前已知的所有公钥密码体制中能够提供最高比特强度 (strength-per-bit) 的一种公钥体制,只需要160的密钥就可以达到1024位rsa算法提供的安全等级。其根据是有限域上的椭圆曲线上的点群中的离散对数问题(ecdlp),许多密码专家认为它是指数级的难度。因此对于椭圆曲线加密系统来说,这一点从计算量、处理速度、存储空间和通信带宽等角度分析,椭圆曲线加密系统都有很大的优势。ieee已经制定的公钥加密算法标准p1363就是基于ecc算法的。现在密码学界普遍认为它将替代rsa成为通用的公钥密码算法,目前已成为研究的热点,是很有前途的研究方向。
图1 点算法实现
图2 密钥、数据交换
图3 椭圆曲线加密系统结构图
图4 椭圆曲线加密系统fpga电路模块框图
图5 验证系统结构
椭圆曲线加密体制
椭圆曲线
引进non-supersingular椭圆曲线weierstrass方程e:y2+xy=x3+ax2+c其中a,c∈gf(2k),c≠0。为简化以后的运算,引进z使x=x/z;y=y/z,则椭圆曲线方程化为e:y2z+xyz=x3+ax2z+cz3,定义(x, y, z)=λ(x, y, z)。可以看出当z≠0,(x, y)和(x, y, z)相对应,当z=0可以理解为沿y轴趋向无穷远,定义为无穷远点o。则椭圆曲线上所有的点外加无穷远点构成的集合构成一个abel群,o是单位元(零元)。在椭圆曲线e上定义了两种点运算:点运算和点运算。
1) 椭圆曲线上点运算定义为:设p=( x1, y1, 1)∈e,q=( x2, y2, 1) ∈e,-p=( x1, y1+ x1, 1), 当q≠-p时 pq=(x3, y3, z3) 则
当p≠q时:
其中a=(x2z1+x1),b=(y2z1+y1), c=a+b,d=a2(a+a2z1)z1bc
当p=q时:
其中
2) 椭圆曲线上的点运算定义为:设p=(x1, y1, 1)∈e,(ltlt-1...l0)2是整数l的二进制表示形式,lp=ppap=q且q∈e。
利用上面的点运算,得点算法实现如图1所示。定义l=logpq,若p的周期很大,则利用l、p求q