这篇论文即将发表在台湾唯一一个 information security 的期刊,信息安全通讯15卷第4期,出刊时间约为2009年10月10日前后。
以下是论文的内容。
以下的内容是实验的结果,根据论文的算法,实际以 Language C 设计出来,最后提出我们的攻击法,来证明这个算法是存在漏洞。
由以上内容知道,本方法确实比 【分享】An improved signature scheme without using one-way Hash functions 6 楼那篇论文 Cryptanalysis of a signature scheme without using one-way Hash functions.pdf 的方法还更有效率。
这是 source code,主要是验证我们的推论,各位可以参考上面的说明;当初没有优化,简单易懂,请见谅。
代码:
#include <stdio.h> #include <windows.h> #include <stdlib.h> #include <math.h> long GetPowAndMod(long g, long x, long p); int main() { long g, x, p, y, m, k, s, r, t, gsk, j, M; printf("Input g, x, p (Separated By Space) : "); scanf("%ld%ld%ld", &g, &x, &p); fflush(stdin); y = GetPowAndMod(g, x, p) % p; printf("y : %ld\r\n", y); printf("Input m : "); scanf("%ld", &m); m = m % (p - 1); s = GetPowAndMod((y + m), m, p) % p; printf("s : %ld\r\n", s); printf("Input k : "); scanf("%ld", &k); gsk = GetPowAndMod(g, k, p) % p; for (j = 1 ; ; j++) if ((j * gsk % p) == 1) break; r = (m * s * j) % p; printf("r : %ld\r\n", r); for (j = 1 ; ; j++) if ((j * x % (p - 1)) == 1) break; t = ((((j * (k - (r ^ s))) % (p - 1))) - s) % p; if (t < 0) { t += (p - 1); printf("t : %ld\r\n", t % p); } else { printf("t : %ld\r\n", t % p); } for (j = 1 ; ; j++) if ((j * s % p) == 1) break; M = (((((GetPowAndMod(y, s + t, p) * r) % p) * GetPowAndMod(g, r ^ s, p)) % p) * j) % p; printf("M : %ld\r\n", M); t = 2 * s + t; r = -r; s = -s; for (j = 1 ; ; j++) if ((j * -s % p) == 1) break; M = (((((GetPowAndMod(y, s + t, p) * -r) % p) * GetPowAndMod(g, r ^ s, p)) % p) * j) % p; printf("M' : %ld\r\n", M); printf("Input r', s', t' (Separated By Space) : "); scanf("%ld%ld%ld", &r, &s, &t); for (j = 1 ; ; j++) if ((j * -s % p) == 1) break; M = (((((GetPowAndMod(y, s + t, p) * -r) % p) * GetPowAndMod(g, r ^ s, p)) % p) * j) % p; printf("M'' : %ld\r\n", M); system("pause"); return 0; } long GetPowAndMod(long g, long x, long p) { long Temp = g; if (x > 2) return (GetPowAndMod(g, x - 2, p) % p) * (g * g % p); else { for (long j = 1 ; j < x ; j++) Temp *= g; return Temp; } }