173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

ecc公开密钥加密算法

keros@mark 2022-10-26 资讯中心

本文目录一览

SSL证书是选择ECC算法加密好还是RSA算法好呢?

ECC算法更安全一些。

RSA算法相比,ECC算法拥有哪些优势:

 更适合于移动互联网:ECC加密算法的密钥长度很短(256位),意味着占用更少的存储空间,更低的CPU开销和占用更少的带宽。随着越来越多的用户使用移动设备来完成各种网上活动,ECC加密算法为移动互联网安全提供更好的客户体验。

更好的安全性:ECC加密算法提供更强的保护,比目前的其他加密算法能更好的防止攻击,使你的网站和基础设施比用传统的加密方法更安全,为移动互联网安全提供更好的保障。

更好的性能: ECC加密算法需要较短的密钥长度来提供更好的安全,例如,256位的ECC密钥加密强度等同于3072位RSA密钥的水平(目前普通使用的RSA密钥长度是2048位)。其结果是你以更低的计算能力代价得到了更高的安全性。经国外有关权威机构测试,在Apache和IIS服务器采用ECC算法,Web服务器响应时间比RSA快十几倍。

更大的IT投资回报:ECC可帮助保护您的基础设施的投资,提供更高的安全性,并快速处理爆炸增长的移动设备的安全连接。 ECC的密钥长度增加速度比其他的加密方法都慢(一般按128位增长,而 RSA则是倍数增长,如:1024 –2048--4096),将延长您现有硬件的使用寿命,让您的投资带来更大的回报。

应用说明:如果对浏览器信任没有要求,可以选择ECC证书,如果存在较低的浏览器使用那么必须采用RSA证书。

十大常见密码加密方式

一、密钥散列

采用MD5或者SHA1等散列算法,对明文进行加密。严格来说,MD5不算一种加密算法,而是一种摘要算法。无论多长的输入,MD5都会输出一个128位(16字节)的散列值。而SHA1也是流行的消息摘要算法,它可以生成一个被称为消息摘要的160位(20字节)散列值。MD5相对SHA1来说,安全性较低,但是速度快;SHA1和MD5相比安全性高,但是速度慢。

二、对称加密

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。

三、非对称加密

非对称加密算法是一种密钥的保密方法,它需要两个密钥来进行加密和解密,这两个密钥是公开密钥和私有密钥。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。非对称加密算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。

四、数字签名

数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。

五、直接明文保存

早期很多这样的做法,比如用户设置的密码是“123”,直接就将“123”保存到数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。

六、使用MD5、SHA1等单向HASH算法保护密码

使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式,但随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。

七、特殊的单向HASH算法

由于单向HASH算法在保护密码方面不再安全,于是有些公司在单向HASH算法基础上进行了加盐、多次HASH等扩展,这些方式可以在一定程度上增加破解难度,对于加了“固定盐”的HASH算法,需要保护“盐”不能泄露,这就会遇到“保护对称密钥”一样的问题,一旦“盐”泄露,根据“盐”重新建立彩虹表可以进行破解,对于多次HASH,也只是增加了破解的时间,并没有本质上的提升。

八、PBKDF2

该算法原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。

九、BCrypt

BCrypt 在1999年就产生了,并且在对抗 GPU/ASIC 方面要优于 PBKDF2,但是我还是不建议你在新系统中使用它,因为它在离线破解的威胁模型分析中表现并不突出。

十、SCrypt

SCrypt 在如今是一个更好的选择:比 BCrypt设计得更好(尤其是关于内存方面)并且已经在该领域工作了 10 年。另一方面,它也被用于许多加密货币,并且我们有一些硬件(包括 FPGA 和 ASIC)能实现它。 尽管它们专门用于采矿,也可以将其重新用于破解。

首次将椭圆曲线用于密码学,建立公开密钥加密的演算法是在那一年?

椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。

椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。

椭圆曲线密码学:

椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。

ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全。ECC的另一个优势是可以定义群之间的双线性映射。

基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。其缺点是同长度密钥下加密和解密操作的实现比其他机制花费的时间长。

