网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

数字签名算法(DSA)

更新时间:2026年03月27日   作者:spoto   标签(Tag):

数字签名算法(DSA)是一种联邦信息处理标准,用于管理数字签名。它被用来确保消息、软件或数字文档的合法性与完整性。美国国家标准与技术研究院在1991年8月提出了使用DSA作为数字签名标准的建议。在本文中,我们将讨论数字签名以及数字签名算法的相关内容。

什么是数字签名?

数字签名这是一种验证方法。它并不提供保密的通信方式。如果您希望实现保密性,那么消息和签名都必须使用密钥或公钥加密系统来加密。这种额外的安全层可以融入到基本的数字签名方案中。

假设我们有:

  • 艾丽斯它就是发送消息或发起通信的实体。
  • 鲍勃指的是信息的接收者或接受者。
  • 夏夜它代表了那些试图拦截或篡改通信内容的窃听者或对手。

在公钥密码学中(也被称为…)非对称加密因此,沟通的过程如下:

  • Alice使用Bob的公钥来加密这条消息。
  • 这条加密后的消息已经传到了鲍勃那里。
  • 鲍勃使用自己的私钥来解密爱丽丝发送的消息。

现在,假设Alice向Bob发送消息时,Bob会检查发送者是否真实可靠。为了确保确实是Alice而不是Eve在发送消息,Bob可以要求Alice为消息添加电子签名。因此,我们可以说,电子签名可以证明Alice是真正的发送者。我们将其称为这种类型的签名。数字签名。

数字签名流程模型

数字签名的方法

这两种方法都是实现数字签名的标准方式。

  • Rivest-Shamir-Adleman算法(RSA)
  • 数字签名算法(DSA)

Rivest-Shamir-Adleman算法(RSA)

在……中Rivest-Shamir-Adleman算法在传输过程中,需要被签名的信息首先会被输入到一个哈希函数中。这个哈希函数会生成一个固定长度的加密哈希值。 然后,使用发送方的私钥来加密该哈希值,从而使其成为签名。 下一步是将签名和消息一起发送给指定的接收者。 为了进行验证,在收到消息之后,接收方会先计算出该消息的哈希值。 发送方使用的公钥会被接收方用来解密这个已经被加密过的签名。 如果解密后的签名与接收方生成的哈希码一致,那么就可以认为该签名是有效的。 由于只有发送者能够访问私钥,因此只有他们才能生成有效的签名。

您可以参考下面的RSA相关图表来了解更多信息。

  • M = 消息或明文
  • H = 哈希函数
  • || = 将计划文本与哈希函数(哈希摘要)进行组合。
  • E = 加密算法
  • D = 解密算法
  • PUa = 发送方的公钥
  • PRa= 发送者的私钥
RSA方法

数字签名算法(DSA)

那个数字签名算法(Digital Signature Algorithm)这种方法的原理是使用哈希函数来生成哈希码,这与RSA算法类似。这个哈希码会与一个随机生成的数字k结合,作为签名函数的输入参数。而签名函数则依赖于发送方的私钥。a此外,还有一组被一组通信中的主体所知晓的参数。这组参数可以被视为一个全局的公共密钥。G该签名函数的输出结果由一个包含两个部分的内容组成:s和r。当接收到一条消息时,会为该消息生成一个哈希码。然后,将这个哈希码与签名信息结合,再将其输入到验证函数中。该验证函数依赖于全局公钥以及发送方的公钥。a该值与发送方的私钥配对。如果签名是有效的,那么验证函数的输出将等于签名中的r值。签名函数的设计方式使得只有知道私钥的发送方才能生成有效的签名。

您可以参考下面的DSA相关图表,其中……

  • M = 消息或明文
  • H = 哈希函数
  • || = 将计划文本与哈希函数(哈希摘要)进行组合处理。
  • E = 加密算法
  • D = 解密算法
  • PUa= 发送方的公钥
  • PRa= 发送方的私钥
  • Sig = 签名函数
  • Ver = 验证函数
  • PUG= 全球公共密钥
DSA方法

主要术语/核心概念

  • 用户私钥(PR):这是一个只有用户自己才知道的加密密钥,用于签署消息。它被用来验证用相应的私钥生成的数字签名的有效性。
  • 用户公钥(PU):这是一种公开可用的密钥,可以与他人共享,用于签名验证。不过,私钥必须严格保密,因为它能够证明某个用户是真实的。
  • 签署/捺手印:签名过程涉及使用用户的私钥来生成数字签名。在DSA算法中,这一过程需要對待签名的消息进行数学运算,然后使用给定的私钥来生成该消息的唯一签名。
  • 验证/确认:验证的过程就是判断数字签名是否是通过其对应的公钥被伪造的。在DSA中,这一过程涉及到将两个二进制字符串进行比较:一个表示加密后的数据,另一个则表示原始明文消息。通过数学运算,可以计算出这两个字符串的哈希值,从而判断数字签名是否真实有效。

