读心术:从零知识证明中提取「知识」——探索零知识证明系列(三)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

本文已更新至Githubhttps://github.com/sec-bit/learning-zkp/blob/master/zkp-intro/3/zkp-pok.md

导言:有些理论非常有趣,零知识证明便是其中之一,摸索了许久,想写点什么,与大家一起讨论。本文是『探索零知识证明』系列的第三篇。全文约 7,000 字,少量数学公式。

And what, Socrates, is the food of the soul? Surely, I said, knowledge is the food of the soul.
苏格拉底,什么是灵魂的食物?我说过,当然是知识。
—— 柏拉图

「零知识」vs. 「可靠性」

我们在许多介绍零知识证明的文章中都能看到这样三个性质:

  • Completeness —— 完备性
  • Soundness —— 可靠性
  • Zero-Knowledge —— 零知识

但是少有文章深入解释这个特性背后的深意和洞见。

在『系列(二)理解「模拟」』一文中,我们介绍了「模拟器」这个概念。许多介绍文章避而不谈「模拟」,但「模拟」可以说是安全协议中核心的核心,因为它是定义「安全性」的重要武器。

通常,我们定义安全会采用这样一种方式,首先列出一些安全事件,然后说明:如果一个系统安全,那么列出来的安全事件都不会发生。

Rather than giving a list of the events that are not allowed to occur,it (the definition of zero-knowledge proof) gives a maximalist simulation condition.
— Boaz Barak

借用密码学家 Boaz Barak 的话,翻译一下,「零知识证明」并不是通过给出一个不允许发生的事件列表来定义,而是直接给出了一个最极致的「模拟条件」。

所谓「模拟条件」是指,通过「模拟」方法来实现一个「理想世界」,使之与「现实世界」不可区分;而由于在理想世界中不存在知识,所以可以推导出结论:现实世界满足「零知识」。

我们继续分析下一个交互系统(安全协议)的三个性质:「完备性」、「可靠性」与「零知识」。

可靠性(Soundness):Alice 在没有知识的情况下不能通过 Bob 的验证。

完备性(Completeness):Alice在有知识的情况下可以通过 Bob 的验证。

零知识(Zero-knowledge):Alice 在交互的过程中不会泄露关于知识的任何信息。

我们可以看出来「可靠性」和「完备性」有一种「对称性」。可靠性保证了恶意的 Alice 一定失败,而完备性保证了诚实的 Alice 一定成功。

「完备性」比较容易证明,只要 Alice 诚实,Bob 也诚实,那么皆大欢喜。这好比,写好一段代码,喂了一个测试用例,跑完通过收工。

我们来想想「可靠性」应该如何定义?这个可靠性的逆否命题是:(在现实世界中)如果 Alice 能通过 Bob 的验证,那么 Alice 一定有知识。或者说:Alice 知道那……个「秘密」!

下面的问题是如何证明 Alice 知道一个「秘密」?

这好像也很难,对不对?假如我们需要证明一台机器知道一个「秘密」,最简单的办法就是我们在机器的硬盘里,或者内存中找到这个「秘密」,但是这样暴露了秘密。如果这台机器是黑盒子呢?或者是 Alice 呢?我们没有读心术,猜不到她心里的那个秘密。

如何定义「To Know」?

「零知识」保证了 验证者 Bob 没有(计算)能力来把和「知识」有关的信息「抽取」出来。不能抽取的「知识」不代表不存在。「可靠性」保证了知识的「存在性」。

只有「知识」在存在的前提下,保证「零知识」才有意义

本文将探讨「可靠性」和「To Know」。

为了进一步分析「知识」,接下来首先介绍一个非常简洁,用途广泛的零知识证明系统 —— Schnorr 协议。这个协议代表了一大类的安全协议,所谓的 Σ-协议,而且 Schnorr 协议扩展也是 零知识数据交换协议 zkPoD [1] 的核心技术之一。

简洁的 Schnorr 协议

Alice 拥有一个秘密数字,a,我们可以把这个数字想象成「私钥」,然后把它「映射」到椭圆曲线群上的一个点 a*G,简写为 aG。这个点我们把它当做「公钥」。

  • sk = a
  • PK = aG

