在密码术中, Schnorr签名是由克劳斯·施诺尔(Claus Schnorr)描述的施诺尔签名算法产生的数字签名。它是一种数字签名方案,以其简单性,高效和生成短签名而闻名。这是用于实现“知识证明”的协议之一。在密码学中,知识证明是一种交互式证明,证明者成功地“说服”了证明者知道“ X”。为了使机器知道“ X”是根据计算定义的。如果可以计算出“ X”,则机器会知道“ X”。验证者接受或拒绝证明。签名证明应该说服验证者他们正在与知道与公钥相对应的私钥的用户进行通信。换句话说,应该使验证者确信他们正在与证明者通信而不知道私钥。
施诺尔数字签名将实施零知识证明:
让我们以两个朋友Sachin和Sanchita为例。 Sanchita向全世界宣布,她拥有一个公共密钥,并且可以通过它来接受和接收信息。萨钦认为桑奇塔在撒谎。 Sanchita希望在不显示私钥的情况下证明自己的诚实。这是Schnorr的协议将为我们提供帮助的地方。
Consider the following parameters:
p, q, a, s, v, r, x, y
where,
"p" is any prime number
"q" is factor of p-1
“a” such that a^q = 1 mod p
以上三个变量是全局变量和公共变量,这意味着在给定场景下任何人都可以看到这三个变量。
我们将有两个键。
"s" is the secret key or the private key (0
公钥“ v”将是全局和公共知识,以及p,q和a。但是,只有Sanchita才能知道私钥“ s”。
现在,Sanchita标志希望发送一个加密的消息“ M”。她将按照以下步骤使用Schnorr的签名:-
- 她将首先选择一个随机数“ r”,使得0
- 现在,她将计算一个值X,使得:X = a ^ r mod p。
- 现在,她已经计算了X的值,现在将其与原始消息连接起来(与字符串连接相同)。
因此,她将M和X连接起来得到M || X。她将把该值的散列存储在e中。e = H(M||X) where H() is the hash function
- 她将获得一个值“ y”,使得:
y = (r + s*e) mod q
现在所有计算都结束了,她将把以下内容发送给Sachin。
- 信息“ M”。
- 签名e和y。
除此之外,Sachin还拥有以下公共信息:
- Sanchita的公钥“ v”。
- Sanchita选择“ p”的质数。
- “ q”是Sanchita选择的“ p-1”的因数。
- 由Sanchita选择的“ a”,即a ^ q = 1 mod p。
现在,Sachin将必须计算X’使得:
X’ = a^y * v^e mod p
我们知道v = a ^ -s,让我们用上面的方程式代替它,我们得到:
X’ = a^y * a^-se = a ^ (y-s*e)
现在我们也知道了
y = r + s*e
Which means:
r = y-s*e
让我们用上面的公式替换这个值:
We get: X’ = a^r
正如我们上面已经看到的:
X= a^r
因此从技术上讲:
X = X’
但是Sachin不知道“ X”的值,因为他从未收到过该值。他收到的所有信息如下:消息M,签名(e和y)和公共变量的主机(公共密钥“ v”,p,q和a)。
因此,他将通过以下操作来解决e:
e = H ( M||X’)
请注意,之前我们通过执行以下操作来解决了e:
H(M||X))
因此,按照这种逻辑,如果e的两个值相同,则意味着
X = X’
这遵循零知识证明的所有三个属性:
- 完整性–
Sachin对Sanchita的诚实深信不疑,因为最后X = X’。 - 健全性–
该计划之所以合理,是因为Sanchita只有一种方法可以证明她的诚实,而这只能通过她的私钥来证明。 - 零知识–
Sachin从未了解过Sanchita的私钥。