但由于可以使用更短的密钥达到同级的安全程度,所以同级安全程度下速度相对更快。一般认为160比特的椭圆曲线密钥提供的安全强度与1024比特RSA密钥相当。

ECC 算法简介

与 RSA(Ron Rivest,Adi Shamir,Len Adleman 三位天才的名字)一样,ECC(Elliptic Curves Cryptography,椭圆曲线加密)也属于公开密钥算法。

一、从平行线谈起

平行线,永不相交。没有人怀疑把:)不过到了近代这个结论遭到了质疑。平行线会不会在很远很远的地方相交了?事实上没有人见到过。所以“平行线,永不相交”只是假设(大家想想初中学习的平行公理,是没有证明的)。

既然可以假设平行线永不相交,也可以假设平行线在很远很远的地方相交了。即平行线相交于无穷远点P∞(请大家闭上眼睛,想象一下那个无穷远点P∞,P∞是不是很虚幻,其实与其说数学锻炼人的抽象能力,还不如说是锻炼人的想象力)。

给个图帮助理解一下:

直线上出现P∞点,所带来的好处是所有的直线都相交了,且只有一个交点。这就把直线的平行与相交统一了。为与无穷远点相区别把原来平面上的点叫做平常点。

以下是无穷远点的几个性质。

直线 L 上的无穷远点只能有一个。(从定义可直接得出)

平面上一组相互平行的直线有公共的无穷远点。(从定义可直接得出)

平面上任何相交的两直线 L1、L2 有不同的无穷远点。(否则 L1 和 L2 有公共的无穷远点 P ,则 L1 和 L2 有两个交点 A、P,故假设错误。)

平面上全体无穷远点构成一条无穷远直线。(自己想象一下这条直线吧)

平面上全体无穷远点与全体平常点构成射影平面。

二、射影平面坐标系

射影平面坐标系是对普通平面直角坐标系(就是我们初中学到的那个笛卡儿平面直角坐标系)的扩展。我们知道普通平面直角坐标系没有为无穷远点设计坐标,不能表示无穷远点。为了表示无穷远点,产生了射影平面坐标系,当然射影平面坐标系同样能很好的表示旧有的平常点(数学也是“向下兼容”的)。

我们对普通平面直角坐标系上的点A的坐标(x, y)做如下改造:

令 x=X/Z ,y=Y/Z(Z≠0);则 A 点可以表示为(X:Y:Z)。

变成了有三个参量的坐标点,这就对平面上的点建立了一个新的坐标体系。

例 2.1:求点(1,2)在新的坐标体系下的坐标。

解:

∵X/Z=1 ,Y/Z=2(Z≠0)

∴X=Z,Y=2Z

∴坐标为(Z:2Z:Z),Z≠0。

即(1:2:1)(2:4:2)(1.2:2.4:1.2)等形如(Z:2Z:Z),Z≠0 的坐标,都是(1,2)在新的坐标体系下的坐标。

我们也可以得到直线的方程 aX+bY+cZ=0(想想为什么?提示:普通平面直角坐标系下直线一般方程是 ax+by+c=0)。

新的坐标体系能够表示无穷远点么?那要让我们先想想无穷远点在哪里。根据上一节的知识,我们知道无穷远点是两条平行直线的交点。那么,如何求两条直线的交点坐标?这是初中的知识,就是将两条直线对应的方程联立求解。

平行直线的方程是:

aX+bY+c1Z =0;

aX+bY+c2Z =0  (c1≠c2); (为什么?提示:可以从斜率考虑,因为平行线斜率相同);

将二方程联立,求解。有

c2Z= c1Z= -(aX+bY)

∵c1≠c2

∴Z=0 

∴aX+bY=0

所以无穷远点就是这种形式(X:Y:0)表示。注意,平常点 Z≠0,无穷远点 Z=0,因此无穷远直线对应的方程是 Z=0。

例 2.2:求平行线 L1:X+2Y+3Z=0 与 L2:X+2Y+Z=0 相交的无穷远点。

解:

因为 L1∥L2

所以有 Z=0, X+2Y=0

所以坐标为(-2Y:Y:0),Y≠0。

即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0 的坐标,都表示这个无穷远点。

