椭圆曲线加密ECC
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【密码学】ECC椭圆曲线加密
2018年07月13日15:48:10
阅读数:41
本篇文章介绍密码学中的一个概念:ECC加密算法。
接下来我将从以下几个方面介绍一下ECC:
∙阿贝尔群(Abelian Group)
∙什么是椭圆曲线
∙有限域椭圆曲线计算
∙椭圆曲线加密(ECC)
∙ECC参数选取
∙ECC与比特币
椭圆曲线加密,全称EllipseCurve Cryptography,简称ECC。
与传统的基于大素数因数分解难题的方式不同,ECC通过椭圆曲线的方式产生密钥。
在ECC之前,有必要先介绍一下阿贝尔群的基本概念。
阿贝尔群(Abelian Group)
给定集合G G和操作⋅⋅,如果满足以下性质,则是{G,⋅}{G,⋅}群
∙封闭性
∀a,b∈G,a⋅b∈G∀a,b∈G,a⋅b∈G
∙结合性
∀a,b,c∈G,(a⋅b)⋅c=a⋅(b⋅c)∀a,b,c∈G,(a⋅b)⋅c=a⋅(b⋅c)
∙单位元
∃e∈G,∀a∈G,e⋅a=a⋅e=a∃e∈G,∀a∈G,e⋅a=a⋅e=a
∙逆元
∀a∈G,∃a−1∈G,a⋅a−1=a−1⋅a=e∀a∈G,∃a−1∈G,a⋅a−1=a−1⋅a=e
在群的基础上,如果还满足交换性,那么这个群就是一个阿贝尔群了,通常我们也称作交换群。
∙交换性
∀a,b∈G,a⋅b=b⋅a∀a,b∈G,a⋅b=b⋅a
我们平时生活中所接触到的加法就是实数域上的阿贝尔群了,单位元是00,乘
法也是阿贝尔群,其单位元为11。
什么是椭圆曲线
我们来看下椭圆曲线的定义,椭圆曲线是在射影平面上满足维尔斯特方程(We ierstrass)的所有点的集合,这句比较废话,不需要理解。
其需要满足两点:
∙椭圆曲线关于x轴对称
∙平面中的一条直线和椭圆曲线相交,最多有三个交点
满足ECC的椭圆曲线有着如下形式:
y2x3+ax+b;4a3+27b2≠0y2x3+ax+b;4a3+27b2≠0
一条椭圆曲线大概长这样:
▲椭圆曲线案例与计算规则介绍
那么椭圆曲线如何去进行运算呢?不妨将椭圆曲线上面的运算定义为“+”运算,以上图为例,给定点A和点B,C’点为AB延长线与曲线的交点,做其对称点C,那么A+B=C。
那么如何计算A+A呢,这里用到极限的概念,做点A的切线就可以了,下图中A+A=C。
▲椭圆曲线中计算A+A
在这个定义之下,那么单位元是什么呢?实际上,单位元是一个理想的“无穷远点”(可以把这个点想象成点(0,∞)(0,∞)。
这样,在椭圆曲线上面定义的++运算就满足交换群的性质了。
我们一步步看是否满足所有的交换群的性质呢?
∙封闭性:显然满足
∙结合性:自行理解
∙单位元:00,因为00是无穷远点,因此A A和00的交点为A A的对称点,根据++操作的计算规则,A+0=A A+0=A
∙逆元:A A的逆元为A A关于x x轴的对称点
∙交换性:根据刚刚介绍的计算规则,显然有:A+B=B+A A+B=B+A
所以,我们定义在椭圆曲线上的运算实际上是一个交换群。
在定义了++运算之后,我们还可以定义椭圆曲线上的乘法运算,按照递归的方式,可以有如下定义
2A=A+A2A=A+A
kA=A+(k−1)A kA=A+(k−1)A
比如给定一条椭圆曲线和A,我们可以按照以下过程求3A3A:
▲椭圆曲线的乘法运算
在定义了加法操作和乘法操作的基础之上,我们就可以知道为什么椭圆曲线可以用来加密了。
我们知道,密码学中用来加密的方案通常都有一定的数学保证,那么椭圆曲线算法的保证是什么呢?
椭圆曲线的数学保障:已知椭圆曲线E,给定基点G和点kG,其中k为整数,无法在有效时间内计算出k。
上面给出了椭圆曲线的数学保障,如果不是很理解这个保障,那么我们可以对应着RSA的数学保障来理解一下这个问题,在指数运算之中,给定a a和b b,我们可以很快地计算出a b ab,但是给定a a和a b ab,却没有很快的计算方法计算出b b(在取模的情况下)。
这个说法仅仅助于理解,若想深入了解还需要从理论上给出一定的答复才严谨。
有限域椭圆曲线的运算
上面所提到的椭圆曲线的计算并不能直接用于密码学之中,因为在实数域上椭圆曲线的计算是有误差的,密码学要求精确。
在ECC中,我们还可以定义“阶”的概念,理解阶的概念可以类比于次方操作中阶的概念。
对于圆锥曲线上一点P P,其阶为最小整数a a,使得aP=0(modp) aP=0(modp),其中00为单位元。
细心的读者可能会关心这样一个问题,00是假想的一个无穷远点,怎么算出这样一个a a呢。
这时候就需要用到单位元的概念了。
如果我们计算得到了mP= P(modp)mP=P(modp),那我们就知道a=m−1a=m−1。
上面所说的运算方法都是从几何角度给出的一个理解,那么如何在代数上进行计算呢?一般来说,给定,以下三步就可以计算:
(1)结果
x3=k2−x1−x2(modp)x3=k2−x1−x2(modp)
y3=k(x1−x3)−y1(modp)y3=k(x1−x3)−y1(modp)
(2)若A=B A=B,则
k=3x2+a2y(modp)k=3x2+a2y(modp)
(3)若A≠B A≠B
k=y2−y1x2−x1(modp)k=y2−y1x2−x1(modp)
上述三个步骤其实就是先计算出直线,然后求直线和椭圆曲线的交点。
如果还没有完全理解其中的过程可以参看这个网页的计算案例:https://blogs.co m/Kalafinaian/p/7392505.html
那么为什么A=A=B的时候斜率k是这么计算的呢,因为:
y2=x3+ax+b→2yy′=3x2+a y2=x3+ax+b→2yy′=3x2+a
椭圆曲线加密(ECC)
上面介绍了ECC的计算过程,那么ECC是如何用来加密的呢?利用ECC进行加密首先需要给出p,a,b,G,n p,a,b,G,n。
其中p p通常选取一个很大的素数以防止穷举,a a和b b是椭圆曲线的参数,G G为给定的椭圆曲线上的点,n n为G G的阶。
椭圆曲线加密正是利用了前面所说的给定自然数m m计算mG mG很容易而给定mG mG的结果无法很快计算m m这一个性质。
下面给出一个ECC 保密通信的算法:
∙Alice选定曲线E(p,a,b)E(p,a,b),并在上面取一点G G作为基点,同时计算G G 的阶。
比如选取E(29,4,20),G(13,23)E(29,4,20),G(13,23),则G G的阶为3737 ∙Alice选取一个常数k k作为私钥,并计算出kG kG作为公钥。
比如选取k=25k=2 5,则kG=25G=(14,6)kG=25G=(14,6)
∙Alice公开E(29,4,20),K(14,6),G(13,23)E(29,4,20),K(14,6),G(13,23)
∙Bob接收消息之后首先将信息编码到点M M,并产生一个随机整数r(r<n)r(r<n)。
假设r=6r=6,需要加密的信息为33则计算y2=33+4×3+20(modp)y2=33+4×3+ 20(modp)。
因此y=28y=28,所以点M(3,28)M(3,28)
∙Bob计算C1=M+rK;C2=rG C1=M+rK;C2=rG并发送给Alice
∙Alice计算C1−kC2C1−kC2即可解密Bob发来的消息
为什么Alice可以解密呢,因为
C1−kC2=M+rK−krG=M+rkG−krG=M C1−kC2=M+rK−krG=M+rkG−krG=M
通过这个过程,相比大家应该大致理解了ECC的设计思路了。
ECC参数选取
学术上通常将一条椭圆曲线定义为T=(p,a,b,G,n,h)T=(p,a,b,G,n,h),其中p p 为大素数,a,b a,b确定一条椭圆曲线的表达式,G G为基点,n n为G G的阶,h h是椭圆曲线上所有点的个数m m与n n相除的商的整数部分。
参数的选择一般如下,可以参考:
(https:///Kalafinaian/p/7392505.html)
∙p p越大越好,但是p p越大,运算速度会受到影响。
200200bit 即可满足一般的安全需求
∙n n应该为素数(需要数论知识加以理解)
∙h≤4;p≠n×h;pt≠1(mod p)(1≤t<20)h≤4;p≠n×h;pt≠1(modp)(1≤t<20)
∙4a3+27b2≠0(mod p)4a3+27b2≠0(modp)
ECC和RSA相比,提供的安全等级更高(虽然我不知道为什么),160位EC C既可以与1024位RSA,DSA拥有相同的安全强度,同时处理速度更快,因此在存储和传输时候对空间的要求更低,当然,ECC的设计难度和RSA相比也难更多。
ECC与比特币
由于比特币技术的火热,ECC技术也更广为人知了。
比特币中使用了Secp256 k1,其参数在https://en.bitcoin.it/wiki/Secp256k1中有详细介绍。
结束
本篇内容到这里就结束了,若想知道更多和信息安全有关的技术可在公众号留言哦。
识别以下二维码可以成文本公众号的小粉丝,关注更多和差分隐私有关的前沿技术哦。
版权声明:本文为博主原创文章,未经博主允许不得转载。
https:///forest_open/article/details/81032539
文章标签:ECC椭圆曲线区块链密码学比特币
个人分类:密码学
相关热词:密码学as《密码学》密码学φmd5在密码学rsa密码学。