椭圆曲线加密

椭圆曲线加密(ECC)最大的优点就是使用比RSA短得多的密钥得到相同的安全性,因此可以减少处理负荷,使公钥密码的应用领域得到拓展。

基本原理:

椭圆曲线密码体制使用了在有限Abel群(Zp或者GF(2m))上构造的椭圆曲线,椭圆曲线在有限群的加法符号定义下成为一个单向陷门函数。

在有限群上的椭圆曲线在计算上没有显而易见的几何解释,但是可以将实数域上的椭圆曲线的几何解释移植过来。为了方便理解,先从实数域上的椭圆曲线开始讲解

1.  实数域上的椭圆曲线

椭圆曲线并不是椭圆,而是与椭圆周长的方程相似的三次方程。一般,椭圆曲线方程形为:

    y2 + axy + by = x3 + cx2 + dx + e

对我们而言将方程限制为以下形式就已足够:

    y2 = x3 + ax + b                 (10.1)

对于给定的a和b,对x的每一个值,需画出y的正值和负值。

构造Abel群

将满足式(10.1)的所有点(x , y)和元素O(称为无穷远点或者零点的元素,后面会讨论这个概念)所组成的点集E(a , b)。上图中两条曲线分别可用集合E(-1 , 0)和E(1 , 1)表示。

若式(10.1)里的参数a和b满足

    4a3 + 27b2 ≠ 0                    (10.2)

则基于集合E(a , b)可以定义一个可交换群(Abel群),其加法的运算规则如下:

  1、O是加法的单位元,有O = -O;对椭圆曲线上任何一点P,有P + O = P

  2、点P (x , y)的负元-P = (x , -y)。注意这两点可以用一条垂直的线连接起来,并且P + (-P) = P - P = O

  3、要计算坐标不同的P和Q之和,则在P和Q间作一条直线并找到与曲线的第三个交点R(显然存在唯一的交点R,除非这条直线与P或者Q相切,此时分别取R = P或者R = Q,与下述5相一致)。并定义如下三点上的加法:P + Q = -R。也就是,定义P + Q 为第三个交点相对于x轴的镜像

  4、上述术语的几何解释也适用于具有相同x坐标的两个点P和 -P的情形。用一条垂直的线连接这两点,这可视为在无穷远点与曲线相交,因此有P + (-P) = O,与上述2相一致。

  5、为计算点Q的两倍,画一条切线并找到另一交点S,则Q + Q = 2Q = -S。

加法的结论

  1、对于不是互为负元的两个不同点P = (xP , yP) 和 Q = (xQ , yQ),连接它们的直线的斜率Δ= (yQ - yP)/(xQ - xP),我们可用如下表示和R = P + Q

    xR 2 - xP - xQ

    yR =Δ(xP - xR) - yP                (10.3)

  2、计算一个点与它自身相加:P + P = 2P = R,则表达式为

    

2.  Zp上的椭圆曲线

对于Zp上的素曲线,我们使用三次方程,p为素数,其中的变量和系数自集合{0,1,···,p-1}取值,运算为模p运算。

对Zp上的椭圆曲线,如同实数情形一样,方程如下:

    y2 mod p = (x3 + ax + b) mod p         (10.5)

可以证明,若(x3 + ax + b) mod p无重复因子,则基于集合Ep(a , b)可定义一个有限Abel群,这等价于以下条件:

    (4a3 + 27b2) mod p ≠ 0             (10.6)

注意,(10.6)与(10.2)具有相同的形式

Ep(a , b)上的加法运算构造与定义在实数上的椭圆曲线中的描述的代数方法是一致的。对任何点P , Q∈Ep(a , b)

  1、P + O = P

  2、若P = (xP , yP),则点(xP , -yP)是P的负元,记为 -P。例如对E23(1 , 1)上的点P = (13 , 7),有 -P = (13 , -7),而 -7 mod 23 = 16,因此,-P = (13 , 16),该点也在E23(1 , 1)上。

  3、若P = (xP , yP),Q = (xQ , yQ),且P ≠ -Q则R = P + Q = (xR , yR)由下列规则确定:

    xR =λ2 - xP - xQ

    yR =λ(xP - xR) - yP

    其中

    

  4、乘法定义为重复相加。如4P = P + P + P + P

为了确定各种椭圆曲线密码的安全性,需要知道定义在椭圆曲线上的有限Abel群中点的个数。在有限群Ep(a , b)中,点的个数N的范围是

    p + 1 - 2p1/2 ≤ N ≤ p + 1 + 2p1/2

所以,Ep(a , b)上点的个数约等于Zp中元素的个数,即p个元素。

3.  GF(2m)上的椭圆曲线

对于GF(2m)上的椭圆曲线,其变量和系数在GF(2m)内取值,且运算为GF(2m)里的运算。可以证明,GF(2m)上适合于椭圆曲线密码应用的三次方程与Zp上的三次方程有所不同,其形为:

    y2 + xy = x3 + ax2 + b                   (10.7)

