zoukankan      html  css  js  c++  java
  • 白话区块链之零知识证明1

    定义

    百度百科中关于零知识证明的定义如下:零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。
    它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。
    证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,零知识证明在密码学中非常有用。
    如果能够将零知识证明用于验证,将可以有效解决许多问题。
    简单来讲就是存在知识拥有者(证明者)和验证者双方,知识拥有者在不告知验证者知识具体内容的情况下,通过相关协议或者算法,证明知识拥有者的确掌握该知识。
    

    举几个栗子

    谁是红绿色盲

    问题
    假设一个房间里有100个人,只有小明不是红绿色盲,其余人都是红绿色盲。
    房间里有一个盒子,盒子里有两个球,分别是绿色和红色。
    现在小明如何在不告知其他人(验证者)具体哪一个球是红色的情况下,证明自己不是红绿色盲?
    
    解决办法
    验证者可以将两个球分别放在左右手,然后在小明看不到的地方去做如下操作:交换左右手上的球或者不做任何操作。
    操作之后再问小明手上的两个球是否做了位置交换,如果小明每次都能答对,则能验证小明不是红绿色盲。
    

    解数读

    问题
    假设现在有一个9X9的数独方格,小明和小王在比赛看谁先做出来。这两个人互相较劲,谁都觉得自己比对方厉害。
    结果小明3分钟就做出来了,但是又不想把答案告诉小王。小王呢,也不相信小明已经做出来了,想当这个验证者来证明小明确实已经做出来了。小明应该怎么办呢?
    
    解决办法
    小明可以将他写的答案填在卡片上,然后倒扣在方格中。
    每次小王说要检查某一行,或者某一列的数据,小明就将小王指定的这一行或者这一列的这9张卡片装到一个袋子里,然后摇均匀。
    小王只需要检查每次这个袋子里出现的数字是不是都是1到9即可(检查完毕之后,小明需要再次将他填写的答案倒扣回去还原方格)。
    如果每次检查都是1到9,那么就证明了小明的确是做出来了这道数独题。
    

    百万富翁问题

    问题
    假设现在有两个富翁甲和乙,这两个人都有上亿资产,假设分别为i和j(其中 0<i<10, 0<j<10)。
    人都是爱攀比的,甲和乙都想知道谁的资产更多。但是两人又都不想让对方知道自己的具体资产有多少。
    本来嘛,可以找一个彼此都信任的人作为中间人,两人把各自的资产告诉这个中间人,然后中间人告诉他们谁资产多谁资产少。
    但是这两人也不想让其他任何人知道自己的资产。应该怎么办呢?
    
    解决办法
    这个问题其实就是著名的百万富翁问题,由清华大学姚期智教授提出,姚期智是我国目前唯一一位图灵奖获得者。至于这个问题的解法,我们下回分解~
    黎明前最黑暗,成功前最绝望!
  • 相关阅读:
    springMVC 是单例还是的多例的?
    js如何获取数字占的位数~
    java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
    数据挖掘基本概念讲解
    js如何判断小数点后有几位
    volotile关键字的内存可见性及重排序
    上传文件multipart form-data boundary 说明
    vi 调到第一行和最后一行
    linux监控平台搭建-磁盘
    Guava Cache 参数配置说明
  • 原文地址:https://www.cnblogs.com/Kidezyq/p/15048262.html
Copyright © 2011-2022 走看看