美文网首页
哈希锁:用技术让彼此信任

哈希锁:用技术让彼此信任

作者: 倾了个城 | 来源:发表于2018-06-07 19:18 被阅读195次


平时我们买东西,一手交钱,一手交货,钱货两清。拿了东西不给钱,店家是要揪住领子问你要债的。

可在网上就不同了,如果是顾客先把钱打到商家账号上,商家不发货怎么办?或者,商家先发货,顾客收到不认账怎么办?

这时候支付宝跳出来说,我给你们做担保,顾客先把钱打到我这里,商家发货,顾客收到之后确认付款,钱再打到商家手里,双方都觉得很公平,暗暗点头。

所以支付宝解决的最大问题是什么?是信任。

然而,在区块链世界里,规则又发生了变化。

在超市买东西,钱和物都是在线下交付;在淘宝买东西,钱在线上付,货在线下收;而在区块链世界里,用比特币换以太坊,比特币的转账和以太坊的接收全都是线上交付。

这时,信任从何而来?

有人说,再造一个区块链世界的支付宝,我们相信第三方就好了。

其实现有的区块链交易所扮演的不就是这样一个第三方么?

但是,数字资产的买卖过程中,交易所是要收手续费的。更重要的是,万一交易所的信用出现了危机怎么办呢?相信别人总是没有相信自己来得实在。

哈希锁就很好地解决了这个问题,它不依赖于任何一个中介或个人的信用背书,完全靠代码和规则就能实现数字资产间的交易。

它的设计非常得简单,一旦了解,你会学会从另一个思路思考和解决问题。

那么它具体是如何实现的呢?

首先我们假设A和B两个人,A有X资产,B有Y资产。X和Y链上都能运行哈希锁的智能合约。

现在,A要用1个X跟B换10个Y。但谁都不愿意把自己的币转给对方,为什么呢?因为有风险嘛。

哈希锁站出来,给了AB两人各自一个密码盒,让AB分别把1个X和10个Y放进自己的密码盒里,然后给两个密码盒都加上一把锁。注意,这两个密码盒被上的锁是一模一样的,也就是说,可以用相同的钥匙打开。所以,为了防止拿着钥匙的人取走对方盒子里的币后,又取走自己盒子里的币,做出规定,谁都只能打开对方的密码盒,无法打开自己的密码盒。

密码盒锁好了,可是钥匙去哪里找呢?答案是,在AB两人中任何一个人的脑子里。什么意思呢?

哈希锁在给两个密码盒加锁之前,就是向A和B中任意一个人要了一个随机数。我们假设它是向A要的,A给了它一个666。哈希锁把这个666塞进一个黑箱子里,在里面经过一系列加工,出来这样一串字符:

c7e616822  f366fb1b5e  0756af498 cc11d2c  0862edcb  32ca65882 f622ff  39de1b。

这串字符跟666比起来,早已面目全非了。它就好像往绞肉机里放进去一块肉,得到一堆肉末一样,你是很难透过这堆肉末想象出原先那块肉的形状的。

这个过程就叫做给随机数666做哈希,这串字符就是666的哈希值。

现在就用这串字符封住AB两人的密码盒,规定如果你手里的随机数的哈希值和这串字符一致,密码盒就可以被打开,你就可以取走里面的币。

哈希的神奇之处就在于,如果塞相同的数字进去,得出的字符串总是一致的,多个空格、多个点都不行。所以如果你有随机数666,密码盒轻松破解;但如果你没有,想利用小聪明试出来,那就是痴人说梦了。

还记得A和B谁有这个随机数吗?对,是A,那他就可以用这个666去开B的密码箱了。而他的开箱过程是公开的,所以当B看到A用666成功解锁了自己的密码箱后,走到A的密码箱前,也用666成功解锁。至此,两人各取所需,交易完成。

想一想,这个流程有没有什么漏洞呢?

我们来看一个实际的例子,你就能发现问题所在了。

如果哈希锁真如上方的流程运行,那么如果一家大型公司如果想搞垮另一家小公司就变得轻而易举。怎么做呢?假设大公司手握价值10亿的A币,小公司只有价值1亿的B币。大公司只要跟小公司换价值1个亿的币,等两家公司都把币锁进密码箱后,就是不用随机数去开密码箱,直到B公司资金链断裂。B公司无能为力,只能看着一个亿放在那里,干着急直跺脚。

