Elliptic Curve Cryptography: a gentle introduction
Andrea Corbellini
Those of you who know what public-key cryptography is may have already heardof ECC, ECDH or ECDSA. The first is an acronym for Elliptic Curve Cryptography, the others are names for algorithms based on it.
Today, we can find elliptic curves cryptosystems in TLS, PGP and SSH, which are just three of the main technologies on which the modern web and IT world are based. Not to mention Bitcoin and other cryptocurrencies.
Before ECC become popular, almost all public-key algorithms were based on RSA, DSA, and DH, alternative cryptosystems based on modular arithmetic. RSA and friends are still very important today, and often are used alongside ECC. However, while the magic behind RSA and friends can be easily explained, is widely understood, and rough implementations can be written quite easily, the foundations of ECC are still a mystery to most.
With a series of blog posts Im going to give you a gentle introduction to the world of elliptic curve cryptography. My aim is not to provide a complete and detailed guide to ECC (the web is full of information on the subject), but to provide a simple overview of what ECC is and why it is considered secure, without losing time on long mathematical proofs or boring implementation details. I will also give helpful examples together with visual interactive tools and scripts to play with.
Specifically, here are the topics Ill touch:
- Elliptic curves over real numbers and the group law (covered in this blog post)
- Elliptic curves over finite fields and the discrete logarithm problem
- Key pair generation and two ECC algorithms: ECDH and ECDSA
- Algorithms for breaking ECC security, and a comparison with RSA
In order to understand whats written here, youll need to know some basic stuff of set theory, geometry and modular arithmetic, and have familiarity with symmetric and asymmetric cryptography. Lastly, you need to have a clear idea of what an 'easy' problem is, what a 'hard' problem is, and their roles in cryptography.
Ready? Lets start!
Elliptic Curves
First of all: what is an elliptic curve? Wolfram MathWorld gives an excellent and complete definition. But for our aims, an elliptic curve will simply be the set of points described by the equation:
y2=x3 ax by2=x3 ax b
where 4a3 27b2ne;04a3 27b2ne;0 (this is required to exclude singular curves). The equation above is what is called Weierstrass normal form for elliptic curves.
Different shapes for different elliptic curves (b=1b=1, aa varying from 2 to -3).Types of singularities: on the left, a curve with a cusp (y2=x3y2=x3). On the right, a curve with a self-intersection (y2=x3minus;3x 2y2=x3minus;3x 2). None of them is a valid elliptic curve.
Depending on the value of aa and bb, elliptic curves may assume different shapes on the plane. As it can be easily seen and verified, elliptic curves are symmetric about the xx-axis.
For our aims, we will also need a point at infinity (also known as ideal point) to be part of our curve. From now on, we will denote our point at infinity with the symbol 0 (zero).
If we want to explicitly take into account the point at infinity, we can refine our definition of elliptic curve as follows:
{(x,y)amp;#x2208;R2amp;#xA0;|amp;#xA0;y2=x3 ax b,amp;#xA0;4a3 27b2amp;#x2260;0}amp;#xA0;amp;#x222A;amp;#xA0;{0}' role='presentation' style='box-sizing: border-box; display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;'gt;{(x,y)isin;R2 | y2=x3 ax b, 4a3 27b2ne;0} cup; {0}{(x,y)isin;R2 | y2=x3 ax b, 4a3 27b2ne;0} cup; {0}
Groups
A group in mathematics is a set for which we have defined a binary operation that we call 'addition' and indicate with the symbol . In order for the set GG to be a group, addition must defined so that it respects the following four properties:
- closure: if aa and bb are members of GG, then a ba b is a member of GG;
- associativity: (a b) c=a (b c)(a b) c=a (b c);
-
t
剩余内容已隐藏,支付完成后下载完整资料
椭圆曲线密码学简介
作者:Andrea Corbellini
知道什么是公开密匙加密的人可能已经听说过ECC,ECDH或ECDSA。第一个是椭圆曲线密码学的缩写,其他人的名字算法。
今天,我们可以找到椭圆曲线密码TLS,PGP和SSH三的主要技术,基于现代网络和世界。更不用说比特币和其他cryptocurrencies。
ECC流行之前,几乎所有的基于RSA公钥算法,DSA和DH,替代密码机制基于模运算。RSA和朋友今天仍然非常重要,经常使用在ECC身边。然而,尽管魔术背后的RSA和朋友可以很容易地解释说,是广泛理解,粗糙的实现可以很容易写的,ECC的基础仍然是一个谜。
一系列的博文我要给你一个温柔的介绍椭圆曲线密码学的世界。我的目的不是提供一个完整的和详细的指导ECC(网络是完全基于主题的相关信息),但提供了一个简euro;euro;euro;的概述ECC是什么和为什么它被认为是安全的,不必浪费时间在长数学证明或无聊的实现细节。我也会给有用的例子与视觉互动工具和脚本。
具体地说,这是主题我将联系:
1. 椭圆曲线在实数和法律(包括在本博客)
2. 摘要利用有限域上椭圆曲线离散对数问题
3. 密钥对的生成和两个ECC算法:ECDH ECDSA
4. 为打破ECC算法安全性和RSA的比较
为了理解写在这里,你需要知道一些基本的东西集合理论、几何和模运算,并熟悉对称算法和非对称加密。最后,你需要有一个清晰的想法一个“简单”的问题是什么,什么是“硬”的问题,和他们的角色在密码学。
准备好了吗?让我们开始!
椭圆曲线
首先:什么是椭圆曲线?Wolfram MathWorld给一个优秀的和完整的定义。但是对于我们的目的,一个椭圆曲线方程所描述的仅仅是点的集合: y ^ 2 = x ^ 3 ax
4美元一个^ 3 27 b ^ 2 ne 0美元(这是需要排除奇异曲线)。上面的方程是所谓的维尔斯特拉斯范式对椭圆曲线。
不同形状不同的椭圆曲线(b = 1美元,美元从2到3美元)。类型的奇异性:在左边,一个尖点曲线(y ^ 2 = x ^ 3美元)。在右边,曲线自交($ y ^ 2 = x ^ 3 - 3 x 2美元)。没有一个euro;euro;有效的椭圆曲线。
根据美元和美元b美元的价值,椭圆曲线可能假设不同的形状在飞机上。因为它可以很容易地看到和验证,椭圆曲线对称x设在美元。
对于我们的目的,我们还需要一个点在无穷远处(也称为理想点)的曲线。从现在开始,我们将表示点与符号infin;0(零)。
如果我们想明确地考虑在无穷远处,我们可以完善我们对椭圆曲线的定义如下: 左 {(x,y) mathbb } { R ^ 2 | y ^ 2 = x ^ 3 ax b,27 b ^ 2 ^ 3 4 ne 0 } 杯 左 { 0 }
组
数学是一组一组的,我们定义了一个二元运算,我们称之为“加法”和指示符号 。为了设置 mathbbG mathbbG一组,除了必须定义,这样尊重以下四个属性:
- 关闭:如果美元美元b是美元 mathbb { G } ,amp;#x90A3;amp;#x4E48;a bamp;#x7F8E;amp;#x5143;amp;#x662F;amp;#x7F8E;amp;#x5143;amp;#xA0;mathbbG' role='presentation' style='box-sizing: border-box; display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 14px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;'gt;,那么a b美元是美元 mathbbG,那么a b美元是美元 mathbbG;
- 结合性:美元(a b) c = a (b c)美元;
- 存在一个身份元素0 0 = 0 美元这样=美元;
- 每个元素都有一个逆,是:每一个美元存在b美元,这样a b = 0美元。
如果我们增加五分之一的要求:
- 交换性:a b = b ,美元
然后叫阿贝尔群。
与通常的概念,美元整数的集合 mathbb { Z } $是一组(此外,这是一个交换群)。自然数的集合美元mathbb { N } $然而不是一组,第四财产不能满意。
组织很好,因为,如果我们可以证明这四个属性,我们免费得到一些其他属性。例如:标识元素是独一无二的;逆是独一无二的,这就是:每一个美元的存在只有一个美元b,a b = 0美元美元(我们可以写b美元(美元)。直接或间接,这些和其他事实组织以后对我们非常重要。
集团法律椭圆曲线
我们可以定义一组在椭圆曲线。具体地说:
- 组的元素是一个椭圆曲线的点;
- 单位元素点在无穷远处0;
- 点的逆PP是对称x设在美元;
- 除了由以下规则:鉴于三个对齐,零分PP,Q和R美元美euro;euro;,它们的和是$ P Q R = 0美元.
三个对齐点的总和等于0。
注意,最后的规则,我们只需要三个对齐点,三分是一致的不尊重。这意味着,如果PP,Q和R美元美元对齐,然后$ P Q R)= (P R)= R (P Q)= cdots = 0美元。这种方式,我们直观地证明 操作符是联想和交换:我们在一个交换群。
到目前为止,太好了。但实际上我们如何计算两个任意点的总和?
几何之外
由于我们是在一个交换群,我们可以写$ P Q R = 0 P Q = - R美元美元。这个方程,在这种形式,让我们得到一个几何方法计算出两点之间和PP和:如果我们画一条线穿过PP和,这条线将第三点在曲线相交,R美元(这是PP所暗示的事实,Q和R美元美元是一致的)。如果我们把这个点的逆,- r美元中,我们发现P Q美元的结果.
画的线通过PP和。第三点美元$ R线相交。点对称,- r美元,P Q美元的结果。
这个几何方法,但需要一些改进。特别是,我们需要回答几个问题:
- 如果P = 0美元或Q = 0美元吗?当然,我们不能得出任何线(0不是在xy平面美元)。但是考虑到我们有0作为身份元素定义,P 0=PP 0=P和$ 0 Q =美元,对于任何P和Q美元。美元
- 如果P = - q美元呢?在这种情况下,行经历的两个点是垂直的,且不相交的第三点。但如果P的逆美元美元,然后我们有$ P Q = P (- P)= 0美元从逆的定义。
- 如果P =美元呢?在这种情况下,有无限多的线穿过这一点。这里的东西开始变得有点复杂。但想想问“ ne P美元。如果我们要问“美元方法PP,越来越接近吗?随着两点变得紧密,通过他们变成了曲线的切线。问美元的倾向PP美元,通过PP和$ 美元变成了曲线的切线。根据这种我们可以说P P = - R美元,其中R美元是交点之间的曲线和直线与曲线相切的PP。
- 如果P ne美元,但没有第三点RR ?我们在非常类似于上一个。事实上,我们的线通过PP和是曲线的切线。如果我们的线相交两点,那么它意味着它的曲线的切线。很容易看到的结果和对称的两个点。假设PP切点。在前面的例子中,我们将会写P P = - q美元。这个方程现在变成美元$ P Q = - P。另一方面,如果问美元切点,正确的方程是P Q = - Q美元。
几何方法现在已经完成,涵盖所有情况。用铅笔和尺子我们能够执行除了涉及任何椭圆曲线的每一个点。如果你想尝试,看一看HTML5 / JavaScript可视化工具我建立了计算金额在椭圆曲线!
代数和
如果我们想要一个电脑执行点,我们需要将几何方法转化为一个代数方法。将上述规则转换为一组方程可能看起来简单,但实际上它可以很乏味,因为它需要解三次方程。出于这个原因,在这里我只报告结果。
首先,让我们摆脱最烦人的问题。我们已经知道,P (- P)= 0美元,我们也知道$ P 0 = 0美元 P = P。所以,在我们的方程,我们将避免这两种情况下,我们只会考虑两个非零,非对称点P =(x_P y_P)美元和美元Q =(x_Q y_Q)$。
如果PP和是不同的(x_P ne x_Q美元),通过他们斜率线: m = 压裂{ y_P - y_Q } { x_P - x_Q }
这条直线与椭圆曲线的交点是第三点R =(x_R y_R):美元 {数组} { rcl }开始x_R amp; = amp; m ^ 2 - x_P x_Q y_R amp; = amp; y_P m(x_R - x_P) {数组}
或者,相当于: y_R = y_Q m(x_R - x_Q)
因此,美元(x_P y_P) (x_Q y_Q)=(x_R -y_R)$(注意体征和记住P Q = - r)美元。
如果我们想检查是否这个结果是正确的,我们将不得不检查R美元是否属于曲线和是否PP,Q和R美元美元是一致的。检查是否点对齐是微不足道的,检查$ R属于曲线不是美元,我们需要解决一个三次方程,这一点都不有趣。
相反,让我们玩一个例子:根据我们的
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。