我们不是上帝,不要老是想着去拯救他人,先做好你自己。
郎咸平曾经说过:比特币白给我都不要。
也有人说:比特币底层技术——区块链是最伟大的发明,堪比互联网。
到底比特币是什么?如何判断?难道我们能做的就是人云亦云?
如何能有自己的独立判断?
一起来读《精通比特币》!
今天,我们共读《精通比特币》一书的 第4章 密钥、地址、钱包,让我们一起走向数字货币新旅程。
每天早上10:24发文,欢迎关注支持,一起加油!
照搬的信念,无法抵御波动的冲击,只有行动铸就的思想体系,并在行进中不断修正,才能让我们不断变得更好。——Scalers《投资赚钱就是信念变现》
《精通比特币》一书,英文原名为Mastering Bitcoin ,国内译做《精通比特币》。
本书电子版的链接如下,点击蓝色字可跳转阅读:
今天,我们开始《第4章 密钥、地址、钱包 》的学习。
4.1 简介
比特币的所有权,是通过数字密钥、比特币地址和数字签名来确立的。
数字密钥,不是存储在网络中,而是存储在一个文件或数据库中。
数字密钥,完全独立于比特币协议,由用户的钱包软件生成并管理,无需区块链或网络连接。
每一笔比特币交易,都需要一个有效的签名,才会被存储在区块链中。
密钥成对出现,由一个私钥和一个公钥所组成。
公钥,相当于银行帐号。私钥,相当于控制账户的PIN码或支票的签名。
在比特币交易的支付环节,收件人的公钥是通过其数字指纹表示的,称为比特币地址,就像支票上的“收款方”。
一般情况下,比特币地址由一个公钥生成,并对应于这个公钥。
本章主要内容如思维导图所示:
4.1.1 公钥加密和加密货币
公钥加密发明于20世纪70年代,是计算机和信息安全的数学基础。
适合加密的数学函数,如素数幂和椭圆曲线乘法。
这些数学函数,都是不可逆的。就是说,很容易向一个方向计算,但不可以向相反方向倒推。
基于这些数学函数的密码学,使得生成数字密钥和不可伪造的数字签名成为可能。
比特币,使用 椭圆曲线乘法 作为其公钥加密的基础算法。
在比特币系统中,用公钥加密,创建一组成对的密钥,用于控制比特币的获取。
密钥对,包括一个私钥和由其衍生出的唯一的公钥。
公钥,相当于银行帐号,被称为比特币地址,就像支票上的“收款方”,公钥用于接收比特币。
私钥,相当于支票的签名,用于比特币支付时的交易签名。
公钥和私钥之间存在特定的数学关系,即它们是用数学函数创立的,而数学函数是不可逆的,也就是容易向一个方向计算,但不可以向相反方向倒推。生成公钥和私钥的密码学,使用的这些数学函数的特性,使得私钥可用于生成特定消息的签名,并且,这个签名,还可以在不泄露私钥的同时,对公钥进行验证。
支付比特币时,比特币的当前所有者需要在交易中提交其公钥和签名,每次交易的签名都不同,但均从同一个私钥生成。
比特币网络中的所有人,都可以通过所提交的公钥和签名进行验证,并确认该交易是否有效,即确认支付者在该时刻对所交易的比特币拥有所有权。
大多数比特币钱包工具为了方便会将私钥和公钥以密钥对的形式存储在一起。然而,公钥可以由私钥计算得到,所以只存储私钥也是可以的。
4.1.2 私钥和公钥
一个比特币钱包中包含一系列的密钥对,每个密钥对,会包括一个私钥和一个公钥。
私钥,是一个数字,通常是随机选出的。
有了私钥,我们就可以使用椭圆曲线乘法,这个单向加密函数产生一个公钥(K)。
有了公钥(K),我们就可以使用一个单向加密哈希函数,生成比特币地址(A)。
由单向加密函数,产生密码,就相当于我们做一个几千行乘几千列的特难的数独游戏,解题这一边的游戏很困难,就是想要把每一个格子,都填上正确的数字,完成一个完整的游戏,这一点非常难。但是,完成了所有数字的填写之后,任何一个人想要验证它是否正确,就简单多了。
也就是,生成和验证的难易程度是完全不对等的,生成特别难,这样保证不会随随便便被破解,而验证相对来说要简单很多。
比特币网络中的所有人,都可以通过所提交的公钥和私钥签名进行验证,并确认该交易是否有效。
私钥——公钥——比特币地址,这是一个单向推导的过程,不可逆,如下图所示:
4.1.3 私钥
虽然私钥就是一个随机选出的数字而已,但是,私钥一旦被泄露给第三方,这就相当于私钥保护之下的比特币,也拱手相让了。
私钥还必须进行备份,以防意外丢失,因为私钥一旦丢失就难以复原,其所保护的比特币也将永远丢失。
私钥的重要性不用我多说吧,那就真是打死也不能告诉别人。
甚至在抄写私钥的时候,都不要有旁人在场,也就是无论如何谨慎都不过过。
关于因为私钥不慎泄露,导致某人自己钱包里的EOS被全部转走损失40多万元法币的故事,相信很多007er,还历历在目吧?
这个就不多说了,反正记住一点:除了你的遗产继承人,私钥打死也不能告诉别人。
还要记住一点,如果你使用的是象Imtoken这样的钱包,也记得把钱包的账号和密码给到家人,以保证数字货币在特殊情况下还能被使用,不然这些数字货币就进入了网络黑洞,从此再也不会重见天日了。
比特币私钥只是一个数字。你可以用硬币、铅笔和纸来随机生成你的私钥:掷硬币256次,用纸和笔记录正反面,并转换为0和1,随机得到的256位二进制数字,可作为比特币钱包的私钥。
但是这个方法太麻烦,并且有可能出现不能逾期的问题。所以,比特币网络系统,是用比特币软件,使用操作系统底层的随机数生成器,来产生256位的熵。
一般是通过在一个密码学安全的随机源中,取出一长串随机字节,对其使用SHA256哈希算法进行运算,这样就可以方便地产生一个256位的数字。
如果运算结果小于n-1,我们就有了一个合适的私钥。否则,我们就用另一个随机数再重复一次。
我们来直观的看一下,一个随机生成的私钥。
它是一个256位的二进制数,但是,是以64位十六进制数显示的,每个十六进制数占4位:
1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD
比特币私钥空间的大小是2256,这是一个非常大的数字。用十进制表示的话,大约是1077。
1077这个数字有多大呢?
我们可以用另一个数字来比较一下,科学家估计,整个可见宇宙中,只含有1080个原子。
(震惊脸.jpg)
4.1.4 公钥
通过椭圆曲线算法可以从私钥计算得到公钥,这是不可逆转的过程:
K = k * G ,其中k是私钥,G是被称为生成点的常数点,而K是所得公钥。
其反向运算,被称为“寻找离散对数”。已知公钥K,来求出私钥k是非常困难的,就像去试验所有可能的k值,即暴力搜索。
4.1.5 椭圆曲线密码学解释
椭圆曲线加密法,是一种基于离散对数问题的非对称加密法,可以用对椭圆曲线上的点,进行加法或乘法运算来表达。
比特币使用了secp256k1标准所定义的一条特殊的椭圆曲线和一系列数学常数,该标准由美国国家标准与技术研究院(NIST)设立。
Fig403.png下图显示了在一个小了很多的素数阶17的有限域内的椭圆曲线,其形式为网格上的一系列散点。
而secp256k1的比特币椭圆曲线,可以被想象成一个极大的网格上,一系列更为复杂的散点。
下面这部分的内容,做为一个数学学渣,俺就直接跳过了。
如果以后有需要再来研究,不然,这本书就读不下去了。这也是我多次提到的:
小白研读科学书籍应有的态度,是读不懂就跳过。读完全书,再回头看这些以前读不懂的内容,很多问题都会引刃而解。
4.1.6 生成公钥
以一个随机生成的私钥k为起点,我们将其与曲线上已定义的生成点G相乘,以获得曲线上的另一点,也就是相应的公钥K。
生成点是secp256k1标准的一部分,比特币密钥的生成点都是相同的:
{K = k * G}
其中,k是私钥,G是生成点。
在该曲线上所得的点K,是公钥,因为所有比特币用户的生成点是相同的,一个私钥k乘以G,将得到相同的公钥K。
k和K之间的关系是固定的,但只能单向运算,这就是可以把比特币地址与任何人共享,而不会泄露私钥的原因。
因为,数学运算是单向的,所以私钥可以转换为公钥,但公钥不能转换回私钥。
大多数比特币程序,使用OpenSSL加密库进行椭圆曲线计算。
第四章第一节的内容到此结束,明天我们开始《第二节比特币地址》的学习。
今天就到这里吧,明天我们继续,祝大家夏天快乐!
275/365
20180807首发简书
第四章整体结构:
第四章参考文献:
网友评论