DSA数字签名原理
来源:互联网 发布:淘宝上能买手机号码 编辑:程序博客网 时间:2024/05/29 04:08
DSA数字签名
DSA数字签名是Elgamal和Schnorr数字签名的一个变种,DSA数字签名优于Elgamal数字签名的地方在于它的签名长度较短,并且某些可以破解Elgamal方案的攻击不适用DSA数字签名,DSA数字签名的原理如下:
1. 首先生成一个素数p,p满足 2^L-1<p<2^L ;
注:关于L的值的范围看到两种不同的说法
a):L是1024、2048、3072三个值中的一个
b):L满足512<=L<=1024 ,且L是64的倍数
2. 然后再生成q,再此处,假定L=1024,找到一个素数q,q满足 q能整除p-1,即 (p-1)mod q=0,且2^159< q <2^160;
3. 然后再生成g;
g=h^(p-1)/qmod p, h满足1<h<(p-1),并且g>1
4. 最后生成用户的私钥x和公钥y
x是随机数或者伪随机数,且满足:0< x <q
y 满足 y=g^x mod p
5. 签名,DSA签名也是由两个整数r、s构成,下面是r、s的获取方式:
r =(g^k mod p) mod q
s = [k^-1(H(M) + xr) ] mod q
注:M是明文消息,H(M)是明文消息的哈希值,k是临时密钥
6.验证,假设收到的明文为M’,收到的签名为s’、r’,则验证方式如下:
w=(s’)^-1mod q
u1=[H(M’)w] mod q
u2=(r’)wmod q
v=[(g^u1 · y^u2) mod p] mod q
检验 v=r’ 签名有效,反之则签名无效;
举例:B 发消息给A,使用DSA算法进行签名
1.生成素数p=59、素数q=29、h=11、私钥x=7,临时密钥k=10,消息摘要H(M)=26
2.生成g:
g=h^(p-1)/qmod p → g=11^2 mod 59 → g=3
3.计算公钥y
y=g^xmod p → y=3^7 mod 59 →y=2187 mod 59 →y=4
4.进行签名计算
r = (g^k mod p) mod q → r=(59049 mod 59) mod 29 →r=20
s = [k^-1 (H(M) + xr) ] mod q → s=3·(26+140)mod 29 → s=5
5.A收到消息后进行签名验证
w=(s’)^-1mod q → w=6 mod 29 =6
u1=[H(M’)w] mod q → u1=156 mod 29 = 11
u2=(r’)wmod q → u2=120 mod 29=4
v=[(g^u1 · y^u2) mod p] mod q → v= (45349632 mod 59) mod 29 =20
v=r=20
6.验证成功;- DSA数字签名原理
- java安全架构____java DSA数字签名原理
- DSA数字签名原理及python实现
- 数字签名DSA
- 数字签名算法DSA
- 什么是数字签名算法(DSA)
- 数字签名算法--2.DSA
- 数字签名算法DSA
- 数字签名技术 -- DSA算法
- 数字签名(2):DSA
- 数字签名算法DSA
- 数字签名算法DSA
- 数字签名--DSA实现
- 对文件进行DSA数字签名
- 用DSA算法实现数字签名
- Java加密算法 DSA 和 数字签名
- 数字签名– RSA、DSA、ECDSA
- Java中的加密和DSA数字签名
- Java注解--Java深度历险(转)
- struts2_day02_09-属性封装操作_10-模型驱动封装操作_11-使用属性封装和模型驱动封装注意问题
- java中的IO整理(转)
- modbus
- 深入探讨 java.lang.ref 包(转)
- DSA数字签名原理
- java一些基础问题(java应聘者老被问的问题)(转)
- 引用计数的写时拷贝
- Java NIO整理(转)
- linux桥街模式
- windows python install Matplotlib
- 深入分析 Java I/O 的工作机制(转)
- Java IO流与对象IO序列化(转)
- php字符串函数(2)替换、分割、填充、去除