首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

DSA-数据签名算法(理论)

  • 24-03-03 17:01
  • 4168
  • 13189
blog.csdn.net
一、历史

  1991年8月,NIST(Nation Institute of Standards and Technology,美国国家标准技术研究所)提出了数字签名算法(DSA)用于他们的数字签名标准(DSS)中。

DSA是算法,DSS是标准。标准采用算法,算法是标准的一部分。

  但是NIST的通告引起了大量谴责,这些谴责的政治性多于学术性。许多已经取得RSA算法专利许可权的大型软件公司也站出来反对DSS,他们已经投入大量的资金来实现RSA算法,他们当然不希望这些资金白白流失。
  1994年5月19日,该标准最终颁布。

二、DSA算法的描述

  DSA是Schnorr和ElGamal签名算法的变形,该算法的安全性依赖于计算模数的离散对数的难度。
DSA签名中的公开密钥:


p512~1024位的素数(可以在一组用户中共享)
q160位长,并与 p-1 互素的因子(可以在一组用户中共享)
gg=h(p-1)/q mod p,其中 h 小于 p-1 并且 h(p-1)/q mod p > 1
yy=gx mod p (一个p位的数)

在标准最初版本中,p的长度固定为512位,这引起了许多批评,之后NIST改变了它。


DSA签名中的私人密钥:


xx

DSA签名算法中的签名过程:


k选取小于q的随机数
r(签名)= (gk mod p) mod q
s(签名) = (k-1 ( H(m)+xr ))mod q

DSA签名算法中的验证过程:


w = s-1 mod q
u1 = (H(m)×w)mod q
u2 = (rw) mod q
v = ((gu1 × yu2) mod p) mod q
如果 v=r ,则签名被验证
对消息m签名时:

(1)Alice产生一个的随机数 k,k (2)Alice产生:
       r = (gk mod p) mod q
       s = (k-1 ( H(m)+xr ))mod q
其中,r 和 s 就是她的签名,她将它们发给 Bob。
(3)Bob通过计算来验证签名:
       w = s-1 mod q
       u1 = (H(m)×w) mod q
       u2 = (rw) mod q
       v = ((gu1 × yu2) mod p) mod q
如果, v=r,则签名有效。

过程:

在这里插入图片描述

三、 DSA的素数的产生

NIST在【1154】中推荐了一种产生素数 p 和q 的方法,其中 q 能整除 p-1。
素数 p 为 L 位,介于 512~1024 位,是 64 的倍数。
素数 q 为 160 位。
设 L-1=160n+6
(1)选取一个至少 160 位的任意序列,称为 S。设 g 是 S 的位长度。
(2)计算 U=SHA(S)⊕ SHA((S+1)mod 2g),SHA是安全散列算法
(3)将U的 最高位 和 最低位 置为 1 形成 q
(4)检验 q 是否是素数
(5)如果 q 不是素数,则回到(1)
(6)设 C=0,N=2
(7)对 k=0,1,·······,n,令Vk = SHA((S+N+k)mod 2g )
(8)令W=V0 + 2160V1+······+2160(n-1)Vn-1 + 2160n(Vn mod 2b),W为整数,且X=W+2L-1。注意 X 是 L 为长的数。
(9)令p=X-((X mod 2q)-1)。注意 p 同余1 模 2q。
(10)若 p<2L-1,转到(13)步
(11)检测 p 是否为素数
(12)如果 p 是素数,转到(15)步
(13)令C=C+1,N=N+n+1
(14)如C=4096,转到第(1)步;否则,转到第(7)步
(15)将用于产生 p 和 q 的 S 和 C 值保存起来
在文献【1154】中,变量S称为“种子”,C称为“计数”,N称为“偏差”
单向散列函数SHA的使用能防止他人在背后做手脚。
这样做的安全性比RSA高,在RSA中,素数是秘密保存的。某人可能产生假素数或容易分解的特殊形式的素数,除非你知道私人密钥,否则你不知道这一点。而这里,即使你不知道私人密钥,你也可以确信 p 和 g 是随机产生的。

四、DSA的安全性

512位的DSA不能提供长期的安全性,但是1024位可以。

五、攻击k

  每个签名都需要一个新值 k,并且该值必须是随机选择的。
  如果 Eve 恢复了 Alice 用来签名消息的 k,她就可以恢复 Alice 的私人密钥 x (目前我还不清楚怎么恢复的ღ,有知道的可以评论我一下哈,Thanks♪(・ω・)ノ)。如果Eve获得了使用同一个 k 签名的两个消息,即使她不知道 k 的任何情况,也可以恢复 x 。拥有了 k ,Eve 就可以产生 Alice 的签名。在DSA实现中,一个好的随机数发生器对系统安全是至关重要的。

补充:可以使用DSA函数进行 ElGamal加密 和 RSA加密。

注:本文转载自blog.csdn.net的aaqian1的文章"https://blog.csdn.net/aaqian1/article/details/89299520"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top