DSA的中文全称是“数字签名算法”,是美国政府1994年颁布的签名标准,它的应用范围远比RSA和ElGamal签名方案广泛。和其他签名算法一样,它包括密钥参数生成、签名和验证等几部分。下面对该算法进行简述。
DSA的密钥参数生成分为以下几个步骤:
上述过程中,{ p , q , α , β }为公钥, d 为私钥。
Bob签名的计算过程如下:
这里SHA( x )表示进行SHA-1计算,输出的是160比特的摘要信息;上述过程中,{ r , s }即为签名信息。
Alice验证的计算过程如下:
上述计算过程看似复杂,实际上和ElGamal加密算法的数学过程相似,其核心是Bob所选择的随机整数 t ,以及Alice所计算的辅助变量 u 1 和 u 2 满足如下关系:
t = u 1 + du 2 mod q 。
所以验证函数就是验证 v 和 r 是否模相等。当ElGamal签名方案选取参数 p 的长度为1024时,其签名长度也为1024。通过一些对算法的改变,DSA算法的签名长度减少为320比特。出于算法安全性的考虑,除 p 为1024比特长度外,还可以选择 p 长度为2048或3072,分别给出长度为448或512比特的签名。