看来这个新的坐标体系能够表示射影平面上所有的点,我们就把这个能够表示射影平面上所有点的坐标体系叫做射影平面坐标系。

练习:

1、求点A(2,4) 在射影平面坐标系下的坐标。

2、求射影平面坐标系下点(4.5:3:0.5),在普通平面直角坐标系下的坐标。

3、求直线X+Y+Z=0上无穷远点的坐标。

4、判断:直线aX+bY+cZ=0上的无穷远点 和 无穷远直线与直线aX+bY=0的交点,是否是同一个点?

三、椭圆曲线

上一节,我们建立了射影平面坐标系,这一节我们将在这个坐标系下建立椭圆曲线方程。因为我们知道,坐标中的曲线是可以用方程来表示的(比如:单位圆方程是 x2+y2=1)。椭圆曲线是曲线,自然椭圆曲线也有方程。

椭圆曲线的定义:

一条椭圆曲线是在射影平面上满足如下方程的所有点的集合,且曲线上的每个点都是非奇异(或光滑)的。

Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3                 [3-1]

定义详解:

Y2Z+a1XYZ+a3YZ2 = X3+a2X2Z+a4XZ2+a6Z3 是 Weierstrass 方程(维尔斯特拉斯,Karl Theodor Wilhelm Weierstrass,1815-1897),是一个齐次方程。

椭圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程(计算椭圆周长的方程,我没有见过,而对椭圆线 积分 (设密度为1)是求不出来的),故得名。

我们来看看椭圆曲线是什么样的。

所谓“非奇异”或“光滑”的,在数学中是指曲线上任意一点的偏导数 Fx(x,y,z),Fy(x,y,z),Fz(x,y,z) 不能同时为0。如果你没有学过高等数学,可以这样理解这个词,即满足方程的任意一点都存在切线。下面两个方程都不是椭圆曲线,尽管他们是方程 [3-1] 的形式,因为他们在(0:0:1)点处(即原点)没有切线。

椭圆曲线上有一个无穷远点O∞(0:1:0),因为这个点满足方程[3-1]。

知道了椭圆曲线上的无穷远点。我们就可以把椭圆曲线放到普通平面直角坐标系上了。因为普通平面直角坐标系只比射影平面坐标系少无穷远点。我们在普通平面直角坐标系上,求出椭圆曲线上所有平常点组成的曲线方程,再加上无穷远点O∞(0:1:0),不就构成椭圆曲线了么?

我们设 x=X/Z,y=Y/Z 代入方程 [3-1] 得到:

y2+a1xy+a3y = x3+a2x2+a4x+a6                            [3-2]

也就是说满足方程 [3-2] 的光滑曲线加上一个无穷远点O∞,组成了椭圆曲线。为了方便运算,表述,以及理解,今后论述椭圆曲线将主要使用 [3-2] 的形式。

本节的最后,我们谈一下求椭圆曲线一点的切线斜率问题。由椭圆曲线的定义可以知道,椭圆曲线是光滑的,所以椭圆曲线上的平常点都有切线。而切线最重要的一个参数就是斜率 k 。

例 3.1:求椭圆曲线方程 y2+a1xy+a3y=x3+a2x2+a4x+a6上,平常点 A(x,y) 的切线的斜率 k 。

解:

F(x,y)= y2+a1xy+a3y-x3-a2x2-a4x-a6

求偏导数

Fx(x,y)= a1y-3x2-2a2x-a4

Fy(x,y)= 2y+a1x+a3

则导数为:

f'(x)=- Fx(x,y)/ Fy(x,y)=-( a1y-3x2-2a2x-a4)/(2y+a1x +a3) = (3x2+2a2x+a4-a1y) /(2y+a1x +a3)

所以

k=(3x2+2a2x+a4-a1y) /(2y+a1x +a3)             [3-3]

看不懂解题过程没有关系,记住结论[3-3]就可以了。

练习:      

1、将给出图例的椭圆曲线方程Y2Z=X3-XZ2 和Y2Z=X3+XZ2+Z3转换成普通平面直角坐标系上的方程。

四、椭圆曲线上的加法

