什么是DSA 算法?
DSA(Digital Signature Algorithm,数字签名算法,用作数字签名标准的一部分),它是另一种公开密钥算法,它不能用作加密,只用作数字签名。DSA使用公开密钥,为接受者验证数据的完整性和数据发送者的身份。它也可用于由第三方去确定签名和所签数据的真实性。DSA算法的安全性基于解离散对数的困难性,这类签字标准具有较大的兼容性和适用性,成为网络安全体系的基本构件之一。
数字签名的组成
数字签名s由以下几个部分组成:
- 秘密数字(可以作为私钥x)x
- 哈希值H(m)
- 随机数字(可以作为公钥y)k
S=f(x,H(m),k)
数字签名和传统的支票签名有一定的相似之处,对比如下:
支票签名 | 数字签名 |
---|---|
签署者独一无二的风格 | 签署者独有的秘密数字x |
支票不同,签名不同 | 消息m的哈希值H(m) |
随机性 | 签署者独有的随机数字k |
为了在不安全环境下将x、k传递给验证者,需要使用幂模运算(单向性)来优化传递过程。
采用数字签名,能完成这些功能:
(1)确认信息是由签名者发送的;
(2)确认信息自签名后到收到为止,未被修改过;
(3)签名者无法否认信息是由自己发送的。
与公钥加密不同,数字签名是用私钥加密,公钥解密,那么每个人都能识别他的身份。
DSA算法的步骤
1. 密钥生成
- 首先选择一个素数q,这被称为素数除数。
- 再选择另一个素数p,使p-1 mod q = 0。
- 选择一个整数g。
- x是我们的私钥,它是一个随机的整数,使得0 < x < q。
- y是我们的公钥,您可以把它计算成y=gx mod p。
- 私钥包是{p,q,g,x}。
- 公钥包是{p,q,g,y}。
2.签名生成
- 它将原始信息(M)通过哈希函数(H#),得到我们的哈希摘要(h)。
- 它将摘要作为输入传给一个签名函数,其目的是给出两个变量作为输出,即s和r。
- 除了摘要外,您还需要使用一个随机的整数k,使0 < k < q。
- 为了计算r的值,使用公式r=(gk mod p)mod q。
- 要计算s的值,使用公式s = [K-1(h+x . R)mod q]。
- 然后它会将签名打包为{r,s}。
-
信息和签名的整个捆绑{M,r,s}被发送到接收方。
3. 签名验证
- 使用相同的哈希函数(H#)来生成摘要 h。
- 然后把这个摘要传递给验证函数,它也需要其他的变量作为参数。
- 计算w的值,以便:s*w mod q = 1
- 从公式中计算出u1的值,u1=h*w mod q
- 从公式中计算u2的值,u2 = r*w mod q
- 最后的验证组件v,计算为v = [((gu1 . yu2) mod p) mod q]。
- 它将v的值与束中收到的r的值进行比较。
- 如果匹配,签名验证就完成了。
DSA算法好处
- 信息验证。你可以使用正确的密钥组合来验证发件人的来源。
- 完整性验证:您不能篡改信息,因为它将阻止捆绑的信息被完全解密。
- 不可抵赖性:如果验证了签名,发件人就不能声称他们从未发送过该信息。
(学生进行学习交流使用,非盈利非商用)