请注意「映射」这个词,我们这里先简要介绍「同态」这个概念。椭圆曲线群有限域之间存在着一种同态映射关系。有限域,我们用 Zq这个符号表示,其中素数 q是指有限域的大小,它是指从 0, 1, 2, …, q-1 这样一个整数集合。而在一条椭圆曲线上,我们通过一个基点,G,可以产生一个「循环群」,标记为 0G, G, 2G, …, (q-1)G,正好是数量为 q个 曲线点的集合。任意两个曲线点正好可以进行一种「特殊的二元运算」,G + G = 2G,2G + 3G = 5G,看起来这个二元运算好像和「加法」类似,满足交换律和结合律。于是我们就用 +这个符号来表示。之所以把这个群称为循环群,因为把群的最后一个元素 (q-1)G,再加上一个 G就回卷到群的第一个元素 0G。

给任意一个有限域上的整数 r,我们就可以在循环群中找到一个对应的点 rG,或者用一个标量乘法来表示 r*G。但是反过来计算是很「困难」的,这是一个「密码学难题」—— 被称为离散对数难题[2]。

也就是说,如果任意给一个椭圆曲线循环群上的点 R,那么到底是有限域中的哪一个整数对应 R,这个计算是很难的,如果有限域足够大,比如说 256bit 这么大,我们姑且可以认为这个反向计算是不可能做到的。

Schnorr 协议充分利用了有限域和循环群之间单向映射,实现了最简单的零知识证明安全协议:Alice 向 Bob 证明她拥有 PK 对应的私钥 sk。

2023海内外零知识证明学习资料汇总(二)(深入理解零知识证明篇) 本文收集了关于零知识证明的一些学习资料(包括科普文章,论文,开源仓库及相关学习网站等),并对这些资源进行了整理分析,希望能对大家有所帮助。书接上篇, 阅读详情

相关推荐

零知识证明与身份识别技术

信息安全 安全协议 零知识证明 身份识别技术 网络安全

Linux Capabilities机制

传统的Linux权限控制粒度太粗,以命令为例,修改用户密码是需要root权限的,但普通用户应该是能够修改自己密码的才对,这时候Linux就使用了、机制,使进程以它的所有者root权限运行这样就可以以root权限修改密码了机制是有安全隐患的,进程只需要修改密码的就可以了,却在整个运行周期内获得了root权限,一旦出现漏洞,很有可能会被利用所以,Linux内核在2.2后引入了机制,细粒度化了权限控制,可以做到按需授权这里是文档:https://man7.org/linux/man-pages/man7/capa

qq_34231329的博客 1034

浅谈零知识证明

浅谈零知识证明 概述 零知识证明(zero knowledge),顾名思义其实就是在充分证明自己是某种权益的合法拥有者的同时,又不能把有关的信息泄露出去,即提供给外界的有用信息为”零”。 零知识起源 “零知识”的概念最早在20世纪80年代初,由麻省理工学院的研究人员Shafi Goldwasser, Silvio Micali和Charles Rackoff所提出,当时这些人正在研究与交互证明系统相关的问题,即一种理论系统,使得甲方(证明者)可以和乙方(验证者)交换信息,并借此说服乙方接受(通过验证)某个数学论述为真。 这个问题并不是单纯的理论思考,而是在真实,具体的应用中会面临到的问题。 我

Linux 权能综述

为了执行权限检查,传统的 UNIX 实现区分两种类型的进程:特权进程(其有效用户 ID 为0,称为超级用户或 root),和非特权用户(其有效 UID 非0)。特权进程绕过所有的内核权限检查,而非特权进程受基于进程的认证信息(通常是:有效 UID,有效 GID,和补充组列表)的完整权限检查的支配。 自内核 2.2 版本开始,Linux 将传统上与超级用户关联的特权分为几个单元,称为 capabil

tq08g2z的专栏 3265

零知识证明:重要构造

为了得到任意 NPNPNP 语言 LLL 的零知识证明系统,我们只需构造一个关于 NPCNPCNPC 语言的零知识证明系统(汉密尔顿图 HCHCHC 的 Blum 协议),然后将语言 LLL 归约到 HCHCHC 上即可。有种常见的归约方法,其中 Cook 归约在安全性证明游戏中最常用。现在我们用的是 Karp-Levin 归约,将两个语言的 instance 以及对应 witness 之间做映射:Blum’s ZKP for HC 的思路是:为了零知识地证明 ∃H,H⊆G\exists H, H \su

weixin_44885334的博客 1551

零知识证明: 抛砖引玉