上一节,我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。我们能不能建立一个类似于在实数轴上加法的运算法则呢?天才的数学家找到了这一运算法则

自从近世纪代数学引入了群、环、域的概念,使得代数运算达到了高度的统一。比如数学家总结了普通加法的主要特征,提出了加群(也叫交换群,或 Abel(阿贝尔)群),在加群的眼中。实数的加法和椭圆曲线的上的加法没有什么区别。这也许就是数学抽象把。关于群以及加群的具体概念请参考近世代数方面的数学书。

运算法则:任意取椭圆曲线上两点 P、Q (若 P、Q两点重合,则做 P 点的切线)做直线交于椭圆曲线的另一点 R’,过 R’ 做 y 轴的平行线交于 R。我们规定 P+Q=R。(如图)

法则详解:

这里的 + 不是实数中普通的加法,而是从普通加法中抽象出来的加法,他具备普通加法的一些性质,但具体的运算法则显然与普通加法不同。

根据这个法则,可以知道椭圆曲线无穷远点 O∞ 与椭圆曲线上一点 P 的连线交于 P’,过 P’ 作 y 轴的平行线交于 P,所以有 无穷远点 O∞ + P = P 。这样,无穷远点 O∞ 的作用与普通加法中零的作用相当(0+2=2),我们把无穷远点 O∞ 称为零元。同时我们把 P’ 称为 P 的负元(简称,负P;记作,-P)。(参见下图)

根据这个法则,可以得到如下结论 :如果椭圆曲线上的三个点 A、B、C,处于同一条直线上,那么他们的和等于零元,即 A+B+C= O∞

k 个相同的点 P 相加,我们记作 kP。如下图:P+P+P = 2P+P = 3P。

下面,我们利用 P、Q点的坐标 (x1,y1),(x2,y2),求出 R=P+Q 的坐标 (x4,y4)。

例 4.1:求椭圆曲线方程 y2+a1xy+a3y=x3+a2x2+a4x+a6 上,平常点 P(x1,y1),Q(x2,y2) 的和 R(x4,y4) 的坐标。

解:

(1)先求点 -R(x3,y3)

因为 P, Q, -R 三点共线,故设共线方程为

y=kx+b

其中,若 P≠Q (P,Q两点不重合),则直线斜率

k=(y1-y2)/(x1-x2)

若 P=Q (P,Q两点重合),则直线为椭圆曲线的切线,

故由例 3.1 可知:

k=(3x2+2a2x+a4 -a1y) /(2y+a1x+a3)

因此 P, Q, -R 三点的坐标值就是以下方程组的解:

y2+a1xy+a3y=x3+a2x2+a4x+a6                                   [1]

y=(kx+b)                                                                      [2]

将 [2] 代入[1] 有

(kx+b)2+a1x(kx+b)+a3(kx+b) =x3+a2x2+a4x+a6        [3]

对 [3] 化为一般方程,根据三次方程根与系数关系(若方程x³+ax²+bx+c=0 的三个根是 x1、x2、x3,则: x1+x2+x3=-a,x1x2+x2x3+x3x1=b,x1x2x2=-c)

所以

-(x1+x2+x3)=a2-ka1-k2

x3=k2+ka1+a2+x1+x2    --------------------- 求出点 -R 的横坐标

因为

k=(y1-y3)/(x1-x3)

y3=y1-k(x1-x3)    ------------------------------ 求出点 -R 的纵坐标

(2)利用 -R 求 R

显然有

x4=x3=k2+ka1+a2+x1+x2   -------------- 求出点 R 的横坐标

而 y3 y4 为 x=x4 时 方程 y2+a1xy+a3y=x3+a2x2+a4x+a6 的解化为一般方程 y2+(a1x+a3)y-(x3+a2x2+a4x+a6)=0 , 根据二次方程根与系数关系(如果方程 ax²+bx+c=0 的两根为 x1、x2,那么 x1+x2=-b/a,x1x2=c/a)

得:

-(a1x+a3)=y3+y4

y4=-y3-(a1x+a3)=k(x1-x4)-y1-(a1x4+a3)   ----- 求出点 R 的纵坐标

