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

ecc椭圆曲线加密算法原理

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

今天给各位分享ecc椭圆曲线加密算法原理的知识,如果能碰巧解决你现在面临的问题,别忘了关注本站。

本文目录一览

密码学基础2:椭圆曲线密码学原理分析

首先要说明的一点是,椭圆曲线不是椭圆。椭圆方程是下面这样的:

而通常我们讨论的椭圆曲线的曲线方程是一个二元三次方程,它有多种形式,在椭圆曲线密码体系中,最常用的是如下的Weierstrass通用式(curve25519 等其他类型的椭圆曲线本文不讨论):

之所以取名叫椭圆曲线,是因为该曲线方程跟求椭圆弧长的积分公式相似。从曲线方程和图像易知,椭圆曲线关于X轴对称。判定式不等于零是为了椭圆曲线不存在奇异点,即处处光滑可导,这样才能进行椭圆曲线上的加法运算。下面是一些适合用于加密的椭圆曲线,其中 。

椭圆曲线加密算法涉及数学中的群论、有限域等内容,这节简要介绍下相关数学理论。亦可以跳过直接看第3节,遇到相关名词再查阅即可。

在讨论群之前,先说说集合。集合简单来说就是把一堆东西放在一起,如自然数集合。当然光有一堆东西还不够,东西之间相互作用才能更好的描述大千世界。于是,自然数集合通过加减运算衍生出整数集合、整数集合经过乘除又可以衍生出有理数,而后通过无理数的加入又衍生出实数集合、负数开方引入了复数集合。群则是集合和一个二元运算。

而如果再满足交换律,则该群就被称为是一个阿贝尔群。

根据群的定义,整数的加法运算 就是一个群,而且还是一个阿贝尔群。而自然数的加法运算 就不是一个群。整数加法运算构成群,因为它满足群的定义:整数加法的封闭性、结合律、交换律都成立。整数加法运算中单位元是 0。所有整数 n 都有加法逆元 -n。

在密码学中一般都需要一个有限的群,定义如下:

为了使一个结构同时支持四种基本算术(即加减乘除),我们需要一个包含加法和乘法群的集合,这就是域。当一个集合为域的时候,我们就能在其中进行基本算术运算了。

所以域中元素只要形成加法群和乘法群并满足分配律就行,因为群中元素都有逆元,减法/除法可以转换为加/乘元素的逆元实现。实数集合 是一个域,加法群中单位元是 0,每个实数 都有加法逆元 ,乘法群中单位元是 ,每个非零实数都有乘法逆元 。而整数集合就不是域,因为大部分元素没有乘法逆元,不能构成一个乘法群。

在密码学中,通常只对有限元素的域感兴趣,这种域称为有限域(Finite Field)。有限域中我们经常用到的是素数域,所谓素数域,就是阶为素数的有限域。 比如当 p 为素数时,整数环 就是一个素数域,可以记作 。在素数域 中进行算术运算,需要遵守整数环的规则,即加法是模 p 加法,而乘法是模 p 乘法。

例如对于 有:

椭圆曲线上的点经过一种特定的加法运算可以让椭圆曲线在实数域构成一个群。

无穷远点 :定义一个无穷远点 ,即经过椭圆上任意一点的与X轴垂直的直线都经过该点。可能有人疑惑垂直于X轴的直线是平行线,为啥可以定义为都经过 点?因为在非欧几何中,可认为平行线在无穷远处会交于一点。

椭圆曲线点加法 :椭圆曲线上经过 和 两个点的直线与椭圆曲线的交点记作 ,根据定义有 以及 。继而定义椭圆曲线点加法: ,即加法结果是经过点 且与 X 轴垂直的直线与椭圆曲线的另外一个交点,简单来说,就是交点 关于 X 轴的对称点。

椭圆曲线群:定义为椭圆曲线在实数域上的点集以及点加法

由此可知,椭圆曲线上的点在椭圆曲线加法运算上构成了一个阿贝尔群。增加了单位元后,椭圆曲线方程改为:

由定义可知, ,所以,最终加法只需要计算交点 的逆元 即可。 几种特殊情况说明:

上一节定义了椭圆曲线几何上意义的点加法,需要转换为代数加法以方便计算。 要注意的是,这并不是两个点的坐标简单相加 。

假设直线 PQ 的斜率 ,然后将直线方程 代入曲线可以得到: , 转换成标准式,根据韦达定理 ,即而可求得 ,想了解具体推导过程的可参见 [cubic-equations] 。

斜率 计算需要区分两种情况,当 P=Q 时求椭圆曲线在 P 点的切线斜率(求导)即可:

可以简单验证,比如椭圆曲线是 ,通过参考资料1的 [可视化工具] 可得 。容易验证,与代数加法公式计算结果一致。

对于特殊情况 中有一个是切点的情况,如 ,计算方式不变,易得 。而对于特殊情况 ,采用切线斜率亦可验证公式正确。

在实际加密算法中,我们通常需要多次通过椭圆曲线加法来实现一次加密,如下图所示:

图中打点的过程就是:

而在实际加密算法中,我们常常是使用一个点自己叠加,即初始直线变成椭圆曲线的切线即可,像下面这样:

我们定义对一个点 P 进行 n 次加法得到 nP,称之为标量乘法。如前面例子中 。

不过,当 n 很大时,执行 n 次加法需要 时间,效率有问题。 因为椭圆曲线点加法在实数域构成阿贝尔群,满足交换律和结合律,于是可以通过 [Double-and-add] 算法进行优化 。比如 ,其二进制表示为 ,通过优化只要7次倍乘和4次加法计算即可,时间复杂度降到 。这是一个很好的单向函数,正向计算容易,而反向和蛮力计算复杂。

