打字猴:1.703867223e+09
1703867223 区块链技术驱动金融:数字货币与智能合约技术 [:1703863944]
1703867224 区块链技术驱动金融:数字货币与智能合约技术 6.5 零币和零钞
1703867225
1703867226 在零币和零钞陆续出现之前,还没有哪个加密数字货币的匿名化方案可以让人如此兴奋,不光是因为它们所实施的密码学原理非常高妙,也因为它们承诺可以达到的匿名性非常强大有效。到目前为止,所有我们看到过的匿名加强技术,都是在原来的核心技术协议之上加载匿名化处理,零币和零钞则是在协议层就融合了匿名化处理。我们将在这里以比较大的轮廓阐述一下这个协议,并对某些细节进行了必要的简化,但读者可以在本章结尾的延伸阅读部分找到原始论文作为参考。
1703867227
1703867228 兼容性(compatibility)。零币和零钞为保证很强的匿名性,是有代价的:不同于中心化的混币服务和合币交易,这些协议和现在的比特币不兼容。通过软分叉(soft fork)[1]比特币协议的方式去实施零币在技术上是可行的,但实际操作的难度会对此造成很大的障碍。零钞甚至不能通过软分叉比特币协议的方式去实现,而只能以一种另类币(altcoin)的方式存在。
1703867229
1703867230 加密学保证(cryptographic guarantees)。零币和零钞在协议层已经融入了混币功能,其匿名属性来自加密学的保证,从性质上说,这些保证比我们之前讨论的其他混币技术更好。在隐私保护方面,你不需要信赖任何人,比如,混币服务提供商、混币节点,或其他任何形式的中介,甚至是矿工和共识机制协议。和大多数密码学保证一样,这种匿名性的保证仅仅依赖于攻击者的计算能力上限。
1703867231
1703867232 零币
1703867233
1703867234 为了解释零币,我们首先要介绍一下基础币(Basecoin)的概念,基础币是一种类似于比特币的另类币,而零币是这种数字货币的一种延伸,其所提供的匿名性的核心特点在于,你可以将基础币和零币进行来回转换,并且当你这么做的时候,就打破了旧的基础币和新的基础币之间的关联。在系统里,基础币是你需要进行交易的货币,零币只是提供了一种交易基础币的机制,这种机制可以确保新币和旧币之间毫无关联。
1703867235
1703867236 你可以把你所拥有的每一个零币当作一个令牌,用来证明你拥有这么一个零币并且使其不能再被消费。这种证明机制并不会显示你所拥有的是哪一个零币,而仅仅是证明你确实拥有一个零币,稍后你可以将这个证明给矿工看,以赎回这个证明并取得一个新的基础币。用一个比喻来说,就好比你去赌场用现金换了一些扑克筹码,这些筹码就是一种证明,证明你存了多少现金,等你离开赌场时,就可以拿着这些证明去换相同数量的但并不一样的现金。当然,不像扑克筹码,除了你可以稍后用来赎回一个基础币,你并不能拿零币做任何事情。
1703867237
1703867238 为了在加密数字货币中让这样的机制正常运转,我们要用密码学的方式来执行这些证明,我们需要确保每一个证明只能赎回一个基础币,否则你就可以通过把一个基础币转换成一个零币,然后多次赎回获取更多的免费基础币。
1703867239
1703867240 零知识验证
1703867241
1703867242 我们使用的核心加密学工具是零知识验证,这种方式可以证明一个声明(数学上的)是正确的,而不需要展示可推导该声明正确性的任何其他信息。例如,假设你已经做了很多工作解决了一个哈希谜题,并且你想要向其他人证明你做到了。换而言之,你想要证明“我做到了”这个声明。
1703867243
1703867244 I know x such that H(x‖〈other known inputs〉)<〈target〉
1703867245
1703867246 当然,你可以展示上述公式里的x值来证明你做到了,但是零知识验证可以让你向别人证明你做到了这一点,同时不需要透露x的值,即便在看过你的证明之后。
1703867247
1703867248 你也可以证明一个如“我知道一个x值,而公式H(x)的结果属于下面这一个集合{…}”这样的声明。该证明既没有展示x值是什么,也没有证明集合里面到底哪一个元素等于H(x)。至关重要的是,零币就是利用零知识验证来实现其功能的。事实上,零币中被这种方式证明的声明,与后面要提到的例子非常相似。本书中,我们把零知识验证当成一个黑匣子,只说明了零知识验证可以实现的属性以及在这个协议中的哪个部分是必需的,我们并没有深究如何实现这一功能的技术细节。零知识验证是现代密码学的一个基石,是很多相关技术协议的基础。再一次强调,我们建议有兴趣的读者可以参考延伸阅读中提到的文献,去了解更多更加详细的内容。
1703867249
1703867250 铸造零币
1703867251
1703867252 零币通过铸币过程而产生,而且任何人都可以铸造一个标准面值的零币。为简便起见,我们认为零币只有一种面值,每一个零币价值一个基础币。虽然任何人都可以铸造一个零币,但是产生的零币并不自动具备任何价值——你不可能获得免费的钱。只有把零币放到区块链网络上,并且通过消耗一个基础币的方式,它才能具备价值。
1703867253
1703867254 为了铸造一个零币,你需要使用加密学承诺。回顾一下我们在第1章讲过的内容,承诺方案类似于将一个值放入一个信封,并将信封置于所有人的视野中(见图6.11)。
1703867255
1703867256
1703867257
1703867258
1703867259 图6.11 一个序列号的承诺
1703867260
1703867261 注:密码学承诺好比把一个序列号封装到一个信封里。
1703867262
1703867263 铸造零币的过程分为三步:
1703867264
1703867265 1.生成一个序列号S和一个随机密钥r。
1703867266
1703867267 2.计算一个函数Commit(S,r),这是序列号S的承诺。
1703867268
1703867269 3.如图6.12所示,在区块链上发布该承诺,这需要消耗一个基础币,此币不可再被花费,进而创建了一个零币。此时并S和r仍然是保密的。
1703867270
1703867271
1703867272
[ 上一页 ]  [ :1.703867223e+09 ]  [ 下一页 ]