执行DSA操作的步骤

数字签名算法(DSA)是一种用于生成数字签名的算法。公钥技术即非对称加密技术。它仅用于提供数字签名功能,无法用于加密或密钥交换。

全球公共密钥组件

有三个参数是公开的,可以被一组用户共享。

  • 质数 p其长度介于512到1024位之间,且q能够整除(p-1)。因此,p是一个质数,而2则不属于该质数。L-1<p <2L对于 512 <= L <= 1024 的情况,且 L 是 64 的倍数。也就是说,比特长度在 512 到 1024 之间,以 64 位为间隔进行取值。
  • 接下来,一个 N 位的质数。 q 因此,q是(p-1)的质因子。而2……N-1< q < 2N也就是说,N位的数据的位长。
  • 最后,我们选择 g 满足以下形式:g = h^(p-1)/q mod p,其中 h 是介于 1 和 (p-1) 之间的整数。需要注意的是,g 必须大于 1。因此,g = h^(p-1)/q mod p,这里的 h 是满足 1 < h < (p-1) 的任何整数。(p-1)/qmod p > 1

如果用户拥有这些数字,那么他们就可以选择一种私钥,并生成相应的公钥。

2. 用户私钥

私钥 x 应该被随机或伪随机地选择,而且它必须是一个介于 1 到 (q-1) 之间的整数。也就是说,x 是一个随机或伪随机的整数,且满足 0 < x < q 的条件。

3. 用户公钥

公钥是从私钥计算出来的,其表达式可以表示为:y = gx在模 p 的情况下,给定 x 后,计算 y 的过程其实很简单。但是,如果已知公钥 y,那么要找到使得 y 的以 g 为底的离散对数模 p 的结果,则计算过程会变得非常复杂,甚至难以实现。

4. 签署/签订

如果用户想要生成签名,那么用户需要计算两个数值:r和s。这两个数值与公钥组件(p、q、g)、消息的哈希值H(M)、用户的私钥(x)以及一个整数k有关。这个整数k必须被随机或伪随机地生成,并且对于每个签名来说都是唯一的。k是一个随机或伪随机生成的整数,且满足0 < k < q的条件。

签署/捺手印

5. 验证/确认

设 M、r′ 和 s′ 分别表示 M、r 和 s 的接收版本。

验证过程是通过使用下面所给出的公式来完成的:

  • w = (s′)-1mod q
  • u1 = [H(M′)w] % q
  • u2 = (r′)w mod q
  • v = [(gu1 yu2) % p] % q

接收方需要生成一个数值 v,该数值是公钥组件、发送方的公钥以及消息的哈希码的函数。如果这个值与签名中的 r 值相匹配,那么该签名就被认为是有效的。

测试:v = r′

验证/确认

最后,该算法会测试变量r的值。而r的值并不依赖于消息或明文内容,因为r实际上是k与上述三个全局公钥组件的函数结果。当k的乘法逆元(模q运算的结果)被输入到该函数时,该函数还会接收消息的哈希码以及用户的私钥作为输入。该函数的结构使得接收者可以利用接收到的消息、签名、用户的公钥以及全局公钥来恢复出r的值。

已知,获取离散对数存在困难。因此,攻击者无法从 r 中恢复出 k,也无法从 s 中恢复出 x。在签名生成过程中,唯一需要大量计算的任务就是进行指数运算 g。kmod p。因为这个值并不依赖于要被签名的消息,所以可以在事先计算出来。实际上,用户可以预先计算出一些用于签名所需的r值。除此之外,唯一需要处理的任务就是确定乘法逆元k的值。-1 .

