一文全面知悉区块链技术
由于一些原因我们将一些老文转载过来为了大家学习更加系统。可能会有几天老文集中发布,希望大家理解。
引人入胜的拜占庭将军问题(或者可以称为难题)
让人生,让人死,让人痴迷,让人疯狂。这就是传说中繁华与没落,绝望与救赎并存的东罗马帝国首都--拜占庭。
起源:拜占庭位于现在土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国国土辽阔,为了防御敌人每个军队都分隔很远,将军与将军之间只能靠信差传消息。在战争时期,拜占庭军队内所有将军和副官必须达成一致共识,决定是否有赢的机会才去攻打敌人的阵营。但是,军队可能有叛徒和敌军间谍,左右将军们的决定,扰乱军队整体的秩序。在达成共识的过程中,有些信息,往往并不代表大多数人的意见。这时候,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,就是“拜占庭将军问题”。
两军问题:军队与军队之间分隔很远,传递信息的信差可能在途中阵亡,或因军队距离不能在得到消息后即时回复,发送方也无法确认消息确实丢失的情形,导致不可能达到一致性。
在原始的战争年代,将军与将军、将军与下属间只能采用原始的方式——“出
行靠走,通讯靠吼”的口头传输。这对应兰伯特论文提出算法中的第一部分的口头消息算法,简称OM(m)算法。这种情形,真伪很难辨别,只有当叛徒的总数不超过将军总数的1/3,成为一个特殊的“拜占庭容错系统”时,才能在很大的消息验证代价后,实现最终的一致行动。这个结果非常令人惊讶,如果将军们只能发送口头消息,除非超过2/3的将军是忠诚的,否则该问题无解。尤其是,如果只有三个将军,其中一个是叛变者,那么此时无解。但这样的错误,这样的有意、无意的“叛徒”却可能经常出现。无论是我们把“叛变的将军”替换成以下哪种,该问题都成立。
解决拜占庭将军问题的算法必须保证:
A.所有忠诚的将军必须基于相同的行动计划做出决策。
忠诚的将军按算法的要求行动,而叛徒则按他们自己的意志行动。算法要保证不管叛徒怎么做,条件A都能得到保证。忠诚的将军们不但要能达成一致,而且要同意一个合理的计划。这就要求条件B。
B.少数叛徒不能使忠诚的将军做出错误的计划。
这一条是很难做到的,因为“错误的计划”很难形式地加以定义。
我们考虑将军们怎么达成一致。设有n个将军,v(i)表示第i个将军送出的信息。每个将军用相同的方法把v(1),…,v(n)按某一种逻辑方式组合起来,形成一个行动计划。要满足条件A,将军们就必须用同样的方法来组合这些信息。而条件B要求使用的方法是健壮的。考虑最简单的情况,如果决定只有进攻和撤退两种可能,v(t)就是将军认为选择那一种行动最好,而最后的决定则基于多数表决。少数叛徒只有在忠诚的将军们几乎随机地(每一种选择的概率都是1/2)做出决策时才能影响决策,但既然每一种选择的概率都是1/2,那就不管怎么决策都不能说是坏的。
如果把第i个将军的信息v(i)送给其他将军。由于条件A要求每一个忠诚的将军得到v(1),…,v(n)相同的值,而叛徒将军可以给不同的将军送不同的值。为了使条件A得到满足,下面两条必须成立。
1.每一个忠诚的将军得到v(1),…,v(n)相同的值。
这就意味着忠诚的将军并不一定使用第i个将军送来的信息作为v(i)。因为第i个将军可能是叛徒。但这又可能使忠诚的将军送来的信息也被修改,因为忠诚的将军并不知道第i个将军是忠诚的,还是叛徒。如果要满足条件B,这是不能允许的。例如,我们不能因为少数叛徒说“撤退”,忠诚的将军说“进攻”,而做出“撤退”的决定。因此,要求
2.对每一个 i,如果第i个将军是忠诚的,其他忠诚的将军必须以他送出的值作为v(i).
我们可以重写条件1如下。
1’。对每一个 i,不论第i个将军是忠诚的,或是叛徒,任何两个忠诚的将军使用相同的值v(i).
条件1’和2都只牵涉到第i个将军怎么送一个值v(i)给其他的将军。因此,我们可以用司令送命令给副官的方式叙述如下:
拜占庭将军问题:一个司令要送一个命令给他的n-1个副官,使得
IC1。所有忠诚的副官遵守同一个命令。
IC2。假如司令是忠诚的,则每一个忠诚的副官遵守他送出的该命令。
条件IC1和IC2称为交互一致性条件。注意,如果司令是忠诚的,IC1可以从IC2推出来。但是,司令并不一定是忠诚的。
这个问题比过去的容错更困难。因为过去的容错都是针对那样一些软硬件故障,其故障效果是固定的。而拜占庭故障却假定故障机是鲜活的,它可以做坏事。
拜占庭将军问题的可解性
(1)叛徒数大于或等于1/3,拜占庭问题不可解
如果有三位将军,一位副官是叛徒,如图1所示。当司令发进攻命令时,副官2可能告诉副官1,他收到的是“撤退”的命令。这时副官1收到一个“进攻”的命令,一个“撤退”的命令,而无所适从。
如果司令是叛徒,如图2所示。他告诉副官1“进攻”,告诉副官2“撤退”。当副官2告诉副官1,他收到“撤退”命令时,副官1由于收到了司令“进攻”的命令,而无法与副官2保持一致。
正由于上述原因,在三模冗余系统中,如果允许一机有拜占庭故障,即叛徒数等于1/3,因而,拜占庭问题不可解。也就是说,三模冗余对付不了拜占庭故障。三模冗余只能容故障-冻结(fail-frost)那类的故障,就是说,元件故障后,它就冻结在某一个状态不动了。对付这类故障,用三模冗余比较有效。
(2)用口头信息,如果叛徒数少于1/3,拜占庭问题可解
注意,这里说“少于1/3”表明,要对付一个叛徒,至少要用四模冗余。在四模中有一个叛徒,叛徒数是少于1/3的。所谓口头信息,是指它满足三个条件:①传送正确,② 接收者知道是谁发的。③ 沉默(不发信息)可以被检测。拜占庭问题可解是指:所有忠诚的副官遵循同一命令。若司令是忠诚的,则所有忠诚副官遵循其命令。我们可以给出一个多项式复杂性的算法来解这一问题。算法的中心思想很简单,就是司令把命令发给每一副官,各副官又将收到的司令的命令转告给其他副官,递归下去,最后用多数表决。如图3所示。如果司令是忠诚的,他送一个命令v给所有副官。若副官3是叛徒,当他转告给副官2时命令可能变成x。但副官2收到{v, v, x},多数表决以后仍为v,忠诚的副官可达成一致。如果司令是叛徒,如图4所示。他发给副官们的命令可能互不相同,为x, y, z。当副官们互相转告司令发来的信息时,他们会发现,他们收到的都是{x,y,z},因而也取得了一致。
(3)用书写信息,如果至少有2/3的将军是忠诚的,拜占庭问题可解
所谓书写信息,是指带签名的信息,即可认证的信息。它是在口头信息的基础上,增加两个条件:①忠诚司令的签名不能伪造,内容修改可被检测。② 任何人都可以识别司令的签名,叛徒可以伪造叛徒司令的签名。一种已经给出的算法是接收者收到信息后,签上自己的名字后再发给别人。由于书写信息的保密性,可以证明,用书写信息,如果至少有2/3的将军是忠诚的,拜占庭问题可解。
如图5所示。如果司令是叛徒,他送“进攻”命令给副官1,并带有他的签名0,送“撤退”命令给副官2,也带签名0。副官们转送时也带了签名。于是副官1收到{“进攻”:0,“撤退”:0,2},说明司令发给自己的命令是“进攻”,而发给副官2的命令是“撤退”,司令对我们发出了不同的命令。对副官2也同样。
“拜占庭将军问题”并非如传说中那样,源于公元5世纪的东罗马战场,而是产生于1982年一位美国计算机科学家的头脑当中。因此,我们不会使用任何1982年之前的案例来描述这个问题在古老年代的意义,因为再往前追溯,它并未真正、严肃地被提出并加以审视。
在2013年获得计算机科学领域最高奖项图灵奖的31年前,1972年,莱斯利·兰伯特(Leslie Lamport)搬到湾区。此时,他仍然是一个寂寂无闻的美国小伙。他充当Compass(马萨诸塞州计算机合伙人公司)西海岸计划前哨基地的先锋,不幸的是,这个分支机构最终未能落实。在长达5年的时间里,他曾是Compass总部派驻加州的唯一员工。最后,他却收到撤回东海岸的指令。于是,他决定加入斯坦福国际研究院(SRI)。在那段岁月里,SRI有一个项目,要在美国航空航天局建立容错型航电计算机系统。考虑到系统的工作性质,故障是不允许发生的。这段经历孕育了两篇旨在解决一种特殊故障的论文,由兰伯特和SRI同事马歇尔·皮斯(Marshall Pies)及罗伯特·肖斯塔克(Robert Shostak)合作完成。用计算学术语说,普通故障可能会导致信息丢失或进程停止,但系统不会遭到破坏,因为这种普通故障属于一出错就会停下来的故障类型,剩下的备份的、正常的部分照样可以运转,发挥作用。就像战场上的士兵,他们一旦受伤或阵亡就停止战斗,但并不妨碍他人继续作战。
然而一旦发生“拜占庭故障”,就会非常麻烦,因为它们不会停下来,还会继续运转,并且给出错误讯息。就像战争中有人成了叛徒,会继续假传军情,惑乱人心。当时为了解决这个问题,常常使用的技术被称为“三重模块冗余”:也就是说使用三台计算机进行万一出错的备份工作,三台独立的计算机按照少数服从多数的原则“投票”。这样,即使其中一台机器提供了错误结果,其他两台仍然会提供正确答案。但是为了证明这种方法的有效性,必须拿出证据。而在编写证据的过程中,研究人员遇到了一个问题:“错误”计算机可能给其他两台计算机发送互不相同的错误值,而后者却不会知道。这就需要使用第四台计算机来应对这个故障。
兰伯特说:“如果你使用数字签名,就可以用三台机器达成目的,因为如果‘坏了’的计算机向一台计算机发送了带签名的错误值,并向另一台发送了不同的带签名错误值,另外两台计算机就能够交换消息,以检查究竟发生了什么情况,因为两个不同的值都是签名发送的。”兰伯特还听吉姆·格雷谈论过另一个性质大体相同的问题,人们称之为“中国将军问题”。这引起了兰伯特有关司令将军和叛徒将军的联想,于是他将这个问题及其解决方案命名为“拜占庭将军问题”。
“我记得,与我的朋友怀特·迪菲(White Duffy)坐在伯克利的一间咖啡馆里,当时他描述了一个构建数字签名的问题。”兰伯特回忆说,“他说:‘如果能办到的话,会非常有用。’我说:‘这听起来并不很困难。’于是在一张餐巾纸上,我为他勾画出了第一种数字签名算法。虽然当时并不很实用,但目前已经变得切实可行。”只可惜那张餐巾纸已经消逝在时间的流沙中。在后来1982年正式出版的拜占庭将军论文的序言中,他这样写道:
“我一直觉得正是因为通过用一组围坐在圆桌旁的哲学家来表述,Dijkstra(迪克斯塔)的‘哲学家就餐问题’才变得如此让人关注(比如在理论界,它可能比‘读者/作者’问题都引人注目,尽管读者/作者问题可能更具实际意义)。我认为Reaching Agreement in the Presence of Faults(达成共识的缺陷)中所描述的问题十分重要,值得计算机科学家们去关注。‘哲学家就餐问题’使我认识到,把问题以讲故事的形式表达出来更能引起人们的关注。在分布式计算领域有一个被称作‘中国将军问题’的问题。在这个问题中,两个将军必须在进攻还是撤退上达成一致,但是相互只能通过信使传送消息,而且这个信使可能永远都无法到达。我借用了这里的将军的叫法,并把它扩展成一组将军,同时这些将军中有些是叛徒,他们需要达成一致的决定。同时我想给这些将军赋予一个国家,同时不能得罪任何读者。那时候,阿尔巴尼亚还是一个完全封闭的国家,我觉得应该不会有阿尔巴尼亚人看到这篇文章,所以最初的时候这篇论文题目实际是The Albanian Generals Problem(阿尔巴尼亚将军问题)。但是JackGoldberg(杰克·古登博格)后来提醒我,在这个世界上除了阿尔巴尼亚之外还有很多阿尔巴尼亚移民,所以建议我换个名字。于是就想到了这一更合适的叫法——Byzantine generals(拜占庭将军)。”
写这篇论文的最主要目的是将拜占庭将军这个叫法用在这个问题上。基本的算法文章在1980年的论文中就已经出现了。
拜占庭将军问题--区块链技术的源头
如果没有“拜占庭将军问题”,没有它揭示出在人类散兵游勇的状态下,永恒的“共识”困境,那么对于这种困境的反思和探索便无法成为可能,逃离困境到达光明之地也无法成为可能。所以在我们向伟大的“答案”——区块链致以敬意之时,请不要忘记它的源头,不要忘记拜占庭。
区块链技术得以发展建立在容错与少数服从多数的投票的基础上,数据库与密码学等功不可没。但是在容错与少数服从多的的价值观中,这是多么符合人类美好的普世价值观。
区块链技术重新定义了网络中信用的生成方式:在系统中,参与者无需了解其他人的背景资料,也不需要借助第三方机构的担保或保证,区块链技术保障了系统对价值转移的活动进行记录、传输、存储,其最后的结果一定是可信的
拜占庭将军问题延伸到互联网生活中来,其内涵可概括为:在互联网大背景下,当需要与不熟悉的对手方进行价值交换活动时,人们如何才能防止不会被其中的恶意破坏者欺骗、迷惑从而做出错误的决策。进一步将拜占庭将军问题延伸到技术领域中来,其内涵可概括为:在缺少可信任的中央节点和可信任的通道的情况下,分布在网络中的各个节点应如何达成共识。区块链技术解决了闻名已久的拜占庭将军问题——它提供了一种无需信任单个节点、还能创建共识网络的方法。
区块链技术的本质是一种互联网协议。
“区块链”技术最初是由一位化名中本聪的人为比特币(一种数字货币)而设计出的一种特殊的数据库技术,它基于密码学中的椭圆曲线数字签名算法(ECDSA)来实现去中心化的P2P系统设计。但区块链的作用不仅仅局限在比特币上。现在,人们在使用“区块链”这个词时,有的时候是指数据结构,有时是指数据库,有时则是指数据库技术,但无论是哪种含义,都和比特币没有必然的联系。
从数据的角度来看:区块链是一种分布式数据库(或称为分布式共享总账,DistributedShared Ledger),这里的“分布式”不仅体现为数据的分布式存储,也体现为数据的分布式记录(即由系统参与者来集体维护)。简单的说,区块链能实现全球数据信息的分布式记录(可以由系统参与者集体记录,而非由一个中心化的机构集中记录)与分布式存储(可以存储在所有参与记录数据的节点中,而非集中存储于中心化的机构节点中)。
从效果的角度来看:区块链可以生成一套记录时间先后的、不可篡改的、可信任的数据库,这套数据库是去中心化存储且数据安全能够得到有效保证的。
结论:区块链是一种把区块以链的方式组合在一起的数据结构,它适合存储简单的、有先后关系的、能在系统内验证的数据,用密码学保证了数据的不可篡改和不可伪造。它能够使参与者对全网交易记录的事件顺序和当前状态建立共识。
如今的区块链技术概括起来是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术。其实,区块链技术并不是一种单一的、全新的技术,而是多种现有技术(如加密算法、P2P文件传输等)整合的结果,这些技术与数据库巧妙地组合在一起,形成了一种新的数据记录、传递、存储与呈现的方式。简单的说,区块链技术就是一种大家共同参与记录信息、存储信息的技术。过去,人们将数据记录、存储的工作交给中心化的机构来完成,而区块链技术则让系统中的每一个人都可以参与数据的记录、存储。区块链技术在没有中央控制点的分布式对等网络下,使用分布式集体运作的方法,构建了一个P2P的自组织网络。通过复杂的校验机制,区块链数据库能够保持完整性、连续性和一致性,即使部分参与人作假也无法改变区块链的完整性,更无法篡改区块链中的数据。区块链技术涉及的关键点包括:去中心化(Decentralized)、去信任(Trustless)、集体维护(Collectively maintain)、可靠数据库(ReliableDatabase)、时间戳(Time stamp)、非对称加密(AsymmetricCryptography)等。
设想一下,如果现在我们想要在互联网世界中建立一套全球通用的数据库,那么我们会面临三个亟待解决的问题,这三个问题也是设计区块链技术的核心所在:
问题一:如何建立一个严谨的数据库,使得该数据库能够存储下海量的信息,同时又能在没有中心化结构的体系下保证数据库的完整性?
问题二:如何记录并存储下这个严谨的数据库,使得即便参与数据记录的某些节点崩溃,我们仍然能保证整个数据库系统的正常运行与信息完备?
问题三:如何使这个严谨且完整存储下来的数据库变得可信赖,使得我们可以在互联网无实名背景下成功防止诈骗?
针对这三个核心问题,区块链构建了一整套完整的、连贯的数据库技术来达成目的,解决这三个问题的技术也成为了区块链最核心的三大技术。此外,为了保证区块链技术的可进化性与可扩展性,区块链系统设计者还引入了“脚本”的概念来实现数据库的可编程性。我们认为,这四大技术构成了区块链的核心技术。
核心技术1:区块+链
关于如何建立一个严谨数据库的问题,区块链的办法是:将数据库的结构进行创新,把数据分成不同的区块,每个区块通过特定的信息链接到上一区块的后面,前后顺连来呈现一套完整的数据,这也是“区块链”这三个字的来源。
区块(block):在区块链技术中,数据以电子记录的形式被永久储存下来,存放这些电子记录的文件我们就称之为“区块(block)”。区块是按时间顺序一个一个先后生成的,每一个区块记录下它在被创建期间发生的所有价值交换活动,所有区块汇总起来形成一个记录合集。
区块结构(BlockStructure):区块中会记录下区块生成时间段内的交易数据,区块主体实际上就是交易信息的合集。每一种区块链的结构设计可能不完全相同,但大结构上分为块头(header)和块身(body)两部分。块头用于链接到前面的块并且为区块链数据库提供完整性的保证,块身则包含了经过验证的、块创建过程中发生的价值交换的所有记录。
区块结构有两个非常重要的特点:第一,每一个区块上记录的交易是上一个区块形成之后、该区块被创建前发生的所有价值交换活动,这个特点保证了数据库的完整性。第二,在绝大多数情况下,一旦新区块完成后被加入到区块链的最后,则此区块的数据记录就再也不能改变或删除。这个特点保证了数据库的严谨性,即无法被篡改。
顾名思义,区块链就是区块以链的方式组合在一起,以这种方式形成的数据库我们称之为区块链数据库。区块链是系统内所有节点共享的交易数据库,这些节点基于价值交换协议参与到区块链的网络中来。
区块链是如何做到的呢?由于每一个区块的块头都包含了前一个区块的交易信息压缩值,这就使得从创世块(第一个区块)到当前区块连接在一起形成了一条长链。由于如果不知道前一区块的“交易缩影”值,就没有办法生成当前区块,因此每个区块必定按时间顺序跟随在前一个区块之后。这种所有区块包含前一个区块引用的结构让现存的区块集合形成了一条数据长链。“区块+链”的数据存储结构如下图所示。
我们引用《区块链:互联网金融的终局》(肖风)的一段话来总结区块链的基本结构:“人们把一段时间内生成的信息(包括数据或代码)打包成一个区块,盖上时间戳,与上一个区块衔接在一起,每下一个区块的页首都包含了上一个区块的索引数据,然后再在本页中写入新的信息,从而形成新的区块,首尾相连,最终形成了区块链。”这个结构的神奇之处:区块(完整历史)+ 链(完全验证)= 时间戳
“区块+链”的结构为我们提供了一个数据库的完整历史。从第一个区块开始,到最新产生的区块为止,区块链上存储了系统全部的历史数据。
区块链为我们提供了数据库内每一笔数据的查找功能。区块链上的每一条交易数据,都可以通过“区块链”的结构追本溯源,一笔一笔进行验证。
区块+链=时间戳,这是区块链数据库的最大创新点。区块链数据库让全网的记录者在每一个区块中都盖上一个时间戳来记账,表示这个信息是这个时间写入的,形成了一个不可篡改、不可伪造的数据库。我们认为,时间戳是区块链中一项伟大的技术创新,它可以证明什么呢?
核心技术2:分布式结构——开源的、去中心化的协议
我们有了区块+链的数据之后,接下来就要考虑记录和存储的问题了。我们应该让谁来参与数据的记录,又应该把这些盖了时间戳的数据存储在哪里呢?在现如今中心化的体系中,数据都是集中记录并存储于中央电脑上。但是区块链结构设计精妙的地方就在这里,它并不赞同把数据记录并存储在中心化的一台或几台电脑上,而是让每一个参与数据交易的节点都记录并存储下所有的数据。
1.关于如何让所有节点都能参与记录的问题,区块链的办法是:构建一整套协议机制,让全网每一个节点在参与记录的同时也来验证其他节点记录结果的正确性。只有当全网大部分节点(或甚至所有节点)都同时认为这个记录正确时,或者所有参与记录的节点都比对结果一致通过后,记录的真实性才能得到全网认可,记录数据才允许被写入区块中。
2.关于如何存储下“区块链”这套严谨数据库的问题,区块链的办法是:构建一个分布式结构的网络系统,让数据库中的所有数据都实时更新并存放于所有参与记录的网络节点中。这样即使部分节点损坏或被黑客攻击,也不会影响整个数据库的数据记录与信息更新。
区块链根据系统确定的开源的、去中心化的协议,构建了一个分布式的结构体系,让价值交换的信息通过分布式传播发送给全网,通过分布式记账确定信息数据内容,盖上时间戳后生成区块数据,再通过分布式传播发送给各个节点,实现分布式存储。
分布式记账——会计责任的分散化(Distributedaccountability)
从硬件的角度讲,区块链的背后是大量的信息记录储存器(如电脑等)组成的网络,这一网络如何记录发生在网络中的所有价值交换活动呢?区块链设计者没有为专业的会计记录者预留一个特定的位置,而是希望通过自愿原则来建立一套人人都可以参与记录信息的分布式记账体系,从而将会计责任分散化,由整个网络的所有参与者来共同记录。
区块链中每一笔新交易的传播都采用分布式的结构,根据P2P网络层协议,消息由单个节点被直接发送给全网其他所有的节点。
区块链技术让数据库中的所有数据均存储于系统所有的电脑节点中,并实时更新。完全去中心化的结构设置使数据能实时记录,并在每一个参与数据存储的网络节点中更新,这就极大的提高了数据库的安全性。
通过分布式记账、分布式传播、分布式存储这三大“分布”我们可以发现,没有人、没有组织、甚至没有哪个国家能够控制这个系统,系统内的数据存储、交易验证、信息传输过程全部都是去中心化的。在没有中心的情况下,大规模的参与者达成共识,共同构建了区块链数据库。可以说,这是人类历史上第一次构建了一个真正意义上的去中心化体系。甚至可以说,区块链技术构建了一套永生不灭的系统——只要不是网络中的所有参与节点在同一时间集体崩溃,数据库系统就可以一直运转下去。
我们现在已经有了一套严谨的数据库,也有了记录并存储这套数据库的可用协议,那么当我们将这套数据库运用于实际社会时,我们要解决最核心的一个问题(问题三)是:如何使这个严谨且完整存储下来的数据库变得可信赖,使得我们可以在互联网无实名背景下成功防止诈骗?
核心技术3:非对称加密算法
什么是非对称加密?简单来说,它让我们在“加密”和“解密”的过程中分别使用两个密码,两个密码具有非对称的特点:(1)加密时的密码(在区块链中被称为“公钥”)是公开全网可见的,所有人都可以用自己的公钥来加密一段信息(信息的真实性);(2)解密时的密码(在区块链中被称为“私钥”)是只有信息拥有者才知道的,被加密过的信息只有拥有相应私钥的人才能够解密(信息的安全性)。
简单的总结:区块链系统内,所有权验证机制的基础是非对称加密算法。常见的非对称加密算法包括RSA、Elgamal、D-H、ECC(椭圆曲线加密算法)等。在非对称加密算法中,如果一个“密钥对”中的两个密钥满足以下两个条件:1、对信息用其中一个密钥加密后,只有用另一个密钥才能解开;2、其中一个密钥公开后,根据公开的密钥别人也无法算出另一个,那么我们就称这个密钥对为非对称密钥对,公开的密钥称为公钥,不公开的密钥称为私钥。在区块链系统的交易中,非对称密钥的基本使用场景有两种:1、公钥对交易信息加密,私钥对交易信息解密。私钥持有人解密后,可以使用收到的价值。2、私钥对信息签名,公钥验证签名。通过公钥签名验证的信息确认为私钥持有人发出。
我们可以看出,从信任的角度来看,区块链实际上是数学方法解决信任问题的产物。过去,人们解决信任问题可能依靠熟人社会的“老乡”,政党社会的“同志”,传统互联网中的交易平台“支付宝”。而区块链技术中,所有的规则事先都以算法程序的形式表述出来,人们完全不需要知道交易的对手方是“君子”还是“小人”,更不需要求助中心化的第三方机构来进行交易背书,而只需要信任数学算法就可以建立互信。区块链技术的背后,实质上是算法在为人们创造信用,达成共识背书。
核心技术4:脚本
脚本可以理解为一种可编程的智能合约。如果区块链技术只是为了适应某种特定的交易,那脚本的嵌入就没有必要了,系统可以直接定义完成价值交换活动需要满足的条件。然而,在一个去中心化的环境下,所有的协议都需要提前取得共识,那脚本的引入就显得不可或缺了。有了脚本之后,区块链技术就会使系统有机会去处理一些无法预见到的交易模式,保证了这一技术在未来的应用中不会过时,增加了技术的实用性。
一个脚本本质上是众多指令的列表,这些指令记录在每一次的价值交换活动中,价值交换活动的接收者(价值的持有人)如何获得这些价值,以及花费掉自己曾收到的留存价值需要满足哪些附加条件。通常,发送价值到目标地址的脚本,要求价值的持有人提供以下两个条件,才能使用自己之前收到的价值:一个公钥,以及一个签名(证明价值的持有者拥有与上述公钥相对应的私钥)。
脚本的神奇之处在于,它具有可编程性:(1)它可以灵活改变花费掉留存价值的条件,例如脚本系统可能会同时要求两个私钥、或几个私钥、或无需任何私钥等;(2)它可以灵活的在发送价值时附加一些价值再转移的条件,例如脚本系统可以约定这一笔发送出去的价值以后只能用于支付证券的手续费、或支付给政府等。
本文资料主要源于:《区块链:重塑经济与世界》与部分网络整理,《区块链:重塑经济与世界》感谢作者段新星的指导。推荐阅读