DSA签名简介及对其的攻击方式

本文介绍了DSA(Digital Signature Algorithm)的密钥生成、签名和验证过程,并详细讨论了针对DSA的几种安全攻击,包括求取私钥、穷搜索攻击、生日攻击和伪造攻击,分析了DSA算法的安全性。

DSA

1、DSA算法描述

1985年提出的ElGamal算法是首次在有限域上基于离散对数问题设计的数字签名方案, DSA算法是在ElGamal算法的基础上设计的, 算法描述如下。

1.1 密钥生成
1) 全局参数

p: 满足2L-1 <p<2L的大素数, 其中L=512+64d, d=0, 1, 2, …, 8 q: p-1 的素因子, 且2159<q<2160。 g: g=h (p-1) /q mod p, 其中h满足1<h<p-1, 且h (p-1) /q mod p>1。

以上3个参数是用户公用的参数, 称之为全局参数, 也称为共享的公共模数。

2) 私钥

x: 选取满足1<x<q的随机数。

3) 公钥

y: 通过y=gx mod p求得。

1.2 签名过程
  1. 生成随机数k, 1<k<q;

  2. 计算r= (gk mod p) mod q;

  3. 计算 s= (k-1 * (H (M) + x * r) ) mod q。 其中M是待签名的消息, H (M) 是由SHA-1(Secure Hash Algorithm-1) 求出的Hash值。

消息M的签名结果即为 (r, s) 。

1.3 验证过程
  1. 计算w=s-1 mod q;

  2. 计算 u1= (H(M) * w) mod q;

  3. 计算 u2= (r * w) mod q;

  4. 计算 v= ( (gu1 * yu2) mod p) mod q。

比较r和v, 如果r=v, 表示签名有效; 否则, 签名非法

2、通用安全攻击(基本都是高复杂度的)

2.1求取私钥

对DSA最直接也是最彻底的攻破方法是利用算法的公开信息求取用户私钥。DSA算法中的公开信息包括:全局参数、公钥、消息和签名, 由这些数据求取私钥有两种方法。

1、根据公钥y计算私钥(基本不可能)

x=loggy(modp) x=log_gy\pmod p x=loggy(modp)

2、根据公共模数p与q, 消息M, 签名 (r, s) 等公开信息计算随机数k(基本也不可能)

T=gu1yu2(modp)k=loggT(modp) T=g^{u_1}y^{u_2}\pmod p\\ k=log_gT\pmod p T=gu1yu

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值