⑴ 什么是Schnorr签名算法
数字签名(Digital Signature)技术是不对称加密算法的典型应用。数字签名的应用过程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。数字签名技术是在网络系统虚拟环境中确认身份的重要技术,完全可以代替现实过程中的“亲笔签字”,在技术和法律上有保证。在公钥与私钥管理方面,数字签名应用与加密邮件PGP技术正好相反。在数字签名应用中,发送者的公钥可以很方便地得到,但他的私钥则需要严格保密。数字签名包括普通数字签名和特殊数字签名。普通数字签名算法有RSA、ElGmal、Fiat-Shamir、Guillou-Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。
⑵ 列举世界上一些着名的暗号
Autokey密码
置换密码
二字母组代替密码 (by Charles Wheatstone)
多字母替换密码
希尔密码
维吉尼亚密码
替换密码
凯撒密码
ROT13
仿射密码
Atbash密码
换位密码
Scytale
Grille密码
VIC密码 (一种复杂的手工密码,在五十年代早期被至少一名苏联间谍使用过,在当时是十分安全的)
⑶ 数字签名机制 - Schnorr 机制
Schnorr机制是一种基于离散对数难题的知识证明机制,由德国数学家和密码学家Claus-Peter Schnorr在1990年提出。这种知识证明机制具有实现简单,验证速度较快等优点。最开始是为Smart Card这样的资源受限设备而设计。
经过这些年的发展,在原始的Schnorr机制上实现了多种多样的改进与功能,实现了高性能的数字签名,以及包括环签名,门限签名等复杂签名机制。
在这里参考Schnorr的论文与其他的参考资料,分析Schnorr机制的原始机制与实现。并分析现在主流的EdDSA的实现ED25519,以及如何在Schnorr机制上建立的复杂签名机制。
原始的Schnorr机制是一个交互式的机制。允许在任何拥有相同生成元(指在离散对数问题中)的协议参与者双方,证明某一方拥有私钥 而不需要直接交换它。其中双方都拥有的生成元设为 ,证明者拥有私钥 。验证者从证明者处取得 ,其中 , 即公钥。
Original Schnorr Signature的协议流程如下:
因为离散对数问题是困难的,因此验证者不会知道 的值,验证者仅知道由 计算得到的 。但是验证者可以通过以下计算来验证 是正确的:
其中 是生成元,双方都可知, 验证者都知道,所以验证者可以轻松验证化简过的让汪公式。
这个过程是零知识的,因为验证者并不能得到私钥 的值,却可以通过计算与通讯的方式验证证明者确实拥有私钥 。
然而这样交互式的过程,会导致验证者通过"fork"的方式获得私钥 。验证者只需要简单的提供两个不同的随机值 ,并要求证明者计算 ,即可计算出 。这样一来,这个过程便无法公开的验证,因为一旦两个验证者相互串通,交换自己得到的值,便可以推出私钥 。
为了解决这个问题,后大滑春续将会通过对现有的协议进行Fiat–Shamir变换,使用Random oracles改造这个算法来使Schnorr原始的Schnorr Scheme变成可公开验证的非交互式算法。
上述原始Schnorr Scheme中存在的私钥泄露问题使得算法无法在公开的环境下使用。通过将原始的交互式协议转变为非交互式协议可以解决这个问题。
Fiat–Shamir变换是一种利用交互式零知识证明方案创建数字签名的方式。根据Fiat–Shamir变换,我们可以将原始方案中的证明者采用随机数预言机(Random oracle)来代替,利用这样的方式构造数字签名。
随机数预言机,即随机数函数,是一种针对任意输入得到的输出之间是项目独立切均匀分布的函数。理想的随机数预言机并不存在,在实现中,经常采用密码学哈希函数作为随机数预言机。
原本的设计中,Schnorr签滚耐名是一种交互式协议,需要一个实际存在的验证者与参与者,而根据Fiat-Shamir转换,可以将具体的验证者采用随机数预言机来代替。将验证者替换为随机数预言机后,外部的验证者便无法通过交换 来推出私钥 ,原本的 采用随机数预言机产生的随机数来表示。