DSA/DSS
Digital Signature Algorithm / Digital Signature Standard.
Public key (p, q, g, y)
where y = g·x mod p
Private key (p, q, g, x)
SIGN:
k = random in [1, q-1]
r = g^k mod p mod q
s = k-1 (H(M) + x·r) mod q
--> (r, s)
VERIFY:
a = g^( H(M) · s-1 mod q ) mod p
b = y^( r · s-1 mod q ) mod p
r == (a·b mod p) mod q
Repeat K Attack
s1 = k-1 (H(M1) + x·r) mod q
s2 = k-1 (H(M2) + x·r) mod q
x = (H(M1)s2 - H(M2)s1) · (r·(s1 - s2))-1 mod q
K with Linear Increment Attack
K, K + 1, K + 2, K + 3, ...
s1·k = H(M1) + x·r1 mod q
s2·k + s2 = H(M2) + x·r2 mod q
x = s1·( (H(M2) - s2 - H(M1)·r1-1·r2) · (s2 - s1·r1-1·r2)-1 )·r1-1 - H(M1)·r1-1 mod q
K, K + N, K + 2N, K + 3N, ...
s1·k = H(M1) + x·r1 mod q
s2·k + Ns2 = H(M2) + x·r2 mod q
x = s1·( (H(M2) - Ns2 - H(M1)·r1-1·r2) · (s2 - s1·r1-1·r2)-1 )·r1-1 - H(M1)·r1-1 mod q
Last updated
Was this helpful?