可以证明,只要b ≠ 0,则可基于集合E2m(a , b)可定义一个有限Abel群。对任何点P , Q∈E2m(a , b),加法的运算规则如下:

  1、P + O = P

  2、若P = (xP , yP),则P + (xP , xP + yP) = O。点(xP , xP + yP)是P的负元,记为 -P。

  3、若P = (xP , yP),Q = (xQ , yQ),且P ≠ -Q,P ≠ Q则R = P + Q = (xR , yR)由下列规则确定:

    xR =λ2 +λ+ xP + xQ + a

    yR =λ(xP + xR) + xR + yP

    其中

    

  

  4、若P = (xP , yP),则R = 2P = (xR , yR)由下列规则确定:

    xR =λ2 +λ+ a

    yR =xP2 + (λ+ 1x)R

    其中

    λ= xP + yP/x

椭圆曲线密码学

考虑方程Q = kP,其中Q,P∈Ep(a , b),对给定的k和P计算Q比较容易,而对给定的Q和P计算k则很困难,这就是椭圆曲线的离散对数问题。

用椭圆曲线实现Diffie-Hellman密钥交换

首先,挑选一个大整数q以及式(10.5)或式(10.7)中的椭圆曲线参数a和b,这里q为素数p或者是形为2m的整数。由此可以定义出点的椭圆群Eq(a , b)

其次,在Eq(a , b)中挑选基点G = (x1 , y1),G的阶为一个非常大的数n。椭圆曲线上的点G的阶n是使 nG = 0 成立的最小正整数。Eq(a , b)和G是该密码体制中通信各方均已知的参数

用户A和用户B之间完成密钥交换过程如下:

  1、A选择一个小于n的整数nA作为其私钥,然后产生其公钥PA = nA × G。该公钥是Eq(a , b)中的一个点。B也类似地选择私钥nB并计算公钥PB

  2、A产生秘密钥k = nA × PB,B产生秘密钥k = nB × PA

    nA × PB = nA × (nB × G) = nB × (nA × G) = nB × PA

要破译这种体制,攻击者必须由G和kG计算k,这被认为很难。

椭圆曲线加/解密

首先,我们必须将要发送的消息明文m编码为形为(x , y)的点Pm,并对点Pm进行加密和其后的解密。注意,不能简单地将消息编码为点的x坐标或y坐标,因为并不是左右的坐标都在Eq(a , b)中。将消息m编码为点Pm的方法有很多种,存在比较直接的编码方法。

像密钥交换系统一样,加/解密系统也需要点G和椭圆群Eq(a , b)这些参数。每个用户选择一个私钥n,并产生公钥P = n × G

若A要将消息Pm加密后发送给B,则A随机选择一个正整数k,并产生密文Cm,该密文是一个点对:

    Cm = {kG , Pm + kPB}

注意,此处A使用了B的公钥PB,B要对密文解密,则需用第二个点减去第一个点与B的私钥之积:

    Pm + kPB - nB(kG) = Pm + k(nBG) - nB(kG) = Pm

椭圆曲线密码的安全性

ECC的安全性是建立在由kP和P确定k的困难程度之上的,这个问题称为椭圆曲线对数问题。Pollard rho方法是已知的求椭圆曲线对数最快的方法。下表从密码分析所需计算量的角度,通过给出可比较的密钥大小,比较了各种算法。在密钥长度相同时,ECC和RSA所执行的计算量差不多。因此,与具有同等安全性的RSA相比,由于ECC使用的密钥更短,所以ECC所需的计算量比RSA更小。

基于非对称密码的伪随机数生成器

由于非对称算法的速度比对称算法明显慢一些,所以非对称算法不用于生成可扩展的PRNG流,但是,对于生成短的伪随机序列,创建伪随机函数(PRT),非对称的方法还是很有用的。

Micali-Schnorr PRNG

该PRNG定义如下:

创建   选择素数p,q;n = pq;φ(n) = (p - 1)(q - 1),选择e使得gcd(e ,φ(n)) = 1。此外N = log2n + 1(n的位长度)。选择r,k使得r + k = N

种子   选择位长度为r的随机种子x0

生成   生成一个长为k × n的伪随机序列,将i从1到m,计算

      yi = xi-1e mod n

      xi = r , yi的最高有效位

      zi = k , yi的最低有效位

输出   输出序列为z1 || z2 || ··· || zm

参数n,r,e,k的选择要遵循下面6个要求:

  1、n = pq               n是两个素数的乘积,在RSA中则是密码长度

  2、1 < e < φ(n) ;gcd(e ,φ(n) ) = 1        确保映射s -> se mod n是一对一的

  3、re ≥ 2N               确保求幂运算是有取模过程

  4、r ≥ 2                 防止密码攻击

  5、k,r是8的倍数             应用方便

  6、k ≥ 8;r + k = N              所有位都有效

时间: 2024-10-24 09:57:11

椭圆曲线加密的相关文章

区块链中的密码学(三)-椭圆曲线加密算法分析

