美文网首页
数字签名机制 - Schnorr 机制

数字签名机制 - Schnorr 机制

作者: 念者今心也 | 来源:发表于2019-07-10 18:47 被阅读0次

Schnorr机制是一种基于离散对数难题的知识证明机制,由德国数学家和密码学家Claus-Peter Schnorr在1990年提出。这种知识证明机制具有实现简单,验证速度较快等优点。最开始是为Smart Card这样的资源受限设备而设计。

经过这些年的发展,在原始的Schnorr机制上实现了多种多样的改进与功能,实现了高性能的数字签名,以及包括环签名,门限签名等复杂签名机制。

在这里参考Schnorr的论文与其他的参考资料,分析Schnorr机制的原始机制与实现。并分析现在主流的EdDSA的实现ED25519,以及如何在Schnorr机制上建立的复杂签名机制。

本文中所有出现的变量,小写字母表示标量,即一个数字,在这里指整数;大写字母表示离散对数问题中的参数,例如:椭圆曲线中的点。

Original Schnorr Scheme

原始的Schnorr机制是一个交互式的机制。允许在任何拥有相同生成元(指在离散对数问题中)的协议参与者双方,证明某一方拥有私钥 x 而不需要直接交换它。其中双方都拥有的生成元设为 G ,证明者拥有私钥 x 。验证者从证明者处取得 Y ,其中 Y = xGY 即公钥。

Original Schnorr Signature的协议流程如下:

  1. 证明者随机选择一个标量 r_1,然后计算出 R = r_1G。并将 R 发送至验证者。
  2. 验证者回应一个随机的标量 r_2
  3. 证明者回应一个标量s,通过公式 s = r_1 + r_2x 计算。

因为离散对数问题是困难的,因此验证者不会知道 x, r_1的值,验证者仅知道由 x, r_1计算得到的 Y, R。但是验证者可以通过以下计算来验证s是正确的:

  • 由于s = r_1 + r_2x,等式两边同时添加相同的生成元可得 sG = r_1G + r_2xG
  • 由于R = r_1GY = xG,可以化简得到 sG = R + r_2Y

其中 G 是生成元,双方都可知,R, Y, s, r_2 验证者都知道,所以验证者可以轻松验证化简过的公式。

这个过程是零知识的,因为验证者并不能得到私钥 x 的值,却可以通过计算与通讯的方式验证证明者确实拥有私钥 x

Problem of Original Schnorr Scheme

然而这样交互式的过程,会导致验证者通过"fork"的方式获得私钥 x。验证者只需要简单的提供两个不同的随机值 r_2^1, r_2^2,并要求证明者计算 s_1 = r_1 + r_2^1x, s_2 = r_1 + r_2^2x,即可计算出x = (s_1 - s_2)/(r_2^1 - r_2^2)。这样一来,这个过程便无法公开的验证,因为一旦两个验证者相互串通,交换自己得到的值,便可以推出私钥x

为了解决这个问题,后续将会通过对现有的协议进行Fiat–Shamir变换,使用Random oracles改造这个算法来使Schnorr原始的Schnorr Scheme变成可公开验证的非交互式算法。

Fiat–Shamir and Random oracles

上述原始Schnorr Scheme中存在的私钥泄露问题使得算法无法在公开的环境下使用。通过将原始的交互式协议转变为非交互式协议可以解决这个问题。

Fiat–Shamir变换是一种利用交互式零知识证明方案创建数字签名的方式。根据Fiat–Shamir变换,我们可以将原始方案中的证明者采用随机数预言机(Random oracle)来代替,利用这样的方式构造数字签名。

随机数预言机,即随机数函数,是一种针对任意输入得到的输出之间是项目独立切均匀分布的函数。理想的随机数预言机并不存在,在实现中,经常采用密码学哈希函数作为随机数预言机。

原本的设计中,Schnorr签名是一种交互式协议,需要一个实际存在的验证者与参与者,而根据Fiat-Shamir转换,可以将具体的验证者采用随机数预言机来代替。将验证者替换为随机数预言机后,外部的验证者便无法通过交换 r_2来推出私钥 x ,原本的 r_2 采用随机数预言机产生的随机数来表示。

相关文章

  • 数字签名机制 - Schnorr 机制

    Schnorr机制是一种基于离散对数难题的知识证明机制,由德国数学家和密码学家Claus-Peter Schnor...

  • Android 数字签名机制

    用途:标识应用程序作者和应用程序之间建立信任关系。数字证书不是权威机构认证,它是用来让应用程序包自我验证,也用来判...

  • 一分钟读书俱乐部(十五):《区块链技术驱动金融》椭圆曲线数字签名

    数字签名在实践中的考量 原文精选:要将算法概念转化为现实中可执行的数字签名机制,我们还需要考虑许多实际问题。例如,...

  • 2018-07-28

    Schnorr 签名 Schnorr 签名由来 Schnorr 源于 Claus-Peter Schnorr 的发...

  • HTTP

    一、HTTP 二、HTTPS 三、HTTP报文 四、HTTPS 的安全通信机制 五、数字签名 六、三次握手&四次挥...

  • IOS的签名机制

    前言 了解IOS的数字签名机制之前我们需要掌握以下几个知识:加密解密(对称加密(DES 3DES AES),非对称...

  • iOS安全--APP代码签名机制

    学习路线(内部分享内容) 加密解密(对称加密、非对称加密、混合加密) 单向散列函数 数字签名 证书 iOS签名机制...

  • 2020-12-30 ECDSA算法原理理解

    研读了两篇文章,《什么是数字签名?区块链共识指的是啥?用物理学理解共识机制》[https://www.youtub...

  • iOS逆向-day9:签名机制

    概述:加密解密单向散列函数数字签名iOS签名机制 和 证书重签名 一、加密解密 1.1、常见的英文单词encryp...

  • 十四 iOS签名机制

    一 加密解密 二 单项散列函数 三 数字签名 四 证书 五 iOS签名机制 一 加密解密 加密是将明文信息改变为难...

网友评论

      本文标题:数字签名机制 - Schnorr 机制

      本文链接:https://www.haomeiwen.com/subject/cydkkctx.html