说到这你可能已经意识到了交易的漏洞了。那就是没有给交易规定时间,一旦存在恶意交易者,资金就会无限期被锁死。

发明哈希锁的人不会想不到这一点,他们把哈希锁加上一个时间的维度。规定在这个时间内如果没有用随机数打开密码箱,则原币奉还密码箱的主人。所以哈希锁的全名叫做哈希时间锁。

具体这个时间限制怎么加也是有学问的。

如果两人的时间限制一样,A若存心使诈,只需要在心里默数秒数,直到最后时刻再用随机数打开B的密码箱,此时B刚刚看到A的随机数,来不及跑到A的密码箱处,A的密码箱就到期自动解锁了。那么A得到了B的币,且同时拿回了自己的币,空手套白狼,对B太不公平了。

你肯定已经想到了解决方案,那就是给A的密码箱多锁一会,这样等A拿走了B密码箱里的币后,B有足够多的时间去拿A密码箱里的币。那多出来的这部分时间又应该是多少呢?

我们来假设一个场景解释这个问题。首先要知道,解锁密码箱也是需要一定时间的,假设AB锁定密码箱的瞬间,A就去开B的密码箱,用了10分钟。当然,正常情况下不可能这么慢的,计算机的操作往往都是在光电火石之间,这节课拿10分钟来举例,目的是帮助你理解。同样的,对于B来说,解锁的时间也应该是10分钟,因为两人的锁是一模一样的嘛,解锁的过程也是一模一样的,解锁的时间也就是一模一样的了。

所以,如果我们设定B的密码箱的锁定时间是10分钟,那A的密码箱锁定时间就应该是20分钟,也就是B的密码箱锁定时间的2倍。

至此为止,交易双方还有没有风险呢?如果有,是谁的风险呢?

当然有,而且是两个人都有风险。你可以先猜一猜谁的风险更大呢?谁的风险是可避免的,谁的风险是不可避免的?

我给这两种风险起了个名字,一个叫过失风险,一个叫系统风险。

什么意思呢?我举个例子你就明白了。科学家做实验的时候总会提到误差,误差分过失误差和系统误差两种。

过失误差就比如做实验的人到时间忘记关设备了,或者手一滑火开大了,这些人为因素造成的误差,一般小心一点就可以避免了。

不过对于系统误差,就是实验设计得不合理、流程优化得不到位所导致的了。这个是根本上的问题,很难改变,除非对实验重新设计。

那如果你理解了过失误差和系统误差在实验室的意思,就能类比着理解过失风险和系统风险对于哈希时间锁的意义了。

先看过失风险存在在哪里,以及谁会有过失风险的可能性。

通过刚才对于时间的限定,我们可以按照A的开锁时间分成三种情况:

1、A在0-10分钟内开锁

2、A在10-20分钟内开锁

3、A在20分钟之后开锁

先来说第一种和第三种情况。

第一种情况,A在0-10分钟内开锁,B看到A开锁的密码后再用0-10分钟开锁,所以B的开锁时间不会超过20分钟。两人交易顺利完成。

第三种情况,A在20分钟后解锁。此时两人密码箱都已到期,谁也拿不走对方的币,交易作废。

以上两种情况很简单,剩下的第二种情况就是问题之所在了。A在10-20分钟内开锁。此时B的密码箱已经超时失效,虽然密码箱还在,但里面已经空空如也,币被如数返还给B了。可是,A用随机数开锁的过程B可以看得真真切切的。我们假设A输入的这个随机数是正确的,那么B完全可以趁A的密码箱没到时间之前用这个随机数打开A的密码箱,大大方方地取走里面的币。

一旦这种情况发生,A没有拿到自己应得的币,却失去了用来交换的币,是赔了夫人又折兵。

但这又能怪谁呢?A没有在规定时间,也就是10分钟内取走应得的币,所以如果出现这种情况A只能认倒霉。当然,真实世界里,这种情况是不会发生的。因为所有的操作都是计算机来完成的,系统会检测出是否已经超过10分钟,一旦超过,哪怕憋着随机数不填,静静等到20分钟后,作废这笔交易,计算机也不会让这种过失风险存在。

