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)。
    人都是爱攀比的,甲和乙都想知道谁的资产更多。但是两人又都不想让对方知道自己的具体资产有多少。
    本来嘛,可以找一个彼此都信任的人作为中间人,两人把各自的资产告诉这个中间人,然后中间人告诉他们谁资产多谁资产少。
    但是这两人也不想让其他任何人知道自己的资产。应该怎么办呢?
    
    解决办法
    这个问题其实就是著名的百万富翁问题,由清华大学姚期智教授提出,姚期智是我国目前唯一一位图灵奖获得者。至于这个问题的解法,我们下回分解~
    黎明前最黑暗,成功前最绝望!
  • 相关阅读:
    图像检索(image retrieval)- 11
    图像检索(image retrieval)- 10相关
    Mock.js简易教程,脱离后端独立开发,实现增删改查功能
    Azure Monitor (3) 对虚拟机磁盘设置自定义监控
    Azure Monitor (1) 概述
    Azure SQL Managed Instance (2) 备份SQL MI
    Azure Virtual Network (17) Private Link演示
    Azure Virtual Network (16) Private Link
    Azure Virtual Network (15) Service Endpoint演示
    Azure Virtual Network (14) Service Endpoint服务终结点
  • 原文地址:https://www.cnblogs.com/Kidezyq/p/15048262.html
Copyright © 2011-2022 走看看