工作量证明的共识机制
比特币系统的各个节点遍布全球,各个节点之间相互不认识,甚至相互不信任,而且每个节点都是对等的,这就带来一个问题:谁有权往这个账本录入数据?
如果有好几个节点同时对系统进行数据写入,最终以谁的为准?这就是一个在分布式网络中如何保持数据一致性的问题,就必须建立一种规则协议,即共识让各个参与网络的节点达成数据上的一致性,让每个节点都能共同遵守并对遵守的结果一致认可。
另外,这些分布式节点之间会存在较高的网络延迟,各个节点所观察到的事务先后顺序不可能完全一致(著名的“拜占庭将军问题”),这时候也需要建立一种机制,能够对在差不多时间内发生的事务的先后顺序得到认可。
为此中本聪非常巧妙地结合密码学的哈希算法,采用“发送信息加入成本”的方法,让各个分布节点公平地使用自身电脑的算力去竞争记账权利,第一个算出来哈希难题答案的人,就获得记账权利,并得到一定数量的比特币奖励。其他人就确认该记账的正确性并记录入账,这就是工作量证明(Proof of Work,简写POW)共识机制。
POW共识机制实际上就是多劳多得,比拼的是力量大小,即各个节点比拼自身电脑算力的强弱来赚取记账机会,算力越强,获得记账的机会就越大,从而获得比特币的机会就越大。
POW共识的过程就是现在人们常说的“挖矿”过程,各个节点就是“矿工”。所有矿工都按照中本聪既定的游戏规则积极贡献力量,使得比特币系统十年如一日地正常运行。
非对称加密算法
密码学的运用是支撑比特币系统的基础技术之一,其中在数字签名方面,比特币系统采用了非对称加密算法。
所谓非对称加密算法,就是说密钥是一对存在的,解密和加密必须使用两个不同的密钥,其中一个叫公钥,一个叫私钥。公钥加密就只能私钥解开,反之私钥加密就只能公钥解开。
公钥是对外公开的,而私钥就只能个人自己保管,当一个人想向对方发送加密信息时候,只需要拿到对方的公钥,然后用对方公钥给数据加密,发送出去。这样就算有第三方拦截了该信息,但由于没有对应的私钥解密,就无法获取该加密数据了,这样就保证了数据信息的安全性;
另一方面,当一个人使用私钥加密信息(或者叫签名)发送出去,对方能够用此人的公钥解密,就可以确认该信息是此人发送的(因为只有他拥有私钥),这种行为就叫数字签名。
非对称加密算法有多种,在比特币系统中,使用的是椭圆曲线数字签名算法,这是目前常用的一种非对称加密算法,简称ECDSA。其中EC是“椭圆曲线”的简称,DSA是“数字签名算法”的简称。
另外在对椭圆曲线的参数确定上,比特币系统又使用了名为SECP256k1的曲线参数,这样在运作中系统随机得出32个字节的私钥,然后通过椭圆曲线数字签名算法(使用SECP256k1曲线)得出公钥,再运作多次哈希算法得出公钥哈希,并结合版本号等形成了最终的账户地址。
私钥可以推导出公钥和公钥哈希,但公钥和公钥哈希却不能推导出私钥。因此私钥需要每个人好好保管,一旦丢失私钥,就相当于账户里的资产拿不回来了。