椭圆曲线密码算法
椭圆曲线密码算法(Elliptic Curve Cryptography,ECC)是基于椭圆曲线数学的一种公钥密码算法,其安全性依赖于椭圆曲线离散对数问题的困难性。
椭圆曲线密码算法优点
-
短的密钥长度,意味着小的带宽和存储要求。
-
所有的用户可以选择同一基域上的不同的椭圆曲线,可使所有的用户使用同样的操作完成域运算。
椭圆曲线定义
设
下图是显示了其中一种实际的椭圆曲线:
对椭圆曲线上的点,我们可以定义一种形式的加法:如果椭圆曲线上的三个点位于同一直线上,那么它们的和为
根据上面的定义导出椭圆曲线上的加法运算法则如下: 当
当
下面的动画解释了为什么是切线:
随着两个点越来越接近,过这两点的直线最终变成了曲线的切线
上面用几何的形式解释了椭圆曲线上的加法法则,下面是数学表达式。设
椭圆曲线上点群的离散对数问题
给定椭圆曲线上的点
和点
,寻找数
,使得
,其中
称为
的基于
的离散对数" style="margin: auto" />
在等式
中,已知
和点
,求点
比较容易,反之已知点
和点
,求
却是相当苦难的,这个问题称为椭圆曲线上点群的离散对数问题。椭圆曲线密码体制正是利用这个困难问题设计的。在实际应用中,
作为私钥,而
作为公钥" style="margin: auto" />
如何计算
用这种形式表示时,计算
(取
“加倍(double)与相加(add)”算法需要这样做: • 取
. • 加倍,得到
. •
与
相加(为了得到
). • 加倍
,得到
. • 与前一结果相加 (得到
). • 加倍
,得到
. • 对
不做任何操作. • 加倍
,得到
. • 与前一结果相加 (得到
). • … 最后,我们可以计算
,只需7次“加倍”运算和4次“相加”运算" style="margin: auto" />
secp256k1椭圆曲线
在比特币区块链实现中使用的椭圆曲线为secp256k1。所以这里需要学习一下。 secp256k1曲线形如
= 2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1]
G的阶:
This is a graph of secp256k1's elliptic curve
over the real numbers. Note that because secp256k1 is actually defined over the field
, its graph will in reality look like random scattered points, not anything like this.
椭圆曲线参数 六元组解释: 我们的椭圆曲线算法是工作在循环子群上的。几个参数含义如下:
(1)素数
,这个值定义了有限域的大小 > (2)椭圆曲线的系数
、
> (3)基点
(子群的生成元)> (4)子群的阶
> (5)协因子
(
" style="margin: auto" />
补充数学概念
这里所用到的密码学其数学基础主要是《数论》、《代数》。如果想要弄清其原理,这两部分数学基础是需要研读的。
同余式
数学上,同余(congruence modulo,符号:≡)是数论中的一种等价关系。当两个整数除以同一个正整数,若得相同余数,则二整数同余。同余是抽象代数中的同余关系的原型。
两个整数
若它们除以正整数
所得到的余数相等,则称
对于模
同余,记作
。读作
与
关于模
同余。(例
)。
密码学与有限循环群
现代密码学算法和协议中,消息是作为有限空间中的数字或元素来处理的。加密和解密的各种操作必须在消息之间进行变换,以使变换服从有限消息空间内部的封闭性。然而,数的一般运算诸如加减乘除并不满足有限空间内部的封闭性。所以密码算法通常运行于具有某些保持封闭性的代数结构的空间中,这种代数结构就是有限循环群。在数学中,群是一种代数结构,由一个集合以及一个二元运算组成。群必须满足以下四个条件:封闭性,结合律,存在单位元和存在逆元。
群(Group)的定义: 设
最常见的群之一是整数集
有限循环群在群的基础上满足两个额外条件:群元素个数有限以及交换律。循环群由单个元素(产生元)的叠加操作生成,最常见的有限循环群为模拟时钟。
椭圆曲线群定义
在数学上,椭圆曲线群的元素为椭圆曲线上的点,群操作为”+”,”+”的定义为,给定曲线两点<img src="P),
,
等于
和
两点的连线与曲线交点沿
轴的对称点,如果
,则
等于
在曲线上的切线与曲线交点沿
轴的对称点。该群的单位元为无穷远零点记作
,有
,点
的逆元为其沿
轴的对称点,记作
" style="margin: auto" />
椭圆曲线有限循环群
前面介绍的椭圆曲线都是基于有理数的,但是计算机运算浮点数(小数)的速度较慢,更重要的是四舍五入浮点数会产生误差,导致多次加密解密操作后原始消息不能被还原。故考虑到加密算法的可实现性,密码学上使用基于整数的模加运算产生椭圆曲线有限循环群。 基于整数的模加运算的特点:
-
运算速度快
-
精确的运算结果
-
产生有限循环
下面举例说明,如何产生ECC有限循环群: 例如考虑
下图展示了
集合中的元素和椭圆曲线的关系。 点
映射到点
,点
的对称点也由点
映射到点
" style="margin: auto" />
如果取一个更大的质数
现在我们基于
如下图所示,随着
椭圆曲线的阶
椭圆曲线定义在有限域上,这也意味着,椭圆曲线上的点也是有限的。所以引出了一个问题:一个椭圆曲线到底有多少个点?定义“椭圆曲线上点的个数”为 椭圆曲线的 阶 (order)。
椭圆曲线的数乘和循环子群
在实数域,数乘(标量乘法)被定义如下:
如何计算及算法复杂度,上面有讲过,这里讲述它的一个性质。举例说明: 椭圆曲线
,点
。现在计算
的数乘" style="margin: auto" />
上图可以化为下图的表示形式:
结果显示点
的倍数的结果只有出现5个点,其他的点从未出现;其次他们是周期出现的。 显然,上面的5个点的集合,运算是封闭的。 当然,不仅仅
有这样的性质,其他点也有类似的性质。 即,
的加法构成了一个群
,由于
属于
,故
是
的子群。 循环子群是ECC的基础" style="margin: auto" />
子群的阶
1.首先,我们已经定义了阶就是群中点的个数。在子群中也是这样的,但是我们可以换一种表达方式:子群的阶是最小能够使得
2.子群的阶和群的阶是有关系的。拉格朗日定理说明了,子群的阶是群的阶的因子。即如果
找到子群的阶的方法(根据上面讲述的定义和性质就能得出下面的方法):(1)计算群的阶
(2)找出所有
的因子(3)每个
的因子
,然后乘以
(4)在3中,找出最小的
,使得满足
。则
是子群的阶" style="margin: auto" />
如何找一个基点
在ECC算法种,我们希望找到一个阶数较大的子群。 通常我们会选择一个椭圆曲线,然后计算它的阶
首先,拉格朗日揭示,
其次,每个椭圆曲线上的点
,
,因为
是
的阶
的倍数。 我们可以写成这样
。 假设
是一个素数,我们令
,则
就是子群的生成元。
必须是素数,若非如此,则
不一定表示
是
的阶,因为
的阶可能是
的一个因子。 总结如下" style="margin: auto" />
1.计算椭圆曲线的阶
2.选择一个数
3.计算
4.随机选择一个点
5.计算
6.如果
网络安全成长路线图
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成hei客大神,这个方向越往后,需要学习和掌握的东西就会越来越多,以下是学习网络安全需要走的方向:


# 网络安全学习方法
上面介绍了技术分类和学习路线,这里来谈一下学习方法:
## 视频学习
无论你是去B站或者是油管上面都有很多网络安全的相关视频可以学习,当然如果你还不知道选择那套学习,我这里也整理了一套和上述成长路线图挂钩的视频教程,完整版的视频已经上传至优快云官方,朋友们如果需要可以点击这个链接免费领取。网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!