今天比特币新高了,发个帖庆祝一下吧。
顺便也更新一下文章,好久没写这个系列了。因为最近对数学感兴趣,没太关注比特币的知识。不过这两者也是相通的,没有数学就没有密码学。就借此机会谈谈比特币的几个冷门数字吧。
这三个数字相差有些悬殊,第1个是7,非常小的一个数字。第二个是2015,第三个嘛:115792089237316195423570985008687907853269984665640564039457584007908834671663。
谈数字系列其实也是承上启下了,回想一下漫谈比特币系列的第1篇文章就是一个非常简单的三个有趣数据开始的,不过那三个有趣的数据只是对于比特币的常见知识,比如4年减半的一些精确化而已。这三个数字,可能很多常常关注比特币的人都不曾涉猎,因为确实对于使用来说也无需了解这些细节。
(1)谈谈七:大道至简的椭圆曲线
先从7开始吧。这个七就是椭圆曲线上那个数字,一个是2,一个3,一个是7。2和3是y和x的指数。这个式子非常简单,但也暗藏玄机。
椭圆曲线画出来并不是椭圆的,其实数学上对于「椭圆」二字有很多名不副实的东西。椭圆是不折不扣的二次方程,但椭圆曲线是三次的,而椭圆积分则最多可以涉及到4次。
可能认为这种从二次延长到三次的方程也没啥大不了,而且椭圆曲线的图非常对称,看起来也很简单。
但实际上,三次方程的复杂度比二次方程高的多,更何况涉及两个变量的。一元二次方程国内外几乎都是初中就能学到,一元三次方程也是可根式解的。但是甚至大学,来自大学的数学系(除了少部分研究近世代数)的人,都不会刻意去学他的解。以至于甚至能学到复杂的常微分和偏微分方程,但连一个基础的三次代数方程也不会学。
一个小小的三次方程,在历史上就引入了虚数的合理化。三次方程的根式解非常复杂,要对系数进行开一次平方根,还要开一次立方根。实践起来非常复杂,以至于在计算机时代不如数值解方便。 开出来的平方根可能是虚数,而很多时候要对虚数开立方根则必须要用到三角函数。这也不得不驱使历史上的数学家去发现他们之间的联系。
至于4次方程的完整解析求根公式,整页a4纸都写不下,实践中谁都会去用数值方法。椭圆积分就是因为4次方而变得异常复杂。5次方程的解析求根公式甚至无法用传统的有限次加减乘除根号表达,还要用到超几何函数或者布林根系。很多人知道大多数5次方程没有根式解,但只是“复杂的”一类。但实际上最简单x^5-x+7=0,都是没有根解的。如果移除掉这个常数7很简单,÷x,然后利用平方差公式分解就可。但有了这个小小的常数,怎么样都无法在根式域内进行因式分解。
椭圆曲线具有许多巧妙的性质,而它其实还可以加上一个一次系数项。但比特币大道至简,越复杂在代码实现上就越困难,仅仅加上一个小小的常数7,就实现了椭圆曲线所有有趣的数论性质。
比特币密码安全三剑客:自己生成私钥的随机熵(可能是骰子,也可能是你信任的软件),私钥到公钥的ecdsa,公钥到地址的Hash160(一个sha256一个ripemd160)。从前到后是个性化到,通用化等转变。
私钥端的熵是你自己选择的,当然不能公开,这是对于你自己“个性化”的(千万不要误解我这句话,不要字面意思个性化的去设置私钥,请参阅脑钱包的风险)。公钥到地址的双层哈希,以及挖矿和merkle tree采用的双层哈希(这里的双层哈希有所不同,是两个256),不仅用于比特币,还应用于所有密码安全领域,是高度通用化的。而中间这一层,他的个性化不是对个体而是对币种而言,这个七的数字在历史上存在一些偶然性,是对于比特币这个币而言,非常个性化的一个小数字。
(2)质数的威力:2^256 – 2^32 – 977
前面提到的一个1157开头的70多位的大数,其实可以写成这样的形式。2的256次方这个大数,在比特币和密码学中,其实屡见不鲜。私钥的长度是这么大,哈希函数的值输出是这么大。
可能很多人在一些椭圆曲线的文章中无意遇见过那个含有7的算式,但这个算式显然是连续的一条曲线。但实际上计算机是二进制的,数学中的连续性,从计算机来讲就是模拟信号,而数字信号是离散的。所以实际上我们用到的椭圆曲线并不是一条连续的曲线,而是很多很多间断的点,这些点之间可以进行一些被称为抽象的加减乘除的运算,并满足交换率结合率分配率等等特点。
32÷5=6.4,也可以写成6余2。这种带余数除法很多人在小学之后就用不到了,但正是这种余数除法,以及质数,在椭圆曲线上和比特币的安全上发挥了重大的作用。70多位的质数是非常多的,恰好选择这个数,也有很多历史上的偶然性。不管怎么样,16年来,几千万个地址的生成都拜这个有趣而独特的数字用计算机进行笨拙而有效的带余数除法而成。
(3)2015
这不是年份,这只是一个偶然的错误。比特币的难度调整机制可以保证挖矿的稳定性,让减半时间能够确保恰好接近4年。很多人可能知道是两周一次,或者是2016个区块一次。但实际上,由于代码实现的一些误区,实际上2015个区块就会调整一次。
注意这个减半快慢没有关系,就算1000个区块调整一次,只要调整的目标是吻合4年减半,就不会有任何影响。
但是实际上,比特币只是在生命周期的早期阶段,以后使用人数越来越多,挖矿难度是长期上调而不是下调的,调整越快,整体比特币发行速度可能会稍微慢那么一点点。
2016这个数字看上去很像年份,就顺便谈谈年份吧。另外,20 09年的比特币,原计划减半,应该是在2013/2017/2021……而不是2012/2016……/2140。但显然早期挖矿发展非常迅速,现在每一次减半的差距依然是小于4年,以后说不定是2139年挖完也可能。
还有一个关于比特币代码实现的小细节,这个不是错误,而是必然的(这样可以避免一种叫做「时间扭曲攻击」的伤害)。我们熟知的最长链原则只是在中本聪最开始自己写出来的代码时候是保持的,不久之后就变成了最重链原则,现在实际上是计算哈希预期总数量(也就是工作量)最大的链。从完成的哈希次数变成“长度”,而不是区块长度。
Happy All Time High!/庆祝