本文首发公众号区块链之美!致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。
摘要:本篇文章介绍Schnorr的两大应用场景:从交互式零知识身份证明到非交互零知识身份证明、数字签名实现基本原理、菲亚特-沙米尔(Fiat-Shamir)变换。
1.Schnorr简介
Schnorr机制由德国数学家和密码学家Claus-Peter Schnorr在1991年提出,是一种基于离散对数难题的知识证明机制。Schnorr本质上是一种零知识的技术,即Prover声称知道一个密钥x的值,通过使用Schnorr加密技术,可以在不揭露x的值情况下向Verifier证明对x的知情权。即可用于证明你有一个私钥。
Schnorr中涉及到的技术有哈希函数的性质、椭圆曲线的离线对数难题。椭圆曲线的离线对数难题:已知椭圆曲线E和点G,随机选择一个整数d,容易计算Q=d*G,但是给定的Q和G计算d就非常困难。
2.技术价值
- 证明你知道一个私钥,可用于身份识别中。
- 数字签名。
本文中所有出现的变量,小写字母表示标量,即一个数字,在这里指整数;大写字母表示离散对数问题中的参数,例如:椭圆曲线中的点。
3.交互式Schnorr
原始的Schnorr机制是一个交互式的机制。在讲述其机制时,不得不请出密码学中的两个虚拟大人物Alice和Bob。注意,这两位可不是省油的灯,都存在作弊的可能性!
3.1场景描述
允许在任何拥有相同生成元(指在离散对数问题中)的协议参与者双方,证明某一方拥有私钥sk(sk=a)而不需要直接交换它。其中双方都拥有的生成元设为G,Prover(Alice)拥有私钥sk。Verifier(Bob)已经从Prover处取得Alice的公钥PK。简而言之,Bob要在不知道a的情况下验证Alice知道它。