• 椭圆曲线加密算法(一)


    椭圆曲线加密和签名算法
    简述
    椭圆曲线密码学,简称ECC。是一种建立公开加密的算法,也就是非对称加密。和RSA类似。被公认在给定密钥长度下最安全的加密算法。应用范围很广,主要的三个技术TLS、PGP、SSH都在使用它,特别是以BTC为代表的数字货币。

    椭圆曲线
    椭圆曲线并不是我们高中时学习的椭圆形状,其名字的由来是应为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程。这里用来加密的 椭圆曲线的定义 是一个特殊情况。

    椭圆曲线暂时可以简单的理解为:

    其中:

    a和b决定了曲线在坐标系的不同形状。举个例子:

    当b=1,a的取值从2到-3时,曲线的形状如下:

    特殊曲线:当a=b=0时(左),或a=-3,b=2时(右),这两条都不是符合标准的曲线。

    阿贝尔群
    数学上,群是指定义了二元操作运算并且用符号“+”表示的一个集合。则必须满足以下要求:

    封闭性:如果a和b都是群成员,那么a+b也是群成员。
    组合性:(a+b)+c=a+(b+c)
    单位元:存在确切的一个值可以保证 a+0=0+a=a成立,我们称之为单位元
    逆元:每个成员都有一个相反数:对于任意值a必定存在b使得a+b=0
    这样的群我们称之为阿贝尔群。另外阿贝尔群还应该满足交换律a+b=b+a

    我们所熟知的在整数范围内的加法运算(Z,+)就是阿贝尔群

    封闭性:a、b属于整数,a+b也属于整数
    组合性:(a+b)+c=a+(b+c)
    单位元:0值就是单位元
    逆元:a的逆元就是-a
    所以(Z,+)是一个阿贝尔群。

    椭圆曲线的加法
    假设我们有这样一条椭圆曲线y2=x3-x,曲线上有两点P、Q,过P和Q做一条直线,交椭圆曲线于R'点,再过R'点做垂直于X轴的直线,交椭圆曲线于另一点R,我们定义P+Q=R。

    当P=Q时候,则是过P点的切线交于椭圆曲线于R',此时R=2P,如图所示:

    当有k个相同的点P相加时,记做kP,如:P+P+P=2P+P=3P,如图:

    椭圆曲线密码利用上述“运算”中的“椭圆曲线上的离散多数问题”,就像RSA利用“大数质因数分解”一样。

    椭圆曲线上的离散对数问题
    离散对数问题:

    已知:

    椭圆曲线E
    椭圆曲线E上的一点G(基点)
    椭圆曲线E上的一点xG(x倍的G)
    求:

    x
    这里需要说明一下,若果椭圆曲线上的一点P,存在最小正整数n使得数乘nP=0(无限原点),则称n是P的阶,若n不存在,则P是无限阶的。

    也就是当给定点P时,我们已知数x求xG是非常简单的,但反过来已知xG求x就非常困难了,利用离散度数就可以保证椭圆曲线密码的安全性。

    有限域上的椭圆曲线
    我们知道椭圆曲线是连续的,并不适合加密;所以我们需要把椭圆曲线定义在有限域上的,把它变成离散的点。

    有限域Fp是指对于某个给定的质数P,由0,1,2,3.....P-1组成的P个元素所组成的整数集合中定义的加减乘除运算。

    比如当椭圆曲线位于有限域F23上时,记做:

    可以理解为左侧的值和右侧的值除以23的余数相等,此时的函数图像如图所示:

    如果我们已知曲线上的一点P(3,10),依照加法运算的规则计算2P,3P....结果如图所示:

    当我们已知P(3,10),Q(9,7),求-P,P+Q,2P时,计算过程如下所示:

    椭圆曲线加密ECC
    考虑K=kG ,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶(nG=O∞ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。其中G称为基点,k为私钥,K为公钥。

    加密过程如下:

    Alice选定一条椭圆曲线E,并取椭圆曲线上一点作为基点G 假设选定E29(4,20),基点G(13,23) , 基点G的阶数n=37
    Alice选择一个私有密钥k(k<n),并生成公开密钥K=kG 比如25, K= kG = 25G = (14,6)
    Alice将E和点K、G传给Bob
    Bob收到信息后,将待传输的明文编码到上的一点M(编码方法略),并产生一个随机整数r(r<n,n为G的阶数) 假设r=6 要加密的信息为3,因为M也要在E29(4,20) 所以M=(3,28)
    Bob计算点C1=M+rK和C2=rG C1= M+6K= M+625G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7)
    Bob将C1、C2传给Alice
    Alice收到信息后,计算C1-kC2,结果就应该是点M C1-kC2 =(6,12)-25C2 =(6,12)-25*6G =(6,12)-2G =(6,12)-(27,27) =(6,12)+(27,2) =(3,28)
    参数要求:
    p越大安全性越好,但会导致计算速度变慢,200bit左右可满足一般安全要求
    n应为质数
    ECC VS RSA
    优点:
    安全性能更高
    160位ECC与1024位RSA、DSA有相同的安全强度
    处理速度更快
    在私钥的处理速度上,ECC远 比RSA、DSA快得多
    带宽要求更低
    存储空间更小
    ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多
    缺点:
    设计困难,实现复杂
    如果序列号设计过短,那么安全性并没有想象中的完善
    椭圆曲线签名算法
    即是ECDSA。

    这里我们依然假设私钥、公钥分别为k,K。其中K=kG,G为基点。

    私钥签名:
    Alice选择随机数r,计算点rG(x, y)。
    Alice根据随机数r、消息M的哈希h、私钥k,计算s = (h + kx)/r。
    Alice将消息M、和签名{rG, s}发给接收方。
    公钥验证签名:
    Bob收到消息M、以及签名{rG=(x,y), s}。
    Bob根据消息M,求哈希h。
    使用发送方公钥K计算:hG/s + xK/s,并与rG比较,如相等即验签成功。
    验证原理
    hG/s + xK/s = hG/s + x(kG)/s = (h+xk)G/s = r(h+xk)G / (h+kx) = rG

    这里关键的一点是引入了随机数r,提高了签名的安全性,即使同一条消息,只要改变随机数r,所得到的签名也会随之改变。

  • 相关阅读:
    eclipse插件
    01 vue入门
    jrebel
    html5,css3炫酷实例-元素
    css文字实例锦集
    海外短信故障已经恢复
    证实海外(含港澳台)短信业务故障
    预计维护时间将延长
    黑龙江地区电信运营商业务中断
    正在进行计划中的停机维护
  • 原文地址:https://www.cnblogs.com/xiaocongcong888/p/9487683.html
Copyright © 2020-2023  润新知