密码学 - DSA 算法



数字签名算法是一种用于数字签名的联邦信息处理标准。美国国家标准与技术研究院于 1991 年提出了该算法,并在 1994 年得到了普遍标准化。它基于模指数运算和离散对数问题,这两种问题都很难通过暴力破解来解决。

DSA 算法提供了以下三个优点:

  • 消息认证 - 通过提供正确的密钥组合,您可以确认发送方的身份。
  • 完整性验证 - 由于修改消息将阻止捆绑包完全加密,因此无法篡改它。
  • 不可否认性 - 如果验证了签名者,则发送方无法争辩他们从未发送过该消息。
DSA Algorithm

上图显示了 DSA 算法的完整过程。在这里,您将使用两个不同的函数:验证函数和签名函数。除了传统的数字签名验证方法之外,上图还显示了加密和解密步骤。它们具有不同的参数,您将在下一节中了解这些参数。

DSA 如何工作?

DSA 代表数字签名算法。这种密码算法用于保护消息免遭更改、创建数字签名以及验证数字通信的发送方。

DSA 的功能需要两个密钥:发送方的私钥和接收方的公钥。

  • 发送方使用其私钥对消息进行签名,并将签名与消息一起发送。
  • 然后,通信的接收方使用发送方的公钥来确认签名是真实的,并且消息没有被篡改。
  • 验证过程使用特殊技术,使接收方能够验证签名,而无需访问发送方的私钥。

算法

查看上图中整个过程是如何工作的,从生成密钥对到最终确认签名:

密钥生成

密钥创建过程包括两个步骤:每个用户的密钥和参数生成:

参数生成

  • 用户必须首先选择一个密码散列函数 (H) 和一个以位表示的输出长度,表示为 |H|。当输出长度大于 |H| 时,使用模数长度 N。
  • 然后,找到一个密钥长度 L,它是 64 的倍数,并且根据原始 DSS 长度在 512 和 1024 之间。但是,NIST 建议长度为 2048 或 3072 以确保密钥的长期安全。
  • 根据 FIPS 186-4,L 和 N 的值必须从以下范围中选择:(1024, 60)、(2048, 224)、(2048, 256) 或 (3072, 256)。此外,在选择模数长度 N 时,用户应确保它小于密钥长度 (N
  • 之后,用户可以选择一个 N 位的素数 (q) 和另一个 L 位的素数 (p),使得 p-1 是 q 的倍数。接下来,从列表 (2.....p-2) 中选择一个整数 h。
  • 获得 p 和 q 值后,确定 - g = h^(p-1)/q*mod(p)。如果收到 g = 1,请尝试 h 的另一个数字并再次计算 g,排除 1。p、q 和 g 是多个系统用户共享的算法参数。

每个用户的密钥

从列表 (1.......q-1) 中选择一个整数 x(私钥)后,计算公钥 y=g^(x)*mod(p)。此过程计算特定用户的密钥参数。

签名生成

  • 为了获得我们的哈希摘要 (h),它将原始消息 (M) 通过哈希函数 (H#) 运行。
  • 签名函数接收摘要作为输入,并使用两个变量 s 和 r 作为输出。
  • 除了摘要之外,您还使用一个随机整数 k,使得 0 < k < q。
  • 使用公式 r = (gk mod p) mod q 来查找 r 的值。
  • 您可以使用公式 s = [K - 1(h + x. R)mod q] 来查找 s 的值。
  • 然后将签名打包为 {r,s}。
  • 接收方在所有内容 ({M, r, s}) 中接收消息和签名捆绑包。

密钥分发

在分发密钥时,签名者必须将公钥 (y) 发送给接收方,而无需使用秘密方法,发布私钥 (x),并将其保密。

签名

对消息 m 进行签名的正确方法如下:

  • 首先,从 (1.......q-1) 中选择一个整数 k,并且
  • 计算:r = g^(k)*mod(p)*mod(q)。尝试 k 的另一个随机值并再次计算所有 r 值,排除 0。如果得到 r = 0。
  • 计算:s=(k^(-1)*(H(m)+xr))*mod(q)。请尝试 k 的另一个随机值并再次计算所有 s 值,排除 0。如果得到 s = 0。
  • 两个关键元素定义了签名 (r,s)。此外,使用关键元素 k 和 r 创建新消息。但是,使用模指数方法计算 r 是一个非常昂贵的过程,必须在收到消息之前完成。

签名验证

  • 要创建摘要 h,您使用类似的哈希函数 (H#)。

  • 然后,验证函数接收此摘要,并需要其他变量作为输入。
  • 计算 w 的值,使其满足 s*w mod q 等于 1。
  • 使用公式 u1 = h*w mod q 确定 u1 的值。
  • 使用公式 u2 = r*w mod q 计算 u2 的值。
  • 计算最终验证组件 v 的公式为 v = [((gu1. yu2) mod p) mod q]。
  • 将 v 的值与在数据包中接收到的 r 的值进行比较。
  • 如果两者匹配,则签名验证过程完成。

算法如何验证发送方身份?

通过确认通信的数字签名,算法验证发送方身份。

  • 数字签名使用发送方独有的私钥创建。
  • 然后,接收方使用发送方的公钥验证数字签名。
  • 如果数字签名有效,则接收方将知道发送方发送了消息。

DSA 的优点

请参阅以下 DSA 的优点:

  • 与其他签名验证技术相比,DSA 在安全性和稳定性方面非常强大。
  • 与 RSA 算法等其他算法相比,密钥创建速度要快得多。
  • DSA 使用更少的存储空间来运行其完整周期。
  • NIST 发布它时,它是免专利权的,允许其在全球范围内免费使用。

DSA 的缺点

DSA 是最广泛使用的数字签名创建算法之一。但是,DSA 可能有一些缺点。

  • 由于密钥长度有限,DSA 的使用在特定应用中受到限制。
  • 严格的密钥管理需要有限的密钥长度。
  • 由于 DSA 不支持证书,因此它只能在有限的应用中使用。
  • DSA 不是增量签名算法,因此在生成签名后无法修改或更改。
  • 与一些更成熟的算法不同,DSA 是一种相对较新的算法,尚未经过大量研究或测试。
  • DSA 签名的长度往往大于其他算法生成的签名,这会降低传输和存储的效率。
广告

© . All rights reserved.