有了计算机的帮忙,A可以躲避掉过失风险。那另一个即便“小心一点”也逃不掉的系统风险,又会花落谁家呢?

这次就要轮到B倒霉了。

你可以先想想,什么情况下,B有可能蒙受损失呢?

再看一下这个锁全名——哈希时间锁。哈希锁加上了时间维度,解决了永久锁定的问题,但也正是这个时间差,让一些投机倒把的人有机可乘。

我们都知道,数字资产界没有一成不变的汇率。一个X这一秒可以换10个Y,下一秒有可能换20个或者5个Y,涨跌很难预判。

这里就留给A一个漏洞钻。在A可交易的这10分钟里,A静观其变。我们假设A打开密码箱只需要1分钟的时间,那A就一直等到第9分钟的时候,看此时币价波动如何。

如果9分钟时1个X能换20个Y,也就是说,X升值了,那A就不去开B的密码箱,让这笔交易作废。

那你会说,即便这样,A也没有赚到什么钱啊。

非也。刚才只是假设了升值的情况,如果X贬值了,也就是说9分钟时1个X只能换5个Y了呢?这时候A就会立马去开B的密码箱,拿走10个Y,赚得钵满盆满。

真实情况下,XY的价值不会有这么大的变化,但即便是很微小的变化,A设定好程序,反复交易,一定是会获利的。

所以就会出现一个问题,谁都不愿意扮演B的角色,都希望自己是先手。这样就会扭曲市场,长期来看确实是个隐患。

然而至今仍没有一个人或者一项技术来解决这个问题,所以哈希时间锁还有很长的路要走。区块链有更长的路要走。

如果你不了解其中的这些微小的差别,就很容易稀里糊涂地成为交易中弱势的一方而不自知,钱哗啦啦地流入别人的口袋。

如果你不懂哈希锁的工作原理、解决的具体问题,就有可能被人抛出的几个高深概念唬住;或者你不了解哈希锁的缺陷在哪,听人说哈希锁有系统风险,就有可能因此错过一个绝佳的投资机会。不论哪一种,都源于对哈希锁的了解不够深。当你彻底了解之后再做决断,你才会离成功更进一步。

相关文章

  • 哈希锁:用技术让彼此信任

    平时我们买东西,一手交钱,一手交货,钱货两清。拿了东西不给钱,店家是要揪住领子问你要债的。 可在网上就不同了,如果...

  • 用技术建立信任

    我们人类作为地球上的智慧生物,已经主宰了这个星球的命运,人是有感情的动物,喜怒哀乐,喜形于色,而又喜怒无常。...

  • 世界上最简单的无锁哈希表

    无锁哈希表(Lock-Free Hash Table )可以提高多线程下的性能表现,但是因为实现一个无锁哈希表本身...

  • 信任,很重要

    彼此间的信任非常重要,不管是哪种友谊。 朋友的信任可以让你相互理解、信任,没有戒心、没有需要去浪费时间彼此做彼此间...

  • YYMemoryCache分析

    YYMemoryCache主要分析 LRU算法+双链表+哈希表 线程操作锁 cache内部变量内存释放队列 哈希表...

  • 简:信任让彼此在当下

    图文/喜悦 依然是很深的信任 没有信任 或者信任不够 无法在“同一个地方” 无法进入当下 无法有很坦诚的交流 信任...

  • 哈希时间锁(HTLC)

    概述 哈希时间锁(Hashed TimeLock Contract HTLC)是指可以创建特定智能合约的功能,该合...

  • 彼此信任,彼此成就

    今天,有个朋友说他的一个顾客泡买脚​​‎͏  片,从来是都货到付款他,们未见曾过​ 面就,是朋友圈的友好。 可是他...

  • 哈希出行,不止是区块链版滴滴

    简介:哈希出行是一款基于区块链技术的出行平台,通过用区块链记录人的出行数据,让每个人真正拥有其数据主权。用户在日常...

  • 哈希出行,不止是区块链版滴滴 - 草稿

    简介:哈希出行是一款基于区块链技术的出行平台,通过用区块链记录人的出行数据,让每个人真正拥有其数据主权。用户在日常...

网友评论

      本文标题:哈希锁:用技术让彼此信任

      本文链接:https://www.haomeiwen.com/subject/kahnsftx.html