Programmingbitcoin-note2

第二章我们来学习椭圆曲线。后面我们会把椭圆曲线和有限域结合起来,得到我们强大的武器Elliptic curve cryptography。

就像有限域一样,如果你之前没见过,可能会被椭圆曲线吓退啦。但是,实际上没有那么困难哦。大多数我们所需的知识都已经学过了。这章,我们将探索这些曲线是什么,并且能够用来做什么。

定义:

椭圆曲线就跟其他方程式一样啦,一边是y,一边是x。如下:

y^2 = x^3 + ax + b

果然一样吧!就像以前我们学的线性方程一样,m是斜率,b是截距:

y = mx + b

二次三次也来了!

y = ax^2 + bx + c

y = ax^3 + bx^2 + cx + d

这些图像都还是很熟悉的。

椭圆曲线也没有什么不同~只是左边是y^2,这使得两个正负的y值对应的是同一个x,所以图像是关于x轴对称的。

y^2 = x^3 + ax + b

椭圆曲线没三次函数那么陡峭,因为有个y^2,很好理解。有时,曲线也可以是割裂开的,这里就不举例子了。椭圆曲线可以被看作把一个三次函数x轴以上的部分,变平一点,然后做一个镜像。这里可以参考原文,还有几张图描述了过程,很清晰。

在比特币中使用的椭圆曲线叫secp256k1,方程如下:

y^2 = x^3 + 7

Coding Elliptic Curves in Python

我们对曲线本身其实并不感兴趣,感兴趣的是其上的点。比如,上面的曲线,我们感兴趣一个坐标(-1,1)。我们将定义class Point作为椭圆曲线上的一个点。

因为椭圆曲线有着标准形式:

y^2 = x^3 + ax + b

所以,只用两个变量a和b就能定义曲线。

在第二章的代码ecc.py中,

  • 可以check一个点是否在曲线上
  • 两个点的坐标和曲线相等 ,才是两个相等的点

当我们创建Point对象时,如果点不在曲线上,也就是传入的x和y与a和b不符合,就会抛出异常。

参考examples.py。

Point Addition

椭圆曲线上的点的加法对我们很有用,两个曲线上的点相加得到第三个点,同样在曲线上。这被叫做加法是因为和普通的加法有相似之处,比如也是可交换的。A点+B点等于B点+A点。

对于每个椭圆曲线来说,一条直线除了在是切线和垂直的情况下,要么和曲线有一个交点,要么有三个交点。我们把point addition定义为:

  • 找到一条线穿过两个点之后的第三个点
  • 对第三个点关于x轴reflect一下

图上可以说是很清晰了。我们可以用到这样特殊定义的加法的一个属性是,这样得到的点是不好预测的。我们可以用公式足够简单的计算Point addition,但是直觉上,给定两个点,第三个点可以出现在任何地方。比如A+B得到的是两个点右边的一个点,而A+C就会得到B的关于X轴的对称点,which在A和C之间,B+C会得到B和C左边的点。用数学术语来说,point addition是非线性的。

Math of Point Addition

point addition也满足普通加法的若干性质,比如:

  • Identity 也就是存在一个点I + A = A(跟0一样)这个点我们叫做infinity (无穷远点,并不在椭圆曲线上)
  • Commutativity 对于一个点A,存在-A 使得A + (-A) = I
  • Associativity 可交换性 A + B = B + A
  • Invertibility 可结合性 (A + B) + C = A + (B + C) (这里原文示意图很生动)

那么为了code我们的point addition,我们就要分三种情况:

  1. 两个点在垂直线上或者有点是infinity
  2. 两个点不在垂直线上,并且是不同的
  3. 两个点相同

Coding是很简单的,然后就是用公式推导出第三个点的坐标,可以参考原文,都是很简单的数学,大致就是先求出两个点的直线方程,再联合曲线方程求出第三个点的坐标。

注意有一个edge case,就是在两个点相同的情况下,如果两个点正好都是曲线最左端的点,也就是y坐标都为0,得到的切线是垂直的,那么返回无穷远点。

Conclusion

我们现在已经学习了椭圆曲线是什么,怎么做point addition。我们马上就要结合有限域和椭圆曲线来做ECC啦~

参考:

https://github.com/jimmysong/programmingbitcoin/blob/master/ch02.asciidoc

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249