ECC椭圆加密算法学习笔记


前言

此为自学笔记,参考文献(包括参考的所有理论的链接)在此先标明。


一、什么是椭圆曲线加密算法?

1.数学基础

(1)椭圆

  • 椭圆的定义:平面上到两个相异固定点(F1和F2)的距离之和为常数的点之轨迹。

  • 椭圆的标准方程:
    在这里插入图片描述
    其中F1=(-c,0),F2=(0,c),c2=a2- b2

  • 椭圆的参数方程:

2.实数域上的椭圆曲线

(1)椭圆曲线加密算法中的数学相关概念

a. 射影平面:二维射影空间。它可以视为普通平面上追加一条无穷远点组成的无穷远直线, 它是代数几何、射影几何里最基本的对象。简单说来,可以理解为普通欧式平面加上无穷远点和由无穷远点组成的无穷远直线。

b. 代数中的群简单来说就是一组元素集合和定义在元素上的运算。比如说全体整数构成了一个群,运算包括加法等。这里的集合 用 G(group)表示,集合要变成群,一般要满足以下性质:

1.封闭性:如果 a和b都属于G集合,那么a+b 也属于G;
2.结合律:(a+b)+c=a+(b+c)
3.存在单位元(在二元运算中,单位元指与任意元素运算不改变其值的元素,以实数为例,乘法单元为1,加法单位元为0) O使得a+O=O+a=a;
4.每个元素都存在逆元素,就是说对于任意元素a必存在b使得a+b=O(O是单位元) 。

集合满足以上四个性质就是称为群。

阿贝尔群(Abelian Group)除了满足群的基本性质,还满足交换律即:a+b=b+a,故阿贝尔群又称交换群。

根据这些性质,我们可以知道整数集Z是一个阿贝尔群,自然数集N却并不是一个群,因为它不满足第四条性质。

(2)实数椭圆曲线

标准的椭圆曲线方程是在射影平面上定义的三元齐次方程,即:
在这里插入图片描述
在这里插入图片描述
上述威尔斯特拉斯方程(Weierstrass),满足:

a.椭圆曲线方程是一个齐次方程;
b.曲线上的每个点都必须是非奇异的(光滑的),偏导数FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同为0;
c.圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名。

举例:
1.以下是椭圆曲线:
在这里插入图片描述
2.以下不是椭圆曲线,我们可以注意到下述曲线上的点在零点处不光滑。
在这里插入图片描述

(3)椭圆曲线上的群

上述我们介绍了群的概念,需要注意的是,群中的集合元素,可以是数,也可以是其他类型元素,比如解析集合中的点(坐标形式)等。

那么,椭圆曲线上的群元素就是椭圆曲线上的点,则:
a.单位元是无穷远点记为O;
b.任意点P的逆元素是该点关于X轴的对称点。

椭圆曲线群的加法也不同于整数的加法——

  • 加法定义可以描述为: 给定三个共线非零的点 P ,Q,R ,它们的和为 P+Q+R=O。

  • 几何意义是:过𝑃、𝑄两点做直线𝐿,与椭圆曲线相交于第三点,该点关于X轴的对称点𝑅点即为P+Q所得的点(R’点与R点互逆)。故该群具有封闭性。
    椭圆曲线的加法运算有比较明确的几何含义。如下图所示:
    111
    下面处理一些特殊情况:

    1. 𝑂+𝑂=𝑂,对任意的𝑃,有𝑃+𝑂=𝑃(𝑂看做零点);
    2. 𝑃=(𝑥,𝑦) 的逆元素是关于X轴对称的点−𝑃=(𝑥,−𝑦)(而不是关于原点对称),𝑃+(−𝑃)=𝑂,可以看做P与-P连线与椭圆曲线相交于无穷远点;
    3. 计算𝑃点(𝑃≠𝑂)的两倍时,是做该点的切线,再取切线与椭圆曲线的交点𝑆,找出𝑆点关于X轴的对称点−𝑆点,也即是2𝑃=𝑃+𝑃=−𝑆,得出2倍值可以递推到若干倍。

    可以看出,椭圆曲线的点集(包含无穷远点O)和上述定义的加法运算构成了一个阿贝尔群:单位元是𝑂点,𝑃(𝑥,𝑦)的逆元是𝑃’(𝑥,−𝑦),封闭性,结合性以及交换性也是满足的。

  • 椭圆曲线群的代数运算
    上述几何意义,用代数描述就是求以下方程组:
    在这里插入图片描述在这里插入图片描述
    以上是椭圆曲线群元素在实数域上的运算。

2.有限域上的椭圆曲线

实数域上加法运算不能满足实际安全需要,因为实数是连续的,知道结果就可以使用逆运算求解,不适合用来加密。所以我们必须把椭圆曲线变成离散的点。

(1)模素数P运算

模运算 a mod p:表示a除以p的余数。

密码学采用有限域上的椭圆曲线,即椭圆方程系数和变量取值均在一个有限的范围内,使用模素数𝑝的有限域Fp,将模运算引入到椭圆曲线算术中,变量和系数从集合[0,𝑝−1]中取值而非是在实数上取值。

其中有限域Fp中有p(p为质数)个元素0,1,2,…, p-2,p-1,
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

