区块链解读-零知识证明

xiaoxiao2021-02-28  76

解读区块链,零知识证明(-zero-knowledge proof) 前段时间听到有朋友谈到,区块链发展技术中的零知识证明,这几天翻阅了下资料看了下这一块内容,看完之后深深觉得自己数学知识和数学理解能力的不足,大概写下零知识证明的理论,也不深究,其实具体很多东西也没看懂,就当是一个知识名词的解释。 “零知识证明”-zero-knowledge proof,是由S.Goldwasser、S.Micali及C.Rackoff在20世纪1985年提出的。和笔者年纪一样大,笔者还去网上找了这个论文试图看下,结果论文找到了,实在没能力去理解。有兴趣的朋友可以搜索下图是论文截图:

所谓零知识证明,大致理解证明者能够在不向验证者提供任何有用信息的情况下,让验证者相信你。看这一句解释你会觉得就是忽悠。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。看了这一句解释,很多人会理解这不就是游戏里的一个比划一个猜的游戏吗。https://baike.baidu.com/item/零知识证明/8804311?fr=aladdin(百度对这个概念的解释说明,笔者也是看了这个概念开始理解) 在S.Goldwasser等人提出的零知识证明中,证明者和验证者之间必须进行交互,这样的零知识证明被称为“交互零知识证明”。80年代末,Blum等人进一步提出了“非交互零知识证明”的概念,用一个短随机串代替交互过程并实现了零知识证明。非交互零知识证明的一个重要应用场合是需要执行大量密码协议的大型网络。到这里,零知识证明是一种密码学知识而不是游戏。在零知识证明过程中,如果提出验证的一方可以通过不泄漏自己任何加密信息的情况下,向来验证的一方证明自己,那这样对匿名隐私保护将更彻底,可以有效解决很多问题。这就是这个证明的意思所在。 零知识认证需要满足三个属性: 1.假如语句为true,诚实验证者遵守协议,那么将由诚实的证明着就确信这个true。 2.假如语句为false,那么不排除这个有概率的欺骗者可以说服诚实的验证者是true。 3.假如语句为true,证明者的目的就是要验证者证明并让验证者相信自己,同时证明过程不向验证者泄漏相关证明消息和内容。 这个三个属性其实也理解的比较抽象,明确点来解释就是这个证明是不确定的,他是一种概率证明,因为存在小概率事件,会存在欺骗者骗过证明者,那么既然这样这个证明存在有什么意义呢?这就又是理论和实际应用的关系了,在实际应用过程中通过一种计算模型来把这个小概率事件降低,确切的说是降低到可以忽略的值。最常见的就是图灵机的计算模型。 零知识证明一般的过程: 假设有两方人,甲方是证明者,乙方是验证者。他们在一个工作环境内有相同的一组函数和一组数值。证明开始: 1.甲方先发送满足条件的随机值给乙方,这个称为承诺。 2.乙方发送满足条件的随机值给甲方,这个称为挑战。 3.甲方执行一个不让乙方知道的计算,并把计算结果给乙方,这个称为响应。 4.乙方对响应进行验证,验证失败就退出,验证成功回到1,然后继续顺序执行n次。 如果每一次乙方验证都是成功的,那么乙方就相信了和甲方之间的共识。在整个过程中没有透露任何相关秘密信息。 这个过程看了其实理解也还是模糊的。 那么怎么现实实现下理解这个过程呢,举个现实世界的例子,结合七夕节,“保护私房钱”: 男方有一笔私房钱放在一个保险柜里,女方想让男方交出来,但是男方不想让女方知道保险柜密码,那么怎么在不让女方知道保险柜密码的同时取出私房钱。于是两边约定,男方到保险柜前去取钱,女方必须远离他10米,然后女方说取,男方用密码打开保险柜,取出钱来,女方不知道密码但是还是拿到了保险柜里的男方的私房钱,但是也有可能男方偷偷的是从自己钱包拿出来的而不是保险柜里的钱,于是这个过程反复,女方不停提出数额,男方一次次用密码打开取钱,关闭保险柜的动作,那么女方也就相信了这些钱都是保险柜里取出来的私房钱,男方确实有保险柜的密码,使用这个保险柜来藏钱。 还有一种百度百科上应用举例: 1)A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。这时有2个方法: ①A把钥匙出示给B,B用这把钥匙打开该房间的锁,从而证明A拥有该房间的正确的钥匙。 ②B确定该房间内有某一物体,A用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给B,从而证明自己确实拥有该房间的钥匙。 后面的②方法属于零知识证明。好处在于在整个证明的过程中,B始终不能看到钥匙的样子,从而避免了钥匙的泄露。 2)A拥有B的公钥,A没有见过B,而B见过A的照片,偶然一天2人见面了,B认出了A,但A不能确定面前的人是否是B,这时B要向A证明自己是B,也有2个方法。 ①B把自己的私钥给A,A用这个私钥对某个数据加密,然后用B的公钥解密,如果正确,则证明对方确实是B。 ②A给出一个随机值,B用自己的私钥对其加密,然后把加密后的数据交给A,A用B的公钥解密,如果能够得到原来的随机值,则证明对方是B。 后面的方法属于零知识证明。 3)有一个缺口环形的长廊[1] ,出口和入口距离非常近(在目距之内),但走廊中间某处有一道只能用钥匙打开的门,A要向B证明自己拥有该门的钥匙。采用零知识证明,则B看着A从入口进入走廊,然后又从出口走出走廊,这时B没有得到任何关于这个钥匙的信息,但是完全可以证明A拥有钥匙。 https://baike.baidu.com/item/零知识证明/8804311?fr=aladdin 说了不少那么零知识证明的优点: 1.在使用零知识证明的时候,不降低安全性。 2.零知识证明工作高效,计算过程量小,双方交换信息少。 简单归纳,既安全、又有良好的隐私、又减少计算量。

那么区块链中,ZCASH数字货币就是使用零知识证明,在整个交易过程中,完全匿名。他不同于比特币的交易,他同样也有UTXO,但是这个是完全封闭, 在ZCASH交易过程中,不同比特币,在A转账给B的时候,他会当B的面UTXO会作废,但是ZCASH中,A转账给B,新建一个UTXO,原先的会发送到一个作废列表,但是这个列表记录的是之前的序号或者代号,证明之前的UTXO失效。在这个过程中B是看不到A之前的信息,但是确实交易还是发生了,同样道理,矿工也看不到之前的A的交易信息,只是能确定之前的交易序号或者代号存在于作废列表了。有兴趣对这个更深入了解可以查看:http://www.sohu.com/?strategyid=00005

笔者初学区块链,很多东西也是慢慢摸索,之所以写下这些基本概念一方面作为自己学习的整理,另一方面也希望更多交流学习的机会。如有兴趣可以直接关注公众号或者加笔者微信。

转载请注明原文地址: https://www.6miu.com/read-35891.html

最新回复(0)