即:

x4=k2+ka1+a2+x1+x2

y4=k(x1-x4)-y1-a1x4-a3

本节的最后,提醒大家注意一点,以前提供的图像可能会给大家产生一种错觉,即椭圆曲线是关于 x 轴对称的。事实上,椭圆曲线并不一定关于 x 轴对称。如下图的 y2-xy=x3+1

五、密码学中的椭圆曲线

我们现在基本上对椭圆曲线有了初步的认识,这是值得高兴的。但请大家注意,前面学到的椭圆曲线是连续的,并不适合用于加密。所以,我们必须把椭圆曲线变成离散的点。

让我们想一想,为什么椭圆曲线为什么连续?是因为椭圆曲线上点的坐标,是实数的(也就是说前面讲到的椭圆曲线是定义在实数域上的),实数是连续的,导致了曲线的连续。因此,我们要把椭圆曲线定义在有限域上(顾名思义,有限域是一种只有由有限个元素组成的域)。

域的概念是从我们的有理数,实数的运算中抽象出来的,严格的定义请参考近世代数方面的数。简单的说,域中的元素同有理数一样,有自己得加法、乘法、除法、单位元(1),零元(0),并满足交换率、分配率。

下面,我们给出一个有限域 Fp,这个域只有有限个元素。

Fp 中只有 p(p为素数)个元素 0, 1, 2 …… p-2, p-1

Fp 的加法(a+b)法则是 a+b≡c (mod p) ,即 (a+c)÷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) 的图像

是不是觉得不可思议?椭圆曲线,怎么变成了这般模样,成了一个一个离散的点?椭圆曲线在不同的数域中会呈现出不同的样子,但其本质仍是一条椭圆曲线。举一个不太恰当的例子,好比是水,在常温下,是液体;到了零下,水就变成冰,成了固体;而温度上升到一百度,水又变成了水蒸气。但其本质仍是 H2O。

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

1. 无穷远点 O∞ 是零元,有 O∞ + O∞ = O∞,O∞ + P = P

2. P(x,y) 的负元是 (x,-y),有 P + (-P) = O∞

3. P(x1,y1), Q(x2,y2) 的和 R(x3,y3) 有如下关系:

x3≡k2-x1-x2(mod p) 

y3≡k(x1-x3)-y1(mod p)

    其中

若 P=Q 则 k=(3x2+a)/2y1 

若 P≠Q 则 k=(y2-y1)/(x2-x1)

例 5.1:已知 E23(1,1) 上两点 P(3,10),Q(9,7),求 (1)-P,(2)P+Q,(3) 2P。

解:

(1)  –P的值为(3,-10)

(2)  k=(7-10)/(9-3)=-1/2

2 的乘法逆元为 12, 因为 2*12≡1 (mod 23)

k≡-1*12 (mod 23)

故 k=11

x=112-3-9=109≡17 (mod 23)

y=11[3-(-6)]-10=89≡20 (mod 23)

故 P+Q 的坐标为 (17,20)

3)  k=[3(32)+1]/(2*10)=1/4≡6 (mod 23)

x=62-3-3=30≡20 (mod 23)

y=6(3-7)-10=-34≡12 (mod 23)

故 2P 的坐标为 (7,12)

最后,我们讲一下椭圆曲线上的点的阶。如果椭圆曲线上一点 P,存在最小的正整数 n,使得数乘 nP=O∞,则将 n 称为 P 的阶,若 n 不存在,我们说 P 是无限阶的。 事实上,在有限域上定义的椭圆曲线上所有的点的阶 n 都是存在的(证明,请参考近世代数方面的书)

练习:

1. 求出 E11(1,6) 上所有的点。

2.已知 E11(1,6) 上一点 G(2,7),求 2G 到 13G 所有的值。

六、椭圆曲线上简单的加密/解密

公开密钥算法总是要基于一个数学上的难题。比如 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(key point)就是私有密钥。

现在我们描述一个利用椭圆曲线进行加密通信的过程:

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(random)。

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 间传送的明文信息。

密码学中,描述一条 Fp 上的椭圆曲线,常用到六个参量:

T=(p,a,b,G,n,h)

p 、a 、b 用来确定一条椭圆曲线,G 为基点,n 为点 G 的阶,h 是椭圆曲线上所有点的个数 m 与 n 相除的整数部分。这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件:

1、p 当然越大越安全,但越大,计算速度会变慢,200 位左右可以满足一般安全要求;

2、p≠n×h;

3、pt≠1 (mod n),1≤t20;

4、4a3+27b2≠0 (mod p);

5、n 为素数;

6、h≤4。

七、椭圆曲线签名在软件保护的应用

我们知道将公开密钥算法作为软件注册算法的好处是:黑客很难通过跟踪验证算法得到注册机。下面,将简介一种利用 Fp(a,b) 椭圆曲线进行软件注册的方法。

软件作者按如下方法制作注册机(也可称为签名过程)

1、选择一条椭圆曲线 Ep(a,b) 和基点 G;

2、选择私有密钥 k;

3、产生一个随机整数 r ;

4、将用户名和点 R 的坐标值 x,y 作为参数,计算 SHA(Secure Hash Algorithm 安全散列算法,类似于 MD5)值,即 Hash=SHA(username,x,y);

5、计算 sn≡r - Hash * k (mod n)

6、将 sn 和 Hash 作为用户名 username 的序列号

软件验证过程如下:(软件中存有椭圆曲线 Ep(a,b) 和基点 G 以及公开密钥 K)

1、从用户输入的序列号中,提取 sn 以及 Hash;

2、计算点 R≡sn*G+Hash*K ( mod p ),如果 sn、Hash 正确,其值等于软件作者签名过程中点 R(x,y) 的坐标,

因为 sn≡r-Hash*k (mod n)

所以 sn*G+Hash*K=(r-Hash*k)*G+Hash*K=rG-Hash*kG+Hash*K=rG-Hash*K+Hash*K=rG=R;

3、将用户名和点 R 的坐标值 x,y 作为参数,计算 H=SHA(username,x,y);

4、如果 H=Hash 则注册成功,如果 H≠Hash ,则注册失败(为什么?提示注意点 R 与 Hash 的关联性)。

简单对比一下两个过程:

作者签名用到了:椭圆曲线 Ep(a,b),基点 G,私有密钥 k,及随机数 r。

软件验证用到了:椭圆曲线 Ep(a,b),基点 G,公开密钥 K。

黑客要想制作注册机,只能通过软件中的 Ep(a,b),点 G,公开密钥 K ,并利用 K=kG 这个关系获得 k 才可以,而求 k 是很困难的。

练习:

下面也是一种常于软件保护的注册算法,请认真阅读,并试回答签名过程与验证过程都用到了那些参数,黑客想制作注册机,应该如何做。

软件作者按如下方法制作注册机(也可称为签名过程)

1、选择一条椭圆曲线 Ep(a,b),和基点 G;

2、选择私有密钥 k;

3、产生一个随机整数 r;

4、将用户名作为参数,计算 Hash=SHA(username);

5、计算 x’=x  (mod n)

6、计算 sn≡(Hash+x’*k)/r (mod n)

7、将 sn 和 x’ 作为用户名 username 的序列号

软件验证过程如下:(软件中存有椭圆曲线 Ep(a,b) 和基点 G 以及公开密钥 K)

1、从用户输入的序列号中,提取 sn 以及 x’;

2、将用户名作为参数,计算 Hash=SHA(username);

3、计算 R=(Hash*G+x’*K)/sn,如果 sn、Hash 正确,其值等于软件作者签名过程中点 R(x,y)

因为 sn≡(Hash+x’*k)/r (mod n)

所以 (Hash*G+x’*K)/sn=(Hash*G+x’*K)/[(Hash+x’*k)/r]=(Hash*G+x’*K)/[(Hash*G+x’*k*G)/(rG)]=rG*[(Hash*G+x’*K)/(Hash*G+x’*K)]=rG=R (mod p)

4、v≡x (mod n)

5、如果 v=x’ 则注册成功。如果 v≠x’ ,则注册失败。

主要参考文献