满足上式所有正整数解和无穷远点O,数学符号记为Ep(a,b),这是一个有限的离散(非连续)的点集。由此可知,集合中的点分布在(0,0)到(𝑝−1,𝑝−1)的象限中。实际上,集合𝐸𝑝(𝑎,𝑏)与模𝑝的加法运算构成循环阿贝尔群。

(2)有限域模素数上的加法

Fp(a,b)上的加法规则和实数域上的加法基本一致,但是多了模运算,模𝑝的加法没有直观上的几何解释,只有代数描述。

a.
第3点,在实数域上椭圆曲线,点P、Q、R’共线,已知点P、点Q,求点R时说过。

(3)有限域椭圆曲线上的点的阶

如果椭圆曲线上一点P,存在最小的正整数n使得数乘 在这里插入图片描述
则将n称为P的阶;若n不存在,则P是无限阶的。
在这里插入图片描述
计算可得27P=-P=(3,13),所以
在这里插入图片描述
即P的阶为28。

这些点构成了一个循环阿贝尔群。

4. 椭圆曲线中的离散对数问题(椭圆曲线加密)

考虑𝑄=𝑘𝑃,其中𝑄,𝑃∈𝐸𝑝(𝑎,𝑏),𝑘<𝑝。

对于给定的𝑘,𝑝计算𝑄是很容易的;反过来给定𝑄,𝑃,计算𝑘是相当困难的,这就是椭圆曲线的离散对数问题(这里之所以称之为离散对数问题大概是为了与其他加密算法的说法保持一致,便于理解)。

因此,可以将𝑄作为公钥,公开出去;𝑘作为私钥,秘密保管,通过公钥来破解私钥十分困难。

目前由椭圆曲线公钥求解私钥的最有效算法复杂度为𝑂(),其中𝑝是阶数𝑛(群论中的阶数指群中元素的个数)的最大素因子。

二、加密原理和加密流程

综上所述,我们知道:**私钥是一个不公开的数字,公钥是椭圆曲线上的一个点。

1.现在假定A与B进行加密通信,其加密的流程如下:

在这里插入图片描述

举例
在这里插入图片描述

2.ECC的技术要求

在这里插入图片描述

三. 椭圆曲线进行签名和验证过程

1.签名过程

(1)符号约定

发起签名的用户的密钥对:(d,Q)(d为私钥,Q为公钥);
生成元(基元):G;
待签名的信息:M;
选择椭圆曲线点群的阶:n;
签名结果:Signature(M)=(r,s)。

(2)签名过程

  1. 随机选择一个整数k, 且0 < k < n;
  2. 计算R = k *G=(xr,yr);
    注:步骤1,2也可以描述为:随机生成一个密钥对(k, R), R=(xr,yr);
  3. 令 r = xr mod n,如果r=0,则返回步骤1;
  4. 计算 H = Hash(M)
  5. s = k−1 (H + rd) mod n,若s = 0, 则返回步骤1;
  6. 输出的S =(r,s)即为签名。r是R的横坐标,有的文章说签名结果S =(R,s) 用R作为第一部分,也是可以的,本质上一样,只要在验证时候取出r。

2. 验证过程

使用上面一样的符号规则,收到Signature(M) = ( r, s) 的签名结果, 验证过程如下:

  1. 计算 H = Hash(M);
  2. 计算 u1 = Hs−1 mod n, u2 = rs−1 mod n;
  3. 计算 R = (xr,yr) = u1G + u2Q, 如果R是零点,则验证该签名无效;
  4. 令 v = xr mod n,若 v == r,则签名有效;否则, 签名无效。

可以看到,验证过程用到了<r,s>,签名者的公钥Q,及消息M等公开信息。
下面推导一下该验证过程:

R
=u1G + u2Q=( Hs−1 mod n)G + (rs−1 mod n)*Q= (Hs−1 mod n)G + (rs−1 mod n) dG
=s −1G((H + rd) mod n)=s−1Gks
=R

r是R的横坐标模n,到此验证结束。

3. 举例

将椭圆曲线中的参数选定为:a=0,b=-4,p=199,G=(2,2),则该椭圆曲线的方程为:y2 mod 199 = (x3-4) mod 199。
此时,我们有n=217。

假设B选定的私钥d=13,则公钥为Q=13G=(165,33);
假定消息M经过哈希值计算后,H=58。

签名过程如下:

  1. 随机选取k=23;
  2. 计算R=kG=23(2,2)=(15,171);
  3. 令r=xr mod n = 15 mod 271=15,r不为零;
  4. 由上可知,H=58;
  5. s=k-1(H+rd)mod n = (58+15*13)/23 mod 217 = 11;
  6. 输出签名结果:Signature(M) = (r,s) =(15,11)。

验证过程如下:使用上面一样的符号规则,收到Signature(M) = (r, s) = (15,11) 的签名结果。

  1. 由上可知 H=58;
  2. 计算 u1 = Hs−1 mod n = 5879 mod 217 = 25; u2 = rs−1 mod n =1579 mod 217 = 100;(模的逆1/s=79)
  3. 计算R = (xr,yr) = u1G + u2Q = 25*(2,2) + 100*(165,33) = (160,175) + (5,11) = (15,171)
  4. 令v=xr mod n = 15 mod 217 = 15 = r,验证该签名为有效。

四. 优缺点对比

ECC与RSA、DSA进行对比:
在这里插入图片描述


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值