在目前密码学的非对称加密算法中,RSA算法依然是一种主流,但是随着比特币中对于一种之前不太流行的算法:椭圆加密算法(ECC)的成功应用后,这种算法得到了很大的关注和普及.有一种说法是中本聪不信任RSA算法,认为美国人在其中留有后门,而据斯诺登的爆料也确实如此.相较RSA,ECC不仅在某种程度上杜绝所谓留有后门的情况,而且加密性能/安全性都有提高.本文就带大家一窥ECC算法的天地. 鉴于ECC算法对数学知识要求比较高,不像RSA依赖于中学数学的水平,ECC用到了许多<近世代数基础>,<初等

如何给小学生讲清楚ECC椭圆曲线加密

对于RSA这套公私钥加密的思路,我以为我挺明白的,运用的娴熟自如. 当然现在RSA用的不多,而是基于ECC曲线来做签名验签,最大名鼎鼎的莫过于比特币. 可是前两天和别人讲代码,被问了ECC为什么可以用来做验签,发现自己讲不清楚. 所以做了点功课,来把这个问题讲清楚. 首先我们跳过ECC曲线是个啥这个话题,这部分我觉得对理解这个逻辑,帮助并不大,黑盒掉就好了. 因为我们是程序员,有类型这样的表述神器,非常清晰,你一点都不用害怕. 只说原理,非伪代码,比如关于曲线阶数不说不影响理解原理,我就不说了.

python实现的椭圆曲线加密

我也看得云里雾里, 但是ECC和RSA并列为非对称加密双雄, 还是很有必要了解一下的. RSA是用质数分解,ECC是用离散的椭圆方程解,安全度更高. 而且,这个ECC的加法乘法规则,和普通都不一样, 其解是属于一个什么阿贝尔群(一听就知道高级啦). from hashlib import sha256 def sha256d(string): if not isinstance(string, bytes): string = string.encode() return sha256(sha2

SSL加密解密基础

SSL简介: SSL是Secure Socket Layer(安全套接字层)的简写,显而易见,它是为了数据传输安全而发明的一种安全协议,并且是在传输层进行网络加密的一种协议. 信息安全的目标有: 保密性 完整性 可用性 为实现这三个目标的手段有: 技术层面:加密解密 服务层面:用于抵制攻击的服务. 加密解密技术: 1.对称加密:将数据分隔成固定大小的块来分别加密,并且加密和解密使用同一个秘钥的加密技术. 用途:加密大数据文件 常用的对称加密算法有: DES:Data Encryption Sta

Android--6个加密工具

越来越多的黑客盯上了移动应用,每天都会增加,因为移动应用中有黑客感兴趣的东西,如用户数据.硬编码(Hard-coded,注,固定写死,不能修改的)安全秘钥,SD 卡中以明文存放的个人信息,数据库中未加密存储的用户名和密码,收集的分析(analytics)并以明文方式发到远程服务器,这些情况都使得攻击更容易(得手). 正确使用Cryptography 工具,能保护我们的敏感数据,确保隐私和数据完整.另一方面,加密难用且容易误用( cryptography is hard to use and ea

java加密算法入门(三)-非对称加密详解

1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便大家理解.最后就是关于代码的demo,DH算法.RSA算法本文中只有最基础的用法,实际在工作中可能会涉及到密钥的转换X509EncodedKeySpec和PKCS8EncodedKeySpec,相关的demo名分别叫DH2Test,RSA2Test,已经上传GIT.如果对您有帮助,请给我个star.

转载:移动应用加密工具解析

移动互联网的普及,越来越多的移动应用陷入安全门,各种信息泄露.盗号风波层出不穷.越来越多的黑客盯上了移动应用,而SD 卡中以明文存放的个人信息,数据库中未加密存储的用户名和密码,收集的分析并以明文方式发到远程服务器,这些情况都使得黑客攻击更容易. 正确使用Cryptography 工具,能保护我们的敏感数据,确保隐私和数据完整.另一方面,加密难用且容易误用.这里给大家推荐下目前移动应用适用的加密工具. Bouncy Castle Legion of the Bouncy Castle是一个来自澳

移动应用加密工具实例解析详谈

移动互联网的普及,越来越多的移动应用陷入安全门,各种信息泄露.盗号风波层出不穷.越来越多的黑客盯上了移动应用,而SD 卡中以明文存放的个人信息,数据库中未加密存储的用户名和密码,收集的分析并以明文方式发到远程服务器,这些情况都使得黑客攻击更容易. 正确使用Cryptography 工具,能保护我们的敏感数据,确保隐私和数据完整.另一方面,加密难用且容易误用.这里给大家推荐下目前移动应用适用的加密工具. Bouncy Castle Legion of the Bouncy Castle是一个来自澳

加密与安全

1.加密算法 加密算法一般分为对称加密和非对称加密 对称加密就是加密和解密使用同一个密钥,通常称之为"Session Key "这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典型的"对称式"加密法,它的Session Key长度为56bits. 常见的对称加密算法有: DES:又被称为美国数据加密标准,1972年由美国IBM公司研制,明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8.16.24.32.40.48.56