DSA提供的服务

  • 消息认证:一种安全的数字签名方案,就像传统的安全签名一样(即那种不容易被复制的签名),能够确保消息的完整性。认证(也被称为数据来源认证)。Bob可以很容易地确认,该明文/消息确实是由Alice发送的,因为验证时使用的是Alice的公钥。而Alice的公钥无法验证Eve的私钥所生成的签名。因此,数字签名能够实现对消息的认证。
  • 消息完整性:当我们签署整个消息时,该消息的完整性会得到保持。因为如果消息发生更改,我们就会得到不同的签名结果。如今,数字签名方法在签名和验证过程中都使用了一种称为“哈希函数”的特殊功能,以此来确保消息的完整性。
  • 非否认性:如果Alice签署了一条消息,但后来又声称自己并没有发送这条消息,那么Bob能否提供证据证明她确实发送了这条消息呢?例如,如果Alice指示银行(即Bob)将10,000美元转入Ted的账户,而之后又否认自己发送了这条消息,那么Bob就需要保留那条已签署的消息,并利用Alice的公钥来重新生成这条消息。 不过,如果Alice更换了她的密钥,或者对文件的真实性提出质疑的话,那么这种方法可能就不起作用了。 解决方案需要借助一个可信的第三方来协助实现。 这个可信方可以验证消息的真实性,从而防止Alice拒绝这些消息。 在这种设置中,Alice会将她的消息以及自己的身份信息、Bob的身份信息以及她的签名一起发送给可信的中心。 该中心会验证消息的真实性,并在生成自己的签名之前为消息添加时间戳。 这一过程确保了:如果Alice后来否认自己发送了该消息,那么中心仍然可以提供证据来平息这场纠纷。 此外,还可以添加加密功能以确保信息的安全性。 因此,通过一个可信的第三方,就可以实现非否认性。

DSA技术的优势

  • 认证:在某个阶段,数字签名能够确保发送者的身份得到可靠的验证。接收者可以确信,该消息或文档确实是由指定的签署人所签名的。
  • 诚信数字签名能够确保内容的完整性。如果在签名之后,内容被篡改了,那么这种签名就失去了验证内容的有效性。
  • 非否认性:数字签名可以带来以下好处:不可否认性这意味着,发件人无法否认自己事后所创建的文件。这在法律和合同相关问题中尤为重要。
  • 效率:数字签名使得电子签名的流程变得更加简单和自动化,从而实现了快速在线交易。这样一来,就无需进行人工验证、处理繁琐的文书工作以及亲自签署文件了。
  • 安全性:只要整个数字签名过程能够妥善安排,那么数字签名就具有安全性。使用加密的公钥密码技术来实现这一点是可行的。哈希算法防止未经授权的第三方伪造数字签名。
  • 全球认可度:这种机制(数字签名)被广泛认可,它用于记录与法律或合同相关事务的完成情况。这种机制在全球范围内都得到了广泛应用。
  • 时间戳标记:时间戳机制还可以为签名提供另一层安全保障,从而有效防止重放攻击以及确保签名的时效性。
  • 成本节约:数字签名过程消除了传输文件的必要,从而节省了与打印、快递服务以及人工处理相关的成本。

DSA的缺点

  • 关键管理的复杂性:用于签署文件的加密密钥必须得到妥善管理。生成、存储和分发这些密钥的过程相当复杂,需要仔细处理相关事宜,同时还需要谨慎处理密钥的撤销问题。
  • 基础设施依赖性:数字签名建立在安全且可靠的基础设施之上。公钥基础设施(PKI)此外,还有证书颁发机构的问题。如果相关的基础设施受到破坏或无法使用,那么对数字签名的信任也会受到影响。
  • 法律与监管方面的挑战:虽然越来越多的人开始使用数字签名,但在某些地区,仍然存在法律和监管方面的挑战。因此,遵守当地的法律法规是非常重要的。
  • 初始设置成本:一个完善的数字签名系统的实施,需要包括获取数字证书所需的费用、采取必要的安全措施,以及对用户进行相关培训等步骤。
  • 离线可用性:如果无法访问签名人的私钥,那么数字签名的有效性就会受到质疑。而硬件令牌和加密元件的引入则进一步增加了实现的复杂性。
  • 用户教育:必须加强对用户关于如何正确使用数字签名以及其重要性的教育。同时,采取有效的措施来应对各种漏洞,并了解可能出现的威胁,这些都是实现成功实施的关键。
  • 遭受关键数据泄露的风险:私钥必须得到妥善保管,避免被未经授权的人员访问。因为一旦私钥被泄露,就有可能被用于伪造签名。

结论

数字签名算法(DSA)是一种可靠且标准化的数字签名机制,它能够确保消息的真实性、完整性以及不可抵赖性。虽然DSA具有许多优点,比如提升安全性、易于在全球范围内应用以及降低成本,但它也存在一些缺点,比如密钥管理较为复杂,且依赖于特定的基础设施。了解并克服这些限制因素,对于有效利用DSA来保护数字通信至关重要。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料