DSA Crack or Guess
[Author] vhly
[Data] 2007/02/13 My BirthDay!
Have a good Time for everyone!
前一段时间一直在分析Nokia Developer's Suite,通过分析发现其序列号验证方法使用了
DSA数字签名,因此就像分析一下DSA的算法。
DSA算法参数
P: 大素数 P的位数在 512<=L<=1024
Q: (P-1)的素因子 Q<2^160
G: G = H^((P-1)/Q) mod P 首先 G > 1
X: 0 < X < Q
Y: Y = G^X mod P
由于 Y = G^X mod P,那么假设 M = N*P + Y
那么 M % P 恒等于 Y
也就是说 M的取值范围中必定包含 G^X
又因为,如果要求 M = G^X
那么 如果 M = G^X 那么 M % G = 0
求 N 与 G的关系
M = N*P + Y
D = M%G
(N*P + Y)%G = 0
(N*P)%G = G - Y%G
因此可以假定第一次使M%G=0的N-> N1的值用一下公式计算
B = G - Y%G
C = P%G
N1 = B/C
也就是说
(N1*P + Y)%G = 0
同时由于求G的模,因此N的取值会以G为周期
N = (A*G+N1)
可以推出
M = (A * G + N1) * P + Y 满足 M % P = Y 满足 M % G = 0
如果 M 为 G的幂 那么
M % (G^L) 永为0 1<=L<=X
求X
已知:M = G^X,X<Q,G(Q-1)
G^(Q-1)/G^X G^D D = (Q-1)-X
如果 D > X
G^D/G^X G^D D=(D-X)
重复上述步骤,直到 D<X
交换D,X
那么
最终可以到 G,1
以上算法还未真正实现,求M%G=0可以正确进行
实例
P = 5
G = 3
Y = 1
N1 = (G-Y%G)/(P%G)
= (3-1) / (5%3)
= 1
M = (A * G + N1)*P +Y
= (A * 3 + 1)*5+1
A=1 M = 21 M%G = 0 M%P = 1
A=2 M = 36 M%G = 0 M%P = 1
3 81 0 1
M%G M%G^2 M%G^3=1
即 求出 M = 21, 36, 81 之后判断 M 是否是 G的幂
完成
- 标 题: 简单的研究DSA算法 12楼进行更新 提供乘法、幂运算的特征应用
- 作 者:vhly
- 时 间:2007-02-13 14:49
- 链 接:http://bbs.pediy.com/showthread.php?t=39601