你的手里有红绿两个颜色的小球,假如你有一个对颜色不敏感的朋友,你要如何在不告诉他小球具体颜色的情况下,让其相信那是两个不同颜色的球?可以考虑以下的操作。先将两个球分别放在他的两只手中,记住左右手中的颜色;让他将手放背后,随机决定是否在背后交换手中的球,然后将手中的球展示给你并问他自己是否在背后交换了手中的球,这时,你通过对比他手中球的颜色来回答他的问题。零知识在这里显而易见:他在交互结束后除了相信他手中的球颜色不同之外并没有得到任何额外的知识。
又如,有一个环形走廊,出口与入口在一个位置,中间被一道上了锁的门隔断,B声称他有钥匙,那么A如何在不拿到钥匙的情况下知道B真的有钥匙。这时,A只需要看到B从入口进入,并从出口走出,这样A便可以相信B持有门的钥匙这一事实。
针对隐私安全问题,S.Goldwasser、S.Micali以及C.Rackoff早在20世纪80年代初就已经提出了一种解决办法,即“零知识证明”。它指的是证明者(被验证者)能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。证明者不直接告诉你答案,而是采用另一种表达方式来让向你证明,直到你认为对方确实知道答案为止。早期采用的是交互式零知识证明,要求证明者和验证者之间必须进行交互,但是交互容易作弊,因此也存在信用风险。80年代末,有人进一步提出了“非交互式零知识证明“的概念,采用了一个短随机串来代替交互过程。
换句话说,零知识证明解决的问题就是:我如何在你不知道我是否知道这个事情的情况下,知道我确实知道这样的事情。
零知识证明具有以下三个性质:
完备性
在证明者与验证者都是诚实的情况下,证明过程符合规则并且正确,那么这个证明一定是成功的,验证者就能够接受证明者。
合理性
没有人能够冒充证明者,即只有证明者能够做出证明。
零知识性
证明过程执行完之后,验证者只获得了“证明者拥有这个知识”这条信息,而没有获得关于这个知识本身的信息。
零知识证明的零知识性保证了安全性,对于任意的甚至是恶意的验证者,在与证明者的整个交互过程中所看到的消息都仅仅只能用来验证证明者的信息真假,而无法获得其真正内容。但是,零知识证明会引入较大的计算复杂度,导致效率会有一定程度的降低。
零知识证明提供了一种能够向别人证明拥有某个信息,但不需要透露该信息具体内容的一种方法,在密码学中具有广泛的应用。
网友评论