当今密码学世界中最酷炫的一件事,莫过于那些优美又神秘的专有名词。我们可以自由的以这些术语给朋克乐队或Tumbirs博客起名字,像是“硬核谓词(hard-core predicate)”、“陷门函数(trapdoor function)”,或“不可差分密码分析(impossible differential cryptanalysis)”等热词都受到追捧。 当然,我今天要提到的这个术语热度绝不亚...

跨链技术践行者 1万+

《A Graduate Course in Applied Cryptography》Chapter 19 ID, sign from sigma protocols (4)

原文教材 与 参考资料: Boneh Dan , Shoup Victor . A Graduate Course in Applied Cryptography[J]. 该书项目地址(可以免费获取):http://toc.cryptobook.us/ 博客内容为对该书的学习笔记(包括但不限于翻译、额外绘图、注解、个人理解等),并非原创知识,仅帮助理解,整理思路. 19.6 Identification and Signatures from Sig...

密码小仙女 755

零知识证明原理

零知识证明个性质:完备性、可靠性与零知识

weixin_46897017的博客 1855

知识认证c语言代码,探索零知识证明系列)【转】

导言:有些理论非常有趣,零知识证明便是其中之一,摸索了许久,想写点什么,与大家一起讨论。本文是『探索零知识证明系列的第篇。全文约 7,000 字,少量数学公式。And what, Socrates, is the food of the soul? Surely, I said, knowledge is the food of the soul. 苏格拉底,什么是灵魂的食物?我说过,当然是...

weixin_28889007的博客 427

零知识证明(Zero-Knowledge Proof)原理详解:非交互式证明实现自动验证防止作假

转载自知乎网友“Xiaoyao Qian”文章《一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)》。 这篇文章大部分译自:https://medium.com/qed-it/the-incredible-machine-4d1270d7363a原文的作者是著名的Ghost和Spectre 这两个协议的创始团队的领队Aviv Zohar。原文作者说他的这篇原文又是引...

跨链技术践行者 1万+

一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)

这篇文章大部分译自:https://medium.com/qed-it/the-incredible-machine-4d1270d7363a原文的作者是著名的Ghost和Spectre 这两个协议的创始团队的领队Aviv Zohar。原文作者说他的这篇原文又是引用了以下这两篇学术论文: How to Explain Zero Knowledge Protocols to Your Children (Quisquater et. al.) Cryptographic and Physical Zer.

RenLJ1895的博客 656

神奇的零知识证明,既能保守秘密,又能让别人信你!

某人声称他解决了哥德巴赫猜想,但是怕别人抄袭,不能暴露细节,怎么在不公布细节的情况下让大家相信他确实证明了哥德巴赫猜想?看起来似乎不可能,但是确实有一种方法,叫做“零知识证明”,来解决信任...

码农翻身 1万+

知识圣杯:用Python与zk-SNARKs构筑智能合约的隐私堡垒

我们站在一个新时代的门口。zk-SNARKs不仅仅是一项技术,更是一种哲学和范式的转变。它打破了“透明才能可信”的固有思维,开创了“密码学保证下的隐私且可信”的新纪元。通过本篇博客的探索,我们从交互式的洞穴故事出发,穿越了R1CS和QAP的数学丛林,用。

司徒鸿的博客 1395

【趣味】0基础快速掌握区块链服务关键概念

小明,小红,小刚个好朋友很喜欢玩数独。平日里他们个也会互相出题给对方做。有时候他们会出一些非常变态的数独题互相挑战。他们会挑一个人在纸上画出一个NxN的格子,填上谜面(Constraint),然后交给另外两人去解。 证明 有一天,小明出了一道非常难的数独题,小红花了很长时间尝试去解开这...

214

零基础掌握区块链关键概念

小明,小红,小刚个好朋友很喜欢玩数独。平日里他们个也会互相出题给对方做。有时候他们会出一些非常变态的数独题互相挑战。他们会挑一个人在纸上画出一个NxN的格子,填上谜面(Constraint),然后交给另外两人去解。 证明 有一天,小明出了一道非常难的数独题,小红花了很长时间尝试去解开这个数独,但是怎么都解不出结果。小红觉得小明在耍她,“这题压根就无解!小明你耍我!”,她跑到小明那抱怨。 ...

devopscsdn的博客 1094
上一篇: 从「模拟」理解零知识证明:平行宇宙与时光倒流—— 探索零知识证明系列(二)
下一篇: 亚瑟王的「随机」挑战:从交互到非交互式零知识证明——探索零知识证明系列(四)
安比实验室SECBIT
博客等级 码龄8年 169粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值