ECDSA科普:大雄和静香的情人节

ECDSA科普:大雄和静香的情人节_第1张图片
大雄和静香

题图:哆啦A梦动画片。图片来自于网络。

这是刘教链《比特币原理》番外篇。本节讲的是椭圆曲线数字签名算法ECDSA (Elliptic Curve Digital Signature Algorithm)。

一、大雄给静香邮寄比特币

2月14号,情人节。

大雄有哆啦A梦送的10个比特币。他想把这10个比特币送给静香。

比特币只能通过信件邮寄。

大雄准备了一个信封,写上静香家地址,把10个比特币装到信封里,贴上邮票,然后把信投递到邮筒里。

小镇的邮筒是完全开放式的,并没有一个中心邮局给它上锁和管理。

胖虎对大雄的10个比特币垂涎三尺,他寻机从邮筒下手,把比特币换到一个写着自己家地址的信封里。

哆啦A梦是邮递员。而且,是一个住在小镇中的本来就很聪明的邮递员。

它能在这种情况下确保比特币的寄达绝对安全可靠吗?

哆啦A梦在学校的教室外苦苦思索这个问题。

教室里,数学老师在给小学生们上数学课。

哆啦A梦忽然灵感出现,设计了一种特别的邮票。

二、哆啦A梦的邮票

哆啦A梦发现了小镇学校的一个惊天秘密。

这个秘密就是,数学老师只教加法、减法和乘法。

所有人也都只会做加法、减法和乘法。

哆啦A梦设计了一种特别的邮票。这种邮票需要寄信人写几个数字。而多拉A梦在送信的时候会先检查邮票,验算数字,如果不正确,它就退回这封邮件。

邮票是这么设计的:

首先,全国的小镇都有自己唯一的数字编号,大雄他们这个小镇编号是9。这个数字整个小镇都公开知道。

然后,每个人都选一个自己喜欢的秘密数字。每人各不相同,而且大家都互相猜不到对方的秘密数字。大雄选的秘密数字是3。

另外,小镇的每户人家都有一个门牌号作为地址。门牌号是用秘密数字乘以幸运数字计算出来的。大雄家门牌号是大雄的秘密数字3乘以幸运数字9等于27。静香家门牌号是45。

当大雄准备寄信给静香的时候,先随机另选一个秘密的幸运数字,别人绝对猜不到,比如大雄选了10。

然后大雄计算两个数字:

(1)用幸运数字10乘以小镇编号9得到前一个数字90。
(2)用前一个数字90乘以大雄的秘密数字3得到270,然后再加上静香家的门牌号45,得到后一个数字315。

最后,大雄把90和315前后两个数字写到邮票上,就可以了。

三、哆啦A梦的验算

当哆啦A梦送信的时候,就可以用算数来验算这个邮票是不是大雄贴的,而且寄送对象就是静香。

它同样算两个数字:

(1)用邮票上的后一个数字315乘以小镇编号9,得到第一个结果2835。
(2)用邮票上的前一个数字90乘以大雄家门牌号27得到2430,再用静香家门牌号45乘以小镇编号9得到405,最后把两个数字加起来,也就是2430加上405,得到第二个结果2835。

Bingo!两个结果一样。验证通过!恭喜大雄,邮件将被准确送达静香家。

亲爱的读者,您看到哆啦A梦这个邮票算法的精妙之处了吗?

哆啦A梦验算所使用的全部都只是公开信息,小镇编号9,大雄家门牌号27,静香家门牌号45,邮票上的两个数字90和315。

而大雄计算时所选的两个秘密数字完全不需要公开,这样就保证了,除了大雄,没有人可以伪造邮票。

四、胖虎的作弊

有了这个邮票的设计,胖虎就没有办法把邮件发往自己家的地址了。因为他不知道大雄的秘密数字,也就没有办法在邮票上写下正确的结果。

如果胖虎强行用自己的秘密数字来计算,会怎样呢?

胖虎自己的秘密数字是4,他家门牌号是36。

前一个数字,他直接抄袭了大雄的结果90。
然后他用前一个数字90乘以他自己的秘密数字4得到360,然后再加上自己家的门牌号36,得到后一个数字396。

他把这两个数字写到邮票上。

那么他的邮票能够通过哆啦A梦的验算吗?

哆啦A梦拿到邮件,先计算邮票的后一个数字396乘以小镇编号9,得到3564。