令 ,则 Q 作为公钥,n 为私钥。如果要破解该密钥,问题就是 "Q = nP,如果已知 P 和 Q,如何求解 n"? 这个问题是比较困难的。不过由于在实数域上曲线连续,可能会更容易找到一些规律进行破解。而且实数域上数值大小没有限制、浮点数等问题而导致计算效率问题,在实际应用中常将椭圆曲线限制到一个有限域内,将曲线变成离散的点,这样即方便了计算也加大了破解难度。

前面提到为了安全性和便于实现,需要将椭圆曲线限制到一个有限域内,通常用的是素数域 (即对于点 为素数)。于是破解就会变成一个离散对数问题,这比连续曲线上的对数问题会难很多。素数域下椭圆曲线定义如下:

下面是曲线 和 的图像。可以发现,椭圆曲线变成了离散的点,且关于 对称。

定义 上椭圆曲线点加法 如下,公式跟实数域上相比只是多了模 操作。

斜率 m 计算同样分两种情况:

椭圆曲线在素数域 上的点加法依然构成阿贝尔群。单位元依旧是无穷远点,元素 的逆元变成 。而交换律、结合律、封闭性则可以通过素域上的模加法、模乘法来证明 。实数域的椭圆曲线点加法定义是有明确几何意义的,从几何上好证明。而椭圆曲线在 就没有明显的几何意义了,观察可发现 三点满足 ,群律的证明过于繁琐,略去(其实是没有找到一个简易的证明)。

以前面曲线为例, ,则有 ,且 和 都在椭圆曲线上。从图形上看, 在直线 上。

在有限域下,椭圆曲线加法群的元素是有限的,元素数目就是群的阶。

如椭圆曲线 ,其在素数域 中元素有 ,阶为24(23个素数域中的点 + 1个无穷远点),如果 p 很大的话,则通过蛮力计算阶是很难的,好在使用 [Schoof算法] 可以在多项式时间内计算出群的阶。计算椭圆曲线在有限域上点的数目可以参见 [Counting points on elliptic curves] 。

Schoof算法运用了 Hasses 定理。Hasses定理给出了椭圆曲线在 的阶的范围,可以看出,当 p 很大时,阶跟 p 的值是比较接近的。

跟实数域一样,在素数域里面也是选取一个点 P,然后计算倍乘 nP 作为公钥。还是以 为例, ,我们采用素数域下新的计算公式计算 。

可以发现 ,即 P 的标量乘法得到的点集是原椭圆曲线群的一个子集,则它是原椭圆曲线群的一个子群,而且是循环子群。子群中元素个数称为子群的阶(示例子群的阶为8),点 P 称为该子群的基点或者生成元。循环子群是椭圆曲线密码体系的基础,我们期望子群中元素越多越好,如何找到一个合适的子群尤为重要。

首先要解决一个问题,就是已知 下的椭圆曲线上的点 P,如何求得 P 的倍乘运算后生成的子群的阶? 根据拉格朗日的群论定理,子群的阶是父群的阶的约数。求解曲线上点 P 生成的子群的阶可以用下面方法:

以示例曲线为例,父群的阶是 ,则以曲线上的点生成的子群的阶只能是 。对于点 ,故其生成的子群的阶就是 8,而点 生成的子群的阶则正好等于父群的阶24。

在加密算法中,我们期望找到一个阶高的子群。不过,通常不是先去找个基点,然后计算子群的阶,因为这样过于不确定,算法上不好实现。相反地,先选择一个大的子群阶,然后再找生成该子群的一个基点就容易多了。

前面提到,子群的阶 n 是父群的阶 N 的约数,即有 ,h 是一个整数,我们称之为子群的余因子(cofactor)。因为 ,所以有:

通常会选择一个素数作为子群的阶,即 n 是素数。可以发现,点 生成了阶为 n 的子群( 除外,因为这个子群的阶为1),不等于 的点 就是我们寻找的基点。具体步骤如下:

需要注意,上面算法里的 n 必须是素数,否则计算的基点 G 生成的子群的阶可能是 n 的约数而不是 n,不符合要求 。以曲线 为例, ,我们选择 ,则 ,随机选取一个点 ,计算 ,恰好满足要求。

如前所述,椭圆曲线加密算法工作在素数域下的椭圆曲线循环子群中,需要的域参数(Domain Parameter)包括 :

如比特币用来做数字签名中采用的椭圆曲线 [secp256k1] 的域参数如下:

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

简述加密技术的基本原理,并指出有哪些常用的加密体制及其代表算法

1、对称加密算法

对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:

DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。

3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。

aes(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;

算法原理

aes 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。aes 使用几种不同的方法来执行排列和置换运算。

2、非对称算法

常见的非对称加密算法如下:

RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;

DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);

ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。

算法原理——椭圆曲线上的难题

椭圆曲线上离散对数问题ECDLP定义如下:给定素数p和椭圆曲线E,对Q=kP,在已知P,Q 的情况下求出小于p的正整数k。可以证明由k和P计算Q比较容易,而由Q和P计算k则比较困难。

将椭圆曲线中的加法运算与离散对数中的模乘运算相对应,将椭圆曲线中的乘法运算与离散对数中的模幂运算相对应,我们就可以建立基于椭圆曲线的对应的密码体制。

产品的开发快则一个月,慢则一年,那么如何杜绝市面上各种山寨也成为了我们必须要关注的问题,加密芯片可以做到这点,在保障开发者权益的同时也保护了消费者权益,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椭圆曲线加密算法原理

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