本文由“币嗨Bihi内容合伙人计划”赞助
今天呼噜继续和大家一起学习区块链安全盾之密码学及算法(2)——椭圆椭圆曲线ECC算法。
在正式开始复杂而高深的学习前,我们理解下数学上椭圆的有意思的一面。
所谓的一个椭圆曲线是满足一个特殊方程的点集,可用方程式y^2 = x^3 + ax + b表示。
也有其他椭圆曲线的代表,但学术上一个椭圆曲线是一个满足一个变量为二阶,另一个变量为3阶的二元方程。一个椭圆曲线不仅仅是一个漂亮的图片,它也有一些使它成为密码学的一个好环境的性能。
它有几个有趣的特性:
其中一个是水平对称。曲线上的任何点以X轴反射并且仍然是同样的曲线。一个更加有趣的特性是任何不垂直的线穿过曲线最多有三个交点。
让我们来把曲线想象成一个奇异的桌球游戏。取曲线上的任意两点并且把他们连起来;这条线与曲线有一个以上的交点。在这个桌球游戏里,你拿球从A射向B.当它撞上曲线,这个球向上反弹(它位于X轴以下)或者向下反弹到曲线的另一边。
我们把球移向两点叫“打点(dot)”。曲线上的任意两点能被同时打点得到一个新点。
A dot B = C
我们也能同时做一串移动来用它自己反复“打点"。
A dot A = B
A dot B = C
A dot C = D
...
事实证明如果你有两个点,一个最初的点用它自己打点n次到达一个最终点,在你只知道最重点时找到n和最初点是很难的。继续我们的奇异桌球比喻,想象一个人在一段任意时间里在一个房间里单独玩我们游戏。对他来说,他跟着上述规则来反复击球是容易的。如果一个人后来走进房间并且看到球最终的位置,即使他们知道这个游戏的所有规则和球的起点,在没有全程观察游戏直到球到达同一点的情况下,他们也不能算出球击打到那的次数。容易做,但很难解开。这就是一个非常棒的trapdoor函数的基础。
在密码理论中,椭圆曲线算法是一种非对程密码,也称公钥密码。
所谓非对程密码是指加密用的密钥和解密用的密钥不同,用作加密的称作私钥,需要保密,用作解密的称作公钥,顾名思义是公开的,并且从一个密钥不能推算出另一个密钥。目前使用最广泛的两种非对程密码为RSA和ECC,RSA历史悠久,签名较快,而验证较慢。相同密码强度而言,ECC密钥长度较短,效率更高。RSA基于大数分解问题,ECC基于椭圆曲线离散对数问题。
下面介绍这种算法的作用和描述。
1. 作用
计算一个或多个消息的摘要可以保证消息不会被更改(一旦更改就能发现),所以消息与摘要是一一对应的。但是如果攻击者有摘要算法,他就可以同时替换消息和摘要,如果只验证摘要是无法得知消息已被替换(更改),如何解决这一消息真实性的问题,这就是公钥密码的用途之一,其原理:
(1)产生消息的人公开自己的密钥,然后用私钥对消息摘要进行加密(俗称签名),与消息、消息摘要、摘要签名一同发送给接收者;
(2)发送者的公钥随处可得,接收者使用公钥对消息签名进行解密(验签),如果结果正确则消息真实性得到验证,从而对消息摘要进一步验证;如果结果错误则消息不可靠。
(3)公钥是由权威机构产生的,并且可验证,所以替换公钥是不可能的。
2. 算法描述
相比RSA,理解椭圆曲线密码算法的数学基础困难的多。首先了解几个概念。
(1) 射影平面坐标系:它是对笛卡尔直角坐标系的扩展,增加了无穷远点的概念。在此坐标系下,两条平行的直线是有交点的,而交点就是无穷远点。两者的变换关系为:笛卡尔坐标系中的点a(x,y),令x=X/Z,y=Y/Z,则射影平面坐标系下的点a的坐标为(X, Y,Z),比如点(2,3)就转换为(2Z,3Z,Z)。
(2) 椭圆曲线:一条椭圆曲线在射影平面上满足方程:Y^2Z+a1XYZ+a3yZ^2=X^3+a2X^2Z+a4XZ^2+a6Z^3的所有点的集合,且曲线上每个点都是非奇异的(连续的、可微分的)。该方程称为维尔斯特拉斯方程。椭圆曲线并非是一个椭圆,只是其方程形式类似一个计算椭圆周长的方程。
(3)射影平面转换为直角平面:椭圆曲线有一个无穷远点(0:1:0),那么把可以计算出直角平面坐标系下的曲线方程:y^2+a1xy+a3y=x^3+a2x^2+a4x+a6。 这个方程代表的光滑曲线再加上一个无穷远点,就组成了椭圆曲线。
(4)椭圆曲线一点切线的斜率:因为椭圆曲线平滑的,每一个点都有切线,斜率是切线的一个重要指标。它将在椭圆曲线密码算法中使用。
以上是初步的学习,更深的函数学习待下期进行。
网友评论