从简单记账聊到VRF随机可验证函数,记账真的需要如此复杂吗?

记账是我们日常生活所必不可少的一项基本工作,同时记账工作也隐藏在我们生活的方方面面,小到交一笔水电费,大到企业中复杂的会计核算,传统的记账方式离不开人和中心化的计算模式。

随着计算机网络社会的发展,我们每天更是会和无数的陌生对象建立记账交互。各类中介帮助我们很好的完成了这些工作,当然,我们理所当然的为中介提供的信用服务支付了一部分费用。

这类中介包括银行,支付宝、微信等第三方支付渠道。

中心化的记账体系给我们提供了极大的便利,我们只需要不断的为这些中介付出我们的时间,购买他们的服务,使用他们的产品,并且信任他们就可以了。

当我们和银行进行交互时,我们付出了廉价的资金,使得银行通过我们存储的资金获得利息差。

当我们和支付宝打交道时,我们不知不觉将所有的理财需求,购物需求,生活需求都交给了他,并且交付给了他们珍贵的数据记录。

我们并不能否认这种第三方的金融中介为我们提供了极大的便利,但是,对于完全的信任、更低的费用、更大的匿名性的需求,一直存在于我们的底层诉求当中。

区块链账本技术

区块链就是在这种背景下孕育而生,它提供了一种新型的记账方式,通过计算机科学,博弈论,密码学等学科的交互,产生了一种去信任的、匿名性的、低费用的交互模式。

区别于传统的中心化的记账手段,区块链账本技术实现了节点共同参与记账,记账结果可追溯,匿名性等功能,从而为我们提供了一种新的解决方案。

举个简单的例子:

传统的记账模式,例如,你去银行存取钱,你将银行卡交给银行柜员,告诉他要取100元,银行柜员接过你的银行卡,刷入你的银行卡信息进入你的账户系统,执行取款操作,你的账户中就会减去100元,同时付出100元现金。

在这个过程中,银行柜员凭借着银行中心化的信用完成整个记账。银行柜员因为帮你执行了记账工作,得到他的报酬,并以工资的形式进行激励。

分布式记账是一种去中心化的记账方式,同样,我们可以理解你进入一个没有信用背书的银行,但是这个银行有很多柜员,你告诉这个银行系统需要取100元现金。

系统会按照一定的共识算法来指定某一个柜员进行记账,柜员在记账完成后,将结果信息告诉其他的所有柜员,最后进行同步确认,那么每一个柜员都会有一个账本记录了你的支取信息,而那个实际记账的人获取记账酬劳,并用系统内的通证对他进行奖励。

当柜员的数量足够多时,篡改账本信息将变得不可能,因此,在这个过程中就完成了分布式记账。

那么当信用环节得以解决,很多由于中介环节产生的费用都可以通过区块链的技术降低,甚至消除。

共识算法

在区块链的记账体系中,共识算法是核心部分,是参与该区块链体系中的所有节点都默认遵守的一种规则。是区块链系统中的节点之所以能够共同维护整套账本体系的基础。

也就是说,共识算法决定了谁来进行记账,谁来进行验证,从而保证记账结果的准确性。

我们可以从上文的例子中看到,当我们将取钱的指令输入到系统中后,系统会按照一定的共识算法来决定谁来进行记账,那么问题来了,我们该如何设定这个算法,从而保证所有节点的公平,进而使得更多人愿意来进行参与记账呢?

截至到目前为止,应用的比较成功的共识算法无外乎是POW、POS、DPOS、PBFT等。但是不管哪种算法,都并不是那么完美。

各类共识算法

POW(Proof of Work)——工作量证明

这是一种根据你的工作量来决定,你是否能够被选中进行记账的共识算法。而所谓的争夺记账权,便是在这种共识算法中产生的概念。

简单来说,当我们向系统提交取钱指令后,系统会为区块链节点出一道十分难解的密码题,只有解出题目后方能获得记账权。

再举个简单的例子,在一个500人的微信群里,有一部分人会不定时的发布附带解题条件的任务红包,剩余的人会不停的抢红包,那么决定谁能抢到红包的条件便会有,网速是否足够快,设备性能是否足够好,答题速度是否足够快,当然,不停的开着手机还会浪费电。

对于正常的POW共识算法的区块链网络,由此而产生的便是计算机算力的比拼,资源的比拼,从经济学的角度来看,只要回报足够,这种共识算法是十分合理的。

但是,POW算法的最大的弊病便是效率极度低下和无尽的资源浪费,无法满足大规模商用的基本要求。

POS(Proof of Stake)——股权证明

这是一种根据你的持币数量来决定,你是否能持续获取记账资格的共识算法。当你的持币量越多,成为记账节点的概率就越大。

这种共识算法还类似于财产储存在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。

在股权证明POS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有300个币,总共持有了10天,那么,此时你的币龄就为3000。

POS算法下,当我们的币龄越大,成功抢到记账权的概率就越大,而每当成功记账后,币龄将进行清空。

这种共识算法虽然避免了资源的浪费,但是PoS也存在明显的缺陷:

当持币量越多,持有时间越长,币龄就越高,越容易挖到区块获取记账权并得到激励,持币少的人基本上没有机会,这样整个系统中,权重大的节点,话语权将极大,埋下中心化的隐患。

