公开金钥加密的每一位使用者必须自行产生自己所拥有的金钥对(Key pair),包括一把「私密金钥」(Private key)与一把「公开金钥」(Public key),加密与解密使用不同的金钥,使用者必须秘密地保存自己的私密金钥,并且在网路上发表公开金钥。公开金钥可以用来加密,也可以用来验证,验证的流程如图一所示,传送端使用自己的「私密金钥」对文件(明文)进行加密(签署文件)产生密文再传送到网路中,接收端使用传送端的公开金钥解密(确认签署者)得到明文,如果可以解密代表确认文件真的是传送端的某人传送出来的,数位签章就是使用这种方式来验证文件的真伪。
假设Alice 支付Bob 金额10btc 购买一颗苹果,则她的手机应用程式(比特币电子钱包)使用Alice 自己的私密金钥将讯息加密,这个动作称为「数位签章」(Digital signature),想想这不就好像我们在交易文件上签名一样吗?
接下来再将讯息传送到节点A,节点A再使用Alice的公开金钥将讯息解密,如图二所示,如果真的可以解开代表这个讯息确认是由Alice发出来的,而且Alice也不可否认,因为只有Alice的公开金钥能够解开Alice私密金钥加密过的讯息。
比特币帐本是由一个一个的「区块」(Block)连接而成的「链结」(Chain),因此这种技术又称为「区块链」(Block chain),如图三所示,每一个区块记录着付款人与收款人以及交易金额,每一个区块都记录了许多笔交易,区块与区块之间再链结起来,例如:区块3链结到区块2,再链结到区块1,最后再链结到区块0。
值得一提的是,实际上比特币帐本并不是像Excel一样的表单,基本上比特币是一种虚拟电子货币,因此比特币帐本其实就是一个电脑程式,里面有许多栏位,其中包括:
1.表头(Header)previousblockhash:前一个区块的杂凑值(Hash value)。difficulty:杂凑(Hash)必须小于「困难指数」(Difficulty)。time:代表这个区块形成的时间,以Unix作业系统格式表示。nonce:计算杂凑值所使用的参数。merkleroot:储存「交易」(Transaction)的「摘要」(Summary)。
2.交易(Transaction)tx:储存「交易」的栏位,每一个区块可以储存多笔交易。
3.其他栏位confirmations:代表这个区块已经被35,561个节点(Node)确认过了!height:代表这个区块在比特币区块链中的排序为第277,316个。
4. hash:利用杂凑演算法(Hash algorithm)计算出杂凑值。
杂凑演算法是一种从资料中建立「数位指纹」(Digital fingerprint)的方法,可以将任何长度的资料转换成一个长度较短的「杂凑值」。某一段资料对应到某一个杂凑值,不同资料具有不同杂凑值,就好像不同人具有不同指纹一样,所以称为「数位指纹」,我们可以利用杂凑值来确认资料有没有被篡改。
「区块」是指电脑中的一组资料,以事先设定好的栏位与格式储存,我们可以将图四的比特币帐本看成是一个区块,我们的目标就是要将这个区块的资料「封锁」(Block)起来让别人无法篡改。
问题是,如果「重新计算杂凑」很简单,则这整个保护机制就无效,而且我们不只需要「资料篡改可以检查出来」,更需要「资料无法篡改」,因此科学家发明了「条件杂凑」(Conditional hash),规定「杂凑」必须小于「困难指数」,让杂凑很难重新计算,而保护「交易」的内容不被篡改。
讲到比特币大家一定常常听到网路上有许多人在「采矿(Mining)」,到底什么是比特币的采矿呢?各节点熟悉电脑操作的自愿者计算「杂凑」小于「困难指数」的动作称为「采矿」,而我们所要采的「矿」就是计算出「杂凑」小于「困难指数」。进行采矿的人称为「矿工」(Miner),计算出一个区块可以获得50btc 的酬劳,如果其他支付交易有给手续费,则矿工还会获得手续费。比特币设计大约每10 分钟采出一个区块,每采出21 万个区块(大约4 年)酬劳减半,因此比特币总数不超过2,100 万个(btc) ,总数固定可以提升比特币的价值。
比特币2009 年发行矿工酬劳50btc,2012 年12 月第一次减半酬劳剩下25 btc,2016 年7 月第二次减半酬劳只有12.5btc,酬劳下降使手续费成为采矿动机。为了维持大约每10 分钟采出一个区块,产生新区块的难度会定期调整,每采出2,016 个区块(大约两周)会自动调整接下来2,016 个区块的采矿难度。比特币矿工最早使用Intel 或AMD 的中央处理器(Central Processing Unit,CPU)产品来挖矿,2013 年矿工开始使使用图形处理器(Graphics Processing Unit,GPU)、现场可程式化逻辑阵列(Field Programmable Gate Array,FPGA)来进行,甚至特定应用积体电路(Application Specific Integrated Circuit,ASIC)投入,使个人矿工已经没有收益。
区块链的技术是电脑科学家创造出来的东西,它有许多优点产生许多创新的应用,但是同样的也有许多限制,目前比特币遭遇到的困难主要有下列几项:
比特币大约每10 分钟采出一个区块,可储存1MB 的资讯,由于每一个区块容量是有限制的,随着交易量愈来愈多,容量的限制会使处理速度受到影响,这个问题可以经由变更比特币的设计来解决,但是目前比特币社群尚无共识。由于区块容量的限制,再加上工作量证明也需要时间处理,因此比特币无法处理超过每秒7次的交易,和目前广泛使用的VISA这样能够每秒处理数万次交易的支付系统相差很多,因此比特币不适合即时大量的小额交易。使用「可验证的匿名制」,可验证代表可以确认这笔交易的真实性,匿名制代表并不知道发动这笔交易的人是谁,因此容易造成交易追踪断线变成不法人士的洗钱管道,例如日前的勒索病毒「WannaCry」肆虐全球,怪客向受害者勒索价值300美元的比特币,使用比特币就是因为不容易追踪。分散式拓朴没有中央控管机制会造成交易不确定性、究责与赔偿困难,而且服务提供者(节点或电子钱包)的技术可能会有落差,那一天真的发现自己的比特币不见了!或是已经完成的交易却无效,基本上很难找到负责的人。由于比特币在法规上存有疑义难以被主管机关接受,因此有人将比特币的部分技术抽离出来寻找新的应用,并且取了新名字:区块链(Block chain),后来发现区块链落实困难,也很难直接套用到现用的其他应用上,因此开始演化并且出现新名字,例如:分散式帐本(Distributed ledger)、分享式帐本(Shared ledger)、超级帐本(Hyper ledger)等。比特币(Bitcoin)的目标明确,就是要取代传统货币扮演货币支付的角色,但是仍然有许多困难必须克服,包括:重复支付、结算确认、交易同步等。
比特币主要必须达到3 个特性:
交易识别确认:使用可验证的匿名制,确认交易真实,使用者不可否认。不可篡改否认:使用区块(Block)与链结(Chain)确保交易资料无法篡改。节点资料同步:使用工作量证明(Proof of Work,POW)达成收敛同步。
区块链是集合了几种软体程式的技术,由全世界许多节点(电脑主机)组成的的系统,只要满足3 个特性的应用都可以用区块链来做,由于区块链落实困难开始演化,并且出现新名字:分散式帐本(Distributed ledger)、分享式帐本(Shared ledger)、超级帐本(Hyper ledger)。
比特币在法规上存有疑义难以被主管机关接受,因此有人将比特币的部分技术抽离出来寻找新的应用,并且取了新名字:区块链,可能的应用包括:
加密数位货币(Crypto currency):必须考量主管机关接受程度,例如:比特币、美国邮政货币(Postcoin) ;考量是否适合应用在高频交易,Ripple将其应用在非即时的跨国金融机构外汇交换业务可能更合适。有价资产登录(Value registry):Factom、SmartContract将分散式帐本应用在所有权与存在证明(Proof of Existence and Possession,POEAP),这类的应用该是目前区块链最成功的例子。价值型联网(Value web):进行有价资产登录(Value registry)、智慧型合约(Smart contract)、国内支付(Domestic payment)、国际支付(International payment)、贸易金融(Trade finance)、资本市场(Capital market)。价值生态系(Value ecosystem):应用在非金融服务,Ethereum将其应用在公开帐本(Public ledger)提供各种商业应用;R3CEV将其应用在私密帐本提供各种金融应用。