-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
零知识证明-Intro: 从 Schnorr 协议到NIZK #4
Comments
初见 Schnorr 协议Alice 有一个 secret
Schnorr 协议的流程图如下所示,其是一个交互式的零知识证明协议:
为什么以上式子的验证,可以证明 Alice 确实拥有secret
|
延伸: ECDSA签名攻击攻击方式: 如果,Alice在交互过程中两次使用同一个
|
小心:Fiat-Shamir 变换的安全隐患之前看到过SlowMist有关FS变换的冰心漏洞的探索文章,了解到,现在不少大家常用的zk库在处理FS变换时,使用了weak F·S transform,导致了安全问题。 Schnorr可以在有限域 或者 椭圆曲线上实现,其spec基本相同,接下来的论证以椭圆曲线为例。
NIZK:
可以看出,我们在不知道实际的sk: 报告冰心漏洞的具体论文在这: Implementation Survey Result文章中展示了他们调研的zk库中,有关Weak F·S transform的使用情况,如下: |
NIZK: Common Reference String (CRS)前面一个section提到:
除了前面提到的ROM外,我们还有一个方案那就是公共参考串(Common Reference String)。简单来说,在CRS这个方案中,在Prover 和 Verifier 开始交互前,可信的参与方会生成一个公共字符串CRS,这个字符串可以被所有参与方访问到,Prover在CRS的参与下,生成一个证明,并将其发给Verifier,然后 Verifier可以结合CRS完成对证明的验证。 [顺带一提: 我们现在常用的一些zk的方案,也算是基于CRS演化出来的(e.g. SRS), 比如groth16, plonk。 我们常提到的trusted setup的过程,其中就包含生成CRS的过程。] |
Hidden Bits所谓Hidden Bits就是在上一节中,提到的一串随机产生的比特值。Alice 可以完全知道这串比特的值,并可以有选择的揭露其中某个或某些比特给Bob。
完备性: Alice 如果没有作弊,通过Bob的验证是完全没有问题的。 我们在这里做一个假设,假设:这个HB 并不是一个可信的第三方产生的,那么,它几乎可以帮双边作弊。Alice 如果让HB的值全部为0,那么其毫无疑问可以通过Bob的验证。相反地,如果Bob 可以直接从第三方那拿到HB,那么他可以直接计算出C的值(知道 再次升级!第一个升级是让隐藏比特串变成一个「一致性均匀分布」的随机的隐藏比特串,是一个看起来相当随机的比特串,而不是一个刻意摆放好的哈密尔顿子图。接下来,如何让这样一个相当随机的比特串中能有一个汉密尔顿环路子图的邻接矩阵的比特串呢?答案是:让这个随机比特串足够长,长到足够找到一个随机的汉密尔顿环路为止。 但,这样操作,找到一个随机的汉密尔顿环路的概率实在不高,那么我们可以有一些优化操作,进而提高验证与证明生成的效率:参考secbit:云中“秘密”:构建非交互式零知识证明 。本篇笔记,不打算做过多详细描述。 解放隐藏特性!!接下来,我们要真正解放Hidden Bits 让它转化为Common Reference String (CRS)。我们需要一个密码学工具: 陷门置换(Trapdoor Permutation)。 那么有了这个陷门置换,我们就可以这样升级我们的协议:
这一套就是FLS范式,将HB-NIZK 转化为标准的NIZK。 回归现实在我们的实际应用中,找到一个完全符合理想的Trapdoor Permutation,其实是很难的。所谓的理想化是指,每一个 n-bit 字符串都能唯一变成另一个 n-bit 字符串,并且不会出现「多对一」的映射关系。Alice 需要随机抽样一个 Index,发给 Bob,然后 Bob 要能检查出这个 Index 所对应的 寻找理想的Trapdoor Permutation的路很长,各路密码学家都在努力,2018年,一个由Ran Canetti 与 Amit Lichtenberg 提出的 Certifiable Injective Trapdoor Function 满足路FLS变换的要求。 这些年来,密码学家们发明的 NIZK 方案有很多,但 Hidden Bits 方法是目前已知唯一的办法,(1) 基于「一致性分布」的共享 CRS,(2) 实现任意 NP 语言的 NIZK Proofs(Not Arguments)。 |
提到零知识证明的机制,就不得不提到一个简洁的交互协议Schnorr协议。其本质是一种零知识的技术,i.e. Prover 声明自己知道一个密钥
x
的值,通过使用Schnorr 协议,可以在不向Verifier揭露x
的值的前提下,向Verifier证明自己确实知道x
的值。Schnorr 机制由德国数学家和密码学家 Claus-Peter Schnorr 在 1990 年提出,是一种基于离散对数难题的知识证明机制。
Schnorr 协议涉及到的技术主要有:
E
和其上的一个点G
,随机选择一个整数d
,容易计算Q = d * G
, 但是给定点Q
和G
,很难计算出其对应的d
。The text was updated successfully, but these errors were encountered: