p和q为两个质数,n = p*q,那么数据签名的方法就是:
1)选择一个e∈R,并且 gcd(e , Φ(n))= 1,这里 Φ(n)=(p-1)*(q-1);
2)d = e-1 mod Φ(n);这样就得到公钥(n,e)和私钥(p,q,d);
3)数字签名S = md mod n,这里 m 就是要被签名的信息。
利用中国剩余定理的RSA签名:S = md mod n = (a*p*Sq+b*q*Sp) mod n;
这里的Sp = md mod p,Sq = md mod q, 并且 gcd(p, q) = a*p + b*q = 1。
假设在计算Sp时发生错误(错误值为Sp'),那么计算gcd(S'e - m (mod n), n) = q ;
就可以得到secret factor q, 然后根据n/q = p, 得到secret factor p。
这里S'= (a*p*Sq+b*q*Sp') mod n, e为公钥。