然后哆啦A梦用邮票的前一个数字90乘以大雄家门牌号27得到2430,再用静香家门牌号45乘以小镇编号9得到405,最后把两个数字加起来,也就是2430加上405,得到2835。

3564不等于2835。两个结果不相等!邮票无效!

Perfect! 哆啦A梦高兴地笑了起来。

等等!聪明的读者,你可能已经发现了一个致命漏洞:如果胖虎把寄件人也改成自己会怎么样呢?

那么哆啦A梦验算的时候,就会计算邮票的前一个数字90乘以胖虎家门牌号36,加上胖虎家门牌号36乘以小镇数字9,结果是同样的3564!

虽说胖虎把邮件发送给胖虎自己这件事看起来有点奇怪,可是既然数字验算通过,哆啦A梦也不得不遵照送达。

怎么办?于是哆啦A梦想到了一个办法:记账。

五、哆啦A梦的账本

哆啦A梦找了一个小本本。

每次它成功送达信件的时候,就把这次投递的比特币标上一个批次,然后把这个批次和投递记录记在小本本上。比如,第1829次投递,来自第278次投递的比特币,已送达给大雄。

这样一来,致命漏洞就堵住了。因为只要一查小本本,就知道这10个比特币上次是送到大雄家的。那么这一次寄送这10个比特币,寄件人只能是大雄,而不可能是胖虎。

胖虎也不能抹去或伪造这10个比特币的批次,因为没有批次或者批次伪造的比特币,哆啦A梦一查小本本就会发现根本不是胖虎的,并拒绝递送。

六、为什么秘密数字别人猜不到

第一个问题:大雄所选的秘密数字3和秘密的幸运数字10会不会很容易被胖虎“暴力穷举”尝试出来呢?

如果数字是这么小的话,的确有被“猜到“的可能性。

解决方法也特别简单,就是选择特别特别特别巨大的数字,巨大到超出想象。从0到2的256次方中间随机选择一个整数,另外一个人用100万年的时间能够“猜到”的可能性比你看完这句话地球马上毁灭的可能性还要低。

七、为什么我们都不会做除法

第二个问题:为什么我们都不会做除法呢?

为了向亲爱的读者朋友说明这个问题,笔者特别准备了这道“小学奥数题”:

下图中,苹果、香蕉、菠萝是三个正整数,请问它们分别是什么数字?


ECDSA科普:大雄和静香的情人节_第2张图片
求正整数解

试试看?体验一下“除法”的难度。_

是的,如你所料,这货就是一个如假包换的椭圆曲线方程。也就是说,它可以变换成这种形式的方程:

ECC

加法是这么算的(红色就是椭圆曲线的样子——换了一条容易作图的):

ECDSA科普:大雄和静香的情人节_第3张图片
ECC加法

乘法是连加:k乘以P就等于k个P相加。

至于除法嘛。假设k乘以P等于T,告诉你P和T,请计算k。虽然你明知道k就等于T除以P,但就是算不出来。

八、椭圆曲线数字签名(邮票)算法

比特币用了一条在中本聪之前鲜有人用的椭圆曲线secp256k1生成“邮票”:


secp256k1 equation

它在实数域长这个样子:


ECDSA科普:大雄和静香的情人节_第4张图片
secp256k1

但是,其实它是定义在所谓的模素数上的,一下子就毁容成大概这个鬼样子了:


ECDSA科普:大雄和静香的情人节_第5张图片
模素数

而大家常用的则是由美国国家标准和技术研究院NIST和美国国家安全局NSA联袂推荐的、1994年12月纳入标准的secp256r1。

2007年11月15日,美国知名IT杂志《连线》发表了对于NSA标准的质疑文章。


ECDSA科普:大雄和静香的情人节_第6张图片
WIRED杂志报道

2013年6月,前美国中央情报局(CIA)职员、美国国家安全局(NSA)外包技术员爱德华·约瑟夫·斯诺登(Edward Joseph Snowden, 1983-)出逃。


ECDSA科普:大雄和静香的情人节_第7张图片
斯诺登

(全文完)
欢迎垂询刘教链比特币原理课程和区块链线下培训,扫码加rose老师备注“培训”,谢谢:


ECDSA科普:大雄和静香的情人节_第8张图片
QR_rose.jpeg

你可能感兴趣的:(ECDSA科普:大雄和静香的情人节)