密码学 | 第4章 4.3 Elgamal 数字签名与DSA
Chapter 4 Digital Signatures
4.3 Elgamal Digital Signatures and DSA
在 4.2 一节我们可以看到,我们从 RSA 加密方案转变到 RSA 签名方案,整体上还是比较自然的。但是对于基于离散对数问题的比如 Elgamal 加密方案来说就没那么好转了。
在1985年,推出了一个 Elgamal 版本的电子签名方案,1991 年提出了 **Digital Signature Algorithm (DSA) ** ,并于1994年规范为 **Digital Signature Standard (DSS)**。在这一节,我们先从好理解的 Elgamal 方案开始介绍,随后再解释 DSA 是如何工作的。
Samantha,或者某个可信的第三方,选择一个大素数 ,和一个模 下的原根 。然后 Samantha 再选择一个秘密签名指数 并计算
那么 就组成了 Samantha 的公开验证密钥。
假设现在 Samantha 想要签属文档 ,其中 。她先选择一个数 ,满足 ,然后计算两个值
注意到 是在模 下进行计算的,不是模 ,那么 Samantha 关于文档 的电子签名就是 。
Victor 在验证签名的时候只需要通过计算 是否与
相等即可。
整个流程方案如表 4.2 所示
那么为什么验证可以通过呢,我们来看一下,
所以如果签名 合法,则能通过验证。
注意到我们之前对 的计算是在模 下的,其作为 的指数,我们又知道 ,所以对于表达式 ,我们可以用任意与 在模 下同余的数去替换它。
如果 Eve 知道如何解决离散对数问题,那么他就可以解决 从而获取 Samantha 的签名密钥,继而就可以伪造 Samantha 的签名了。然而,并不清楚这是否是伪造签名的唯一方法。对于 Eve 来说,给到 ,他需要找到 满足
这个式子是一个比较奇怪的问题,因为变量
注 4.6 使用表面上安全的数字签名方案(如Elgamal)有许多微妙之处。参见 练习4.7和4.8 了解一些可能出错的例子。
例 4.7 Samantha 选择素数
然后再用随机值
Samantha 公开签名
然后计算
两者相同,验证通过。
一个 Elgamal 的签名
DSA 一个比较重要的点就是其通过在
Samantha 或者某可信的第三方,选择两个素数
然后选择一个具有阶
接着选一个秘密签名密钥
那么
假设现在 Samantha 想要签属文档
注意到式
Victor 在验证的时候首先计算
然后验证 是否与
整体流程如表 4.3 所示
DSA 签名方案看起来好像有点复杂,但是正确性验证还是挺简单的。我们看到验签部分
因此
例 4.8 我们用小一点的数字再来回顾一下 DSA 的整个流程。
Samantha 使用公开参数
然后 Samantha 使用随机元素
Samantha 公开关于文档
Victor 验证签名时计算
然后计算
然后
签名验证通过。
Elgamal 数字签名方案 和 DSA 其实都可以使用离散对数问题更难解决的其他群结构,例如使用椭圆曲线群,于是我们引出 **Elliptic Curve Digital Signature Algorithm (ECDSA)**,具体细节我们将在 6.4.3 一节进行介绍。