之前的几篇文章我们介绍了一些基础的密码学原理,现在我们来自己设计一个简单的加密货币。一个真正的加密货币需要很多非常复杂的密码学知识,所以在这里我们只是设想一个最精简的加密货币展示如何应用哈希公式及数字签名等基本知识。
我们来设想一种最最简单的加密货币,高飞币。高飞币遵循以下几条规则。首先高飞(公钥身份)是这种货币发行者,他可以随时随地创造出更多属于他的高飞币。他需要为每枚货币建立一个独一无二的ID,并为ID做任何人都可以认证的数字签名。第二个原则是高飞币是可以被转账或消费的。高飞若想把他创造的货币转账给麦克(另外一个公钥身份),只需发表一个声明“我把‘这枚高飞币’转账给麦克”。而“这枚高飞币”是货币的哈希指针。麦克验证签名无误后表示转账成功。因为高飞是货币的原拥有者,所以他必须为所有的转账行为进行声明签名。现在麦克可以合理合法的获得这枚高飞币因为高飞签名转账的数据结构已存在,并且追溯到这枚货币高飞曾是合法的拥有者。在系统中“麦克收到高飞转账的一枚高飞币”已成既定事实并可被任何人验证。现在麦克可以继续交易这枚货币,比如转账给比尔,只需要签署另外一个声明,“将这枚高飞币的哈希指针交付给公钥身份比尔”。任何人都可以验证比尔是新的拥有者,并用哈希指针链回验证麦克曾合法拥有这枚币,再追溯到高飞最早拥有这枚币。
总而言之,高飞可以随时创造一个新的高飞币通过签署一个声明“我创造了一个带有独特ID的新货币”,而任何货币的拥有者都可以通过签署声明“我将这枚货币转账给了某个公钥身份”,任何人都可以验证这条交易链条上的每个签名。
你如果你搞懂了以上原理就会发现实际上高飞币有严重的安全隐患。麦克拥有一枚高飞币后可以签署声明“将这枚币转账给比尔”,但是他可以再创建一个数据结构通过签署声明“将这枚同样的币转账给乔治”。所以尽管麦克只拥有一枚高飞币,但是他却将这枚币进行了重复交易。而乔治在不知道这枚币曾转给比尔的情况下,验证签名和之前的签名都不会发现问题。他会认为自己合法的继承了这枚高飞币但实际被蒙骗,比尔同样如此。这是加密货币领域的一个严重问题,被称为“重复交易”因为麦克重复交易了同一枚高飞币。尽管具有加密货币最基本的雏形,但是高飞币没有解决重复交易问题所以它并不安全。
为了解决重复交易问题我们重新设想另外一种货币,叫做史高治币。类似于高飞币,这种货币是由史高治创造并发行的但是在数据结构上更复杂一些。关键在于史高治币会使用一个区块链结构公示历史上所有的转账行为,这个区块链由史高治进行数字签名。每一个区块都包含一笔交易(比特币将多笔交易放在一个区块)和指向前一个历史交易区块的哈希指针。史高治掌握着整条区块链的哈希指针(头部哈希指针),签名并公布了它。所有人都可以验证史高治确实签名了这笔交易,并且他们可以回溯区块链去查看验证历史上发生过的每一笔交易。这样史高治币就避免了重复交易。如果麦克继续试图把已经转账给比尔的高飞币再次转给乔治,史高治在查看区块链的交易历史后就会发现问题并拒绝这笔交易。
史高治币有两种交易模式,第一种为发行新的货币。就像高飞币一样,史高治可以随意发行新的货币,并且他可在单次交易中可以创造多枚新币。
如图所示,在交易编号为73的交易中,创造编号为0,1,2的三枚新币。这三枚新币都有不同的面值:分别为3.2史高治币,1.4史高治币和7.1史高治币。每枚新币都有对应公钥的接收人。每枚发行的新币都是合法的因为史高治会签名并添加进交易历史中。我们无需担心史高治是否有权随意发行新币,因为整个史高治币系统都是他本人所控制,他在这里就是造物主。
第二种货币交易为转账交易,也就是某人将已发行的货币转给其他人。这时支付者的交易货币将被消耗和摧毁,而在接受者那里生成等值的新币。
如图所示,在ID为73的交易中,会销毁支付人ID为68(1),42(0),72(3)的货币,并在三个接受者账户分别生成73(0)(3.2史高治币);73(1)(1.4)史高治币),73(2)(7.1史高治币)。每笔转账交易都需要获得支付者认可交易的签名。史高治在确认转账交易程序合法前需要确认以下四件事:
交易的货币是合法的,是通过之前的合法交易创造的。
这笔货币没有被重复交易。
支付者的支出和接收者的收入持平。
每笔交易都被支付者合法签名。
当这四点都确认无误后,史高治会接受交易行为,并将其写入区块链当中使大家都可看到。需要注意的是,每笔交易的货币面额都是恒定的,不能被合并或拆分。我们只能把接受到的货币面额,等值的进行下次交易。比如我们接收到73(0)3.2史高治币面额的货币,不能拆分为面值2进行交易并保留1.2。但是我们可以通过自己交易给自己来打破这种限制。比如我们销毁73(0)的货币,并产生74(0)2史高治币面额和74(1)1.2史高治币面额的交易,对象为自己。同样我们可以合并交易货币。所以尽管交易货币面额是恒定的,但我们依然可以灵活的交易。
总体而言,史高治币系统是可行的人们可以判定哪些交易合法并避免了重复交易。但是这个货币也是不合理的因为所有步骤都是史高治一人把控,他可以为所欲为。一旦史高治说谎或者出错,该货币系统就会出现漏洞。所以问题的根源是该系统为中心化的,史高治会非常满意这个规则但是用户不会。所以加密货币的核心技术挑战是我们需要一个像史高治币一样运行的系统但是要去掉史高治这个中心化信任权威。我们需要一个去中心化的游戏规则而不是信任某个权威。这需要我们去中心化的解决如何确认一笔交易真实有效,如何分配ID,如何公平合理的发行新币等难题。比特币成功的解决了这些问题,但是我们若想理解他是如何运作的,还需要学习更多的知识,敬请关注下篇文章。
领取专属 10元无门槛券
私享最新 技术干货