在开始之前,我想先请你试试看回答下面几个问题,看看你对比特币了解多少

1.可以相信这笔钱是真实的,而不是伪造的吗

2.可以确定数位货币只能使用一次吗(俗称"双重支付","双花"问题)

3.可以确保除了我以外,没有人可以声称我的一笔钱属于他们吗

这三个问题来自Mastering Bitcoin一书,是数位货币最基本的三个问题,我们一一解答这三题,并且我会试着用最平白的语言讲解其中的技术原理。

用一句话来说明比特币会是:比特币是一串程式码,用密码学原理保护着,它同时运行在网路上好几个伺服器,每十分钟会多一个区块(“区块”也是一段新的程式码)。

接着,你手上会有三种东西,私钥/公钥,和地址。

私钥是一串0和1构成的数字,总共256位,所有可能即是2²⁵⁶(2的256次方),形象化的形容是,地球上每一粒沙子都当作一个地球,这些沙子地球里的每一粒沙子都总数大约就等于2²⁵⁶次方。另一种说法是,整个宇宙里面能观测到的原子数量,再乘以1000就相当于2²⁵⁶。关于这个数字到底有多大可以参考最下面的补充资料。

公钥是私钥经过一串数学计算后得到的。简单讲是这样但….来吧!

这是secp256k1标准的椭圆曲线加密(ECC),我们的目标是找到一个符合的解(x,y)。比特币的私钥k,乘以常数G(由secp256k1内建的标准数),会得到一个公钥K(x,y)。这个数有多大呢大概是这样: x = F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A

y = 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB

(以16进位表示)

最后是地址,通常长这样”1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy”,这是由公钥K经过计算而来,计算方式如下:

A=RIPEMD160(SHA256(K))

也就是地址经过SHA256算出来的结果,再用RIPEMD160算一次。

接着为了防止填错,大部分的地址都会用Base58Check形式显示。Base58Check中没有零0、大写O、小写L、大写i,还添加了验证码CheckSum。

第一个问题,其实可以从几个角度去看。先来看怎么确定真实性好了,所有的比特币最初的来源都是挖矿,「挖矿」行为是好几个伺服器竞争猜一道数学难题,猜对的伺服器能从系统本身获得比特币。之后比特币可能转手多个人之后流到我手上。在每一次转手过程中,都会将交易资讯经由椭圆曲线加密的ECDSA数位签章作证明,证明一笔钱(确切的说是一段程式码)转移给了另外一个人。这个签章证明了私钥拥有人授权将钱转出到另一个地址,包括转出给谁、多少数量都记录在内。其他人可以藉由公钥来验算这是不是真的。这些资讯都将广播到网际网路上,等待矿工算完难题将这些资讯打包成新的区块。一个个区块串成了区块链,我们可以藉由这个方式确定每一笔交易都是真的,如果一个人将比特币(再次强调,他是一串程式码)传给你,而他也包含了该有的数位签章,又被矿工打包确认,那这个比特币无疑是真的。

今天先写到这里,我怕我不先发出来又会开始吹毛求疵…后续两个问题之后再发文。