张禾瑞,《近世代数基础》,高等 教育 出版社,1978

闵嗣鹤 严士健,《初等数论》,高等教育出版社,1982

段云所,《网络信息安全》第三讲,北大计算机系

Michael Rosing ,chapter5《Implementing Elliptic Curve Cryptography》,Softbound,1998

《SEC 1: Elliptic Curve Cryptography》,Certicom Corp.,2000

《IEEE P1363a / D9》,2001

非对称加密算法 (RSA、DSA、ECC、DH)

非对称加密需要两个密钥:公钥(publickey) 和私钥 (privatekey)。公钥和私钥是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以称为非对称加密。

非对称加密算法的保密性好,它消除了最终用户交换密钥的需要。但是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。

算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。

RSA、Elgamal、背包算法、Rabin、D-H、ECC (椭圆曲线加密算法)。使用最广泛的是 RSA 算法,Elgamal 是另一种常用的非对称加密算法。

收信者是唯一能够解开加密信息的人,因此收信者手里的必须是私钥。发信者手里的是公钥,其它人知道公钥没有关系,因为其它人发来的信息对收信者没有意义。

客户端需要将认证标识传送给服务器,此认证标识 (可能是一个随机数) 其它客户端可以知道,因此需要用私钥加密,客户端保存的是私钥。服务器端保存的是公钥,其它服务器知道公钥没有关系,因为客户端不需要登录其它服务器。

数字签名是为了表明信息没有受到伪造,确实是信息拥有者发出来的,附在信息原文的后面。就像手写的签名一样,具有不可抵赖性和简洁性。

简洁性:对信息原文做哈希运算,得到消息摘要,信息越短加密的耗时越少。

不可抵赖性:信息拥有者要保证签名的唯一性,必须是唯一能够加密消息摘要的人,因此必须用私钥加密 (就像字迹他人无法学会一样),得到签名。如果用公钥,那每个人都可以伪造签名了。

问题起源:对1和3,发信者怎么知道从网上获取的公钥就是真的?没有遭受中间人攻击?

这样就需要第三方机构来保证公钥的合法性,这个第三方机构就是 CA (Certificate Authority),证书中心。

CA 用自己的私钥对信息原文所有者发布的公钥和相关信息进行加密,得出的内容就是数字证书。

信息原文的所有者以后发布信息时,除了带上自己的签名,还带上数字证书,就可以保证信息不被篡改了。信息的接收者先用 CA给的公钥解出信息所有者的公钥,这样可以保证信息所有者的公钥是真正的公钥,然后就能通过该公钥证明数字签名是否真实了。

RSA 是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。

A 要把信息发给 B 为例,确定角色:A 为加密者,B 为解密者。首先由 B 随机确定一个 KEY,称之为私钥,将这个 KEY 始终保存在机器 B 中而不发出来;然后,由这个 KEY 计算出另一个 KEY,称之为公钥。这个公钥的特性是几乎不可能通过它自身计算出生成它的私钥。接下来通过网络把这个公钥传给 A,A 收到公钥后,利用公钥对信息加密,并把密文通过网络发送到 B,最后 B 利用已知的私钥,就能对密文进行解码了。以上就是 RSA 算法的工作流程。

由于进行的都是大数计算,使得 RSA 最快的情况也比 DES 慢上好几倍,无论是软件还是硬件实现。速度一直是 RSA 的缺陷。一般来说只用于少量数据加密。RSA 的速度是对应同样安全级别的对称密码算法的1/1000左右。

比起 DES 和其它对称算法来说,RSA 要慢得多。实际上一般使用一种对称算法来加密信息,然后用 RSA 来加密比较短的公钥,然后将用 RSA 加密的公钥和用对称算法加密的消息发送给接收方。

这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,否则的话可以越过 RSA 来直接攻击对称密码。

和其它加密过程一样,对 RSA 来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡中间人攻击。假设 A 交给 B 一个公钥,并使 B 相信这是A 的公钥,并且 C 可以截下 A 和 B 之间的信息传递,那么 C 可以将自己的公钥传给 B,B 以为这是 A 的公钥。C 可以将所有 B 传递给 A 的消息截下来,将这个消息用自己的密钥解密,读这个消息,然后将这个消息再用 A 的公钥加密后传给 A。理论上 A 和 B 都不会发现 C 在偷听它们的消息,今天人们一般用数字认证来防止这样的攻击。

