打字猴:1.703864364e+09
1703864364 区块链技术驱动金融:数字货币与智能合约技术 [:1703863906]
1703864365 区块链技术驱动金融:数字货币与智能合约技术 第1章 密码学及加密货币概述
1703864366
1703864367
1703864368
1703864369
1703864370 所有货币都需要通过某种方式控制供给,并需要实施各种安全属性以防止欺骗行为发生。就法定货币而言,中央银行这样的机构控制货币供给,并在实体货币上加上防伪标识,这些安全属性提升了攻击货币的门槛和难度,但并非不可能伪造。最终,执法部门仍需要介入,以防止货币系统规则受到破坏。
1703864371
1703864372 加密数字货币也必须采取安全措施,以防御破坏系统状态的行为,同时加密数字货币还需要防止“混淆”,即对不同的人说出相互矛盾的话。例如,如果爱丽丝(Alice)让鲍勃(Bob)确信她向他支付了一个数字币,她就不能再说服卡罗尔(Carol),也给她支付同一个数字币。加密数字货币与法定货币的不同在于,其安全规则需要完全通过技术手段实现,而非依赖于中央机构。
1703864373
1703864374 顾名思义,加密货币着力采用密码技术。密码学提供一个将加密货币体系规则编码到系统本身的机制,我们不但可以利用密码学防止对系统的干扰,并且能够避免混淆,也能用其将新货币单位创造规则编码到数学协议中。为了能够深刻理解加密数字货币系统,我们需要首先探究该系统所依赖的密码学基础。
1703864375
1703864376 密码学是一个高深的学术领域,用到了很多不被大众所知的数学理论,并且其理论也比较复杂。幸运的是,比特币只运用到了密码学中少量相对较为浅显的一些理论。在本章中,我们会特别讨论一下密码学中的哈希算法(Hash)和数字签名(digital signature)技术,这两个基本概念对构建一个加密数字货币系统非常关键。在后面的章节中,我们会介绍一些更复杂的密码学理论,例如零知识验证(zero-knowledge proof), 这个概念被应用到了对比特币网络的拓展和改进之中。
1703864377
1703864378 在学习了必要的密码学基础之后,我们将讨论如何用这些密码学基础构建一个加密数字货币系统。在本章末尾,我们会列举一些简单的加密货币案例,来阐明我们在设计中遇到的挑战。
1703864379
1703864380
1703864381
1703864382
1703864383 区块链技术驱动金融:数字货币与智能合约技术 [:1703863907]
1703864384 区块链技术驱动金融:数字货币与智能合约技术 1.1 密码学哈希函数
1703864385
1703864386 我们需要理解的第一个密码学的基础知识是密码学哈希函数,哈希函数是一个数学函数,具有以下三个特性:
1703864387
1703864388 ● 其输入可为任意大小的字符串。
1703864389
1703864390 ● 它产生固定大小的输出。为使本章讨论更具体,我们假设输出值大小为256位,但是,我们的讨论适用于任意规模的输出,只要其足够大。
1703864391
1703864392 ● 它能进行有效计算,简单来说就是对于特定的输入字符串,在合理时间内,我们可以算出哈希函数的输出。更准确地说,对应n位的字符串,其哈希值计算的复杂度为O(n)。
1703864393
1703864394 这些特性定义了一般哈希函数,以这个函数为基础,我们可以创建数据结构,例如哈希表。我们将只专注于加密的哈希函数,要使哈希函数达到密码安全,我们要求其具有以下三个附加特性:(1)碰撞阻力(collision-resistance);(2)隐秘性(hiding);(3)谜题友好(puzzle-friendliness)。
1703864395
1703864396 我们会仔细研究这些特性,并会逐步阐释我们为什么需要这样的函数。学习过密码学的读者可能会注意到,我们这里对于哈希函数的论述与一般的密码学课程会有所不同,特别是关于谜题友好。在一般密码学中,谜题友好并非加密的哈希函数的一般要求,却对加密数字货币这一特性非常有用。
1703864397
1703864398 特性1:碰撞阻力
1703864399
1703864400 加密的哈希函数的第一个特性是它要具有碰撞阻力。这里的碰撞指对于两个不同的输入,产生相同的输出。如果对于哈希函数H(·),没有人能够找到碰撞,我们则称该函数具有碰撞阻力(见图1.1)。即:
1703864401
1703864402 碰撞阻力 如果无法找到两个值,x和y,x≠y,而H(x)=H(y),则称哈希函数H具有碰撞阻力。
1703864403
1703864404
1703864405
1703864406
1703864407 图1.1 哈希碰撞
1703864408
1703864409 注:x和y分别是不同输入,当作为哈希函数的输入时,会产生相同的输出。这时我们就说这个函数是哈希碰撞的。
1703864410
1703864411 注意,我们说没人能找到碰撞,并不表示不存在碰撞。事实上,通过简单的计数论证(counting argument),我们可以证明碰撞的确存在。哈希函数的输入空间包含所有长度的任意字符串,但输出空间则只包含特定固定长度的字符串。因为输入空间比输出空间大(输入空间是无限的,而输出空间是有限的),一定会有输入字符串映射到相同的输出字符串。实际上,根据鸽巢原理(Pigeonhole Principle),我们可以得出,必然会有大量可能的输入被映射到任意特定输出(见图1.2)。
1703864412
1703864413
[ 上一页 ]  [ :1.703864364e+09 ]  [ 下一页 ]