数字签名标准(DSS)

0x01 数字签名标准

数字签名标准 (DSS) 是美国国家安全局开发的一种数字签名算法,作为电子文档的身份验证手段。
DSS 创建后,于 1994 年由美国国家标准与技术研究院出版,此后成为美国政府认证电子文档的标准。

DSS 还被指定为联邦信息处理标准 ( FIPS ) 186 中经过验证的身份验证方式。

目前的几个参考文献标准
“FIPS PUB 186-1:数字签名标准 (DSS),1998-12-15” (PDF)。csrc.nist.gov。于 2013 年 12 月 26日从原始 文件 (PDF)存档。
“FIPS PUB 186-2:数字签名标准 (DSS),2000-01-27” (PDF)。csrc.nist.gov。
“FIPS PUB 186-3:数字签名标准 (DSS),2009 年 6 月” (PDF)。csrc.nist.gov。
“FIPS PUB 186-4:数字签名标准(DSS),2013-07-19” (PDF)。csrc.nist.gov。

0x02 数字签名标准运作

数字签名标准包含椭圆曲线数字签名算法 (DSA),以及基于公钥加密标准 #1和美国国家标准协会 X9.31的Rivest-Shamir-Adleman签名定义。

数字签名标准运作过程

  • 生成密钥,包括公钥和私钥
  • 消息来源创建数字签名
  • 接收方验证数字签名

DSS 只为我们提供数字签名功能,不提供任何加密或密钥交换策略。签名是结合使用私钥生成的,验证私钥是参照相应的公钥进行的。

DSS 不同于 RSA 算法使用公钥、私钥和散列函数,而 DSS 使用公钥、私钥、散列函数、随机数和全局公钥。

发送方

在 DSS 方法中,将消息通过数字签名算法,通过消息生成哈希码,并将输入提供给签名函数:

  • 哈希码(哈希码从消息中生成,并作为发送方签名函数的输入。)
  • 为该特定签名生成的随机数“k”
  • 发送者的私钥PR(a)
  • 全局公钥PU(g)

接收方

在接收端,对发送者进行验证,验证用于验证发送方发送的消息和签名,生成发送消息的哈希码,通过以下的输入进行验证:

  • 接收方生成的哈希码(发送消息的哈希码由接收方通过应用哈希函数生成)
  • 签名组件
  • 发件人的公钥
  • 全局公钥

最后将签名函数与验证函数的输出进行比较,如果两个值匹配,则签名有效。

References:
https://www.geeksforgeeks.org/digital-signature-standard-dss/
https://usemynotes.com/what-is-digital-signature-standard/
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据DSS标准,我们需要选择一个满足以下条件的g: 1. g是p的一个原根; 2. g^q ≡ 1 mod p; 我们可以尝试一些数来找到一个合适的g。首先,我们计算出q的所有可能取值: q = (p-1)/2 = 11 然后,我们可以尝试一些数来检查它们是否是原根: g = 2: 2^11 mod 23 = 8, 2^22 mod 23 = 1 (成立) g = 3: 3^11 mod 23 = 16, 3^22 mod 23 = 1 (成立) g = 4: 4^11 mod 23 = 2, 4^22 mod 23 = 1 (成立) g = 5: 5^11 mod 23 = 9, 5^22 mod 23 = 1 (成立) g = 6: 6^11 mod 23 = 12, 6^22 mod 23 = 1 (成立) g = 7: 7^11 mod 23 = 18, 7^22 mod 23 = 1 (成立) g = 8: 8^11 mod 23 = 3, 8^22 mod 23 = 1 (成立) g = 9: 9^11 mod 23 = 13, 9^22 mod 23 = 1 (成立) g = 10: 10^11 mod 23 = 17, 10^22 mod 23 = 1 (成立) g = 11: 11^11 mod 23 = 1, 11^22 mod 23 = 1 (不成立) g = 12: 12^11 mod 23 = 10, 12^22 mod 23 = 1 (成立) g = 13: 13^11 mod 23 = 7, 13^22 mod 23 = 1 (成立) g = 14: 14^11 mod 23 = 20, 14^22 mod 23 = 1 (成立) g = 15: 15^11 mod 23 = 21, 15^22 mod 23 = 1 (成立) g = 16: 16^11 mod 23 = 19, 16^22 mod 23 = 1 (成立) g = 17: 17^11 mod 23 = 15, 17^22 mod 23 = 1 (成立) g = 18: 18^11 mod 23 = 14, 18^22 mod 23 = 1 (成立) g = 19: 19^11 mod 23 = 22, 19^22 mod 23 = 1 (成立) g = 20: 20^11 mod 23 = 6, 20^22 mod 23 = 1 (成立) g = 21: 21^11 mod 23 = 5, 21^22 mod 23 = 1 (成立) g = 22: 22^11 mod 23 = 4, 22^22 mod 23 = 1 (成立) 因此,我们可以选择g=2、3、4或8等数作为原根。为了方便,我们选择g=2。 接下来,我们需要计算公钥y。根据DSS标准: y = g^x mod p 代入参数,我们有: y = 2^3 mod 23 = 8 现在我们可以开始签名了。首先,我们选择一个随机数k=5,并计算: r = (g^k mod p) mod q = (2^5 mod 23) mod 11 = 9 然后,我们计算: s = (k^(-1) * (m + x*r)) mod q 其中k^(-1)表示k在模q意义下的逆元。由于k=5,q=11,因此k在模q意义下的逆元是9,即: 5 * 9 mod 11 = 1 代入参数,我们有: s = (5^(-1) * (4 + 3*9)) mod 11 = (9 * 31) mod 11 = 4 因此,我们的签名是(r, s) = (9, 4)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lmn_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值