(1) 针对 RSA 最流行的攻击一般是基于大数因数分解。1999年,RSA-155 (512 bits) 被成功分解,花了五个月时间(约8000 MIPS 年)和224 CPU hours 在一台有3.2G 中央内存的 Cray C916计算机上完成。

RSA-158 表示如下:

2009年12月12日,编号为 RSA-768 (768 bits, 232 digits) 数也被成功分解。这一事件威胁了现通行的1024-bit 密钥的安全性,普遍认为用户应尽快升级到2048-bit 或以上。

RSA-768表示如下:

(2) 秀尔算法

量子计算里的秀尔算法能使穷举的效率大大的提高。由于 RSA 算法是基于大数分解 (无法抵抗穷举攻击),因此在未来量子计算能对 RSA 算法构成较大的威胁。一个拥有 N 量子位的量子计算机,每次可进行2^N 次运算,理论上讲,密钥为1024位长的 RSA 算法,用一台512量子比特位的量子计算机在1秒内即可破解。

DSA (Digital Signature Algorithm) 是 Schnorr 和 ElGamal 签名算法的变种,被美国 NIST 作为 DSS (DigitalSignature Standard)。 DSA 是基于整数有限域离散对数难题的。

简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名,如果数据和签名不匹配则认为验证失败。数字签名的作用就是校验数据在传输过程中不被修改,数字签名,是单向加密的升级。

椭圆加密算法(ECC)是一种公钥加密算法,最初由 Koblitz 和 Miller 两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成 Abel 加法群上椭圆离散对数的计算困难性。公钥密码体制根据其所依据的难题一般分为三类:大整数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类。

ECC 的主要优势是在某些情况下它比其他的方法使用更小的密钥 (比如 RSA),提供相当的或更高等级的安全。ECC 的另一个优势是可以定义群之间的双线性映射,基于 Weil 对或是 Tate 对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。

ECC 被广泛认为是在给定密钥长度的情况下,最强大的非对称算法,因此在对带宽要求十分紧的连接中会十分有用。

比特币钱包公钥的生成使用了椭圆曲线算法,通过椭圆曲线乘法可以从私钥计算得到公钥, 这是不可逆转的过程。

Java 中 Chipher、Signature、KeyPairGenerator、KeyAgreement、SecretKey 均不支持 ECC 算法。

DH,全称为"Diffie-Hellman",它是一种确保共享 KEY 安全穿越不安全网络的方法,也就是常说的密钥一致协议。由公开密钥密码体制的奠基人 Diffie 和 Hellman 所提出的一种思想。简单的说就是允许两名用户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。也就是由甲方产出一对密钥 (公钥、私钥),乙方依照甲方公钥产生乙方密钥对 (公钥、私钥)。

以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥 (SecretKey) 对数据加密。这样,在互通了本地密钥 (SecretKey) 算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。不单单是甲乙双方两方,可以扩展为多方共享数据通讯,这样就完成了网络交互数据的安全通讯。

具体例子可以移步到这篇文章: 非对称密码之DH密钥交换算法

参考:

产品的开发快则一个月,慢则一年,那么如何杜绝市面上各种山寨也成为了我们必须要关注的问题,加密芯片可以做到这点,在保障开发者权益的同时也保护了消费者权益,KEROS加密芯片作为该领域的领头者,一直在尽力贡献一份力。特点如下:接口:标准I2C协议接口;算法: 标准aes256 / KAS算法;特殊接口:Random Stream Cipher for Interface;工作温度:工业级 -40℃ ~+85℃;频率:400Khz;存储:2K字节EEPROM(可选);电压:1.8V~3.6V;封装:SOT23-6,SOP8,TDFN-6。ecc公开密钥加密算法的介绍就聊到这里吧,感谢你花时间阅读本站内容,谢谢。

本文标签:ecc公开密钥加密算法

产品列表
产品封装
友情链接