DPOS(Delegated Proof of Stake)——委任权益证明

这是一种类似人民代表大会的制度,起初由所有节点投票,选出一定量的超级节点,所有的超级节点权力相同,并且轮流行使记账义务。

如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。

这种共识算法极度的中心化,特别容易滋生腐败行为,因而背离了区块链的去中心化的思想。

那么,是否存在某种共识算法,即能保证效率与公平,又能实现去中心化的效果呢?

我们可以看到,无论是何种共识算法,他们所要解决的问题都是选出一部分或一个节点来参与共识或者进行记账工作,从上面的三个共识算法中可以看到,这个过程会因设备配置情况、持币情况、信用状况等不同因素所影响。

某些算法耗费的过度的资源,某些算法牺牲了一定的公平,某些算法容易滋生腐败。

经过本人的研究和发现,VRF(可验证随机函数)和区块链共识算法的结合能很好的解决部分问题。

VRF(可验证随机函数)

这里我不用过于专业和严谨的方式来表述,只希望大家能看懂和理解。

简单来说,VRF是一种帮助进行随机选择节点的工具,他是一个黑箱子,当你往黑箱子里仍进去一个东西,黑箱子会随机生成一个结果。

例如你往黑箱子里扔进去一个苹果和一个香蕉,他会生成一杯草莓牛奶。

当你往里扔进去不同的东西,结果一定是不同的。而扔进去相同的东西,结果一定是相同的。

当然,结果会均匀的分布在一定的范围内,也就说,输出的结果在一定的值域范围内。

那么,我们如何将VRF运用到共识验证当中去呢?

VRF的方式是,让各个节点轮流往这个函数(黑箱子)里填入输入值,输入值为自己的私钥和一个全网都知道的随机数。如果输出结果大于某个数(阙值)。那么就由该节点进行记账。

例如,参与竞争记账的节点有100个,并假设本轮为第5轮记账,那么每个节点轮流开始往VRF函数中输入自己的私钥和一个全网都知道的随机数,比如是5。并规定,谁先由VRF产生的随机数大于10,就是本轮的区块打包者。

假如前20个节点的输出值都小于10,而第21个节点的输出值是11,那么21号节点便获取了本轮的区块打包权利。

说到这里,便会出现一个新的问题,只有第21节点知道自己生成的随机数是大与10的,其他节点并不知道。那又该如何验证并让所有节点都认可这个随机结果呢?

这就是VRF区别于一般的随机预言机的地方,它多了一个非交互的零知识证明。

当第21节点确认自己是区块打包者时,他除了需要将随机结果进行广播外,还需要广播一个零知识证明,以便表明这个随机数的确是由他生成的。

说到这里,可能大家又有点迷糊了。我们再来理清下思路。

正常情况下,如果我们需要验证结果是否是某个人生成的,是需要将他的私钥和公开的随机数填入VRF中,通过输出结果来判定的。

但是,显而易见,私钥是不可以告诉别人的。那么,我们来看看,零知识证明是如何帮助节点进行验证的?

零知识证明

零知识证明(Zero—Knowledge Proof),是指证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。

在上面的例子中,第21号节点即是证明者,而其他节点就是验证者,而零知识证明便可以使得第21号节点在不透露自己私钥的情况下,使得其他节点相信他就是指定随机数的生成者。

首先,我们举个简单的例子来说一下什么是零知识证明。

北京市的某区块链小学六年级一班的正在上体育课,可是足球被锁在了教室里,小明在锁教室门后,没有将钥匙带在身上,而是将钥匙放在了一个谁都不知道的地方。

同学们喊着说谁把钥匙拿出来,打开教室的门。

小明如何不拿出钥匙便能证明钥匙在他那呢?(假设钥匙有且只有一把)

很简单,小明只需要去将足球取出来就可以了。

而这个足球便是零知识证明。

由于在VRF(可验证随机函数)中,每个节点起初会根据要求生成一组包含公钥和私钥的密钥对,他们有着一一对应的关系,私钥是VRF输入值的一部分。

公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥能加密可以用相应的私钥解密的数据。

每个人都可以获取你的公钥,并对任何数据进行加密。但是加密后的数据只有私钥可以进行解密。

那么,我们可以试想一种零知识证明的场景,上文中的第21号节点,即区块打包者,将一组数据公布出来,让所有人可见,而自己不看。随后,通过自己的公钥对该数据进行加密,从而得到一个新的数据。

此时,第21号节点只需要用自己的私钥进行解密,并将加密内容再次公布,即可让所有验证者信服了。

当然,真实的场景或许并不是如此,这里只是为了让大家更清楚的理解。

总的来说,VRF(可验证随机函数)一共包含了四个部分:

1、节点首先生成一组包含公钥和私钥的秘钥对。

2、通过私钥生成随机数,并确定区块打包节点。

3、区块打包节点广播随机数和零知识证明。

4、其他节点进行验证。

VRF的目的是要生成一个真正随机而且无法被预测的值,从而尽可能的保证安全性。简单的随机抽取很容易受到女巫攻击,攻击者可以廉价找大量的傀儡机来增加自己抽中的概率。

这么看来,VRF对于共识算法的优化的确有很大的帮助,并在安全性、能耗、效率方面着实取得了一定的突破。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容