(RSA公钥密码体制).pptVIP

  • 41
  • 0
  • 约1.68万字
  • 约 163页
  • 2017-03-28 发布于江苏
  • 举报
(RSA公钥密码体制)

产生素数的方法可分为以下两类: 1.确定性素数产生法: (1)基于Pocklington定理的确定性素数产生方法,它需要已知n-1的部分素因子. 定理5.20(Pocklington定理) 设n=RF+1,这里 是不同的素数,若存在a满足: 那么n的每一素因子p都有p=F*m+1的形式,m大于等于1,于是若 ,则n为素数. (2)基于Lucas定理的确定性素数产生方法,它需要已知n-1的全部素因子. 定理5.21(Lucas定理) 设n为正整数,若存在a满足: 问题 给定一个整数n,如何有效的判定n为素数. Efficiently = in time a polynomial in number of digits = (log n)c for some constant c 素数判定有多项式时间算法吗?一直以来是一个颇受关注的问题. 试除法 用小于等于 n1/2的每一个整数试除. 大约在 ~230 BC时就知道 (Sieve of Eratosthenes) 所需计算时间: O(n1/2). 当n是合数时也可以得到n的一个因子. 试除法速度太慢 对于大整数利用试除法判定是不可能的. 例如:对于一个100位的大整数, 需要 1050 次除法. 有更快的判定素数的方法吗? 虽然做过很多尝试,在AKS算法出现之前都没能获得成功. For example, Wilson (18th century) showed: N is prime iff (n-1)! = -1 (mod n) This requires n-3 multiplications Fermat定理 if n is prime then for any a: an = a (mod n). It is easy to check: Compute a2, square it to a4, square it to a8, … Needs only O(log n) multiplications. 能否利用Fermat定理判定素数? For a “few” a’s test if an = a (mod n); if yes, output PRIME else output COMPOSITE. 但是没能成功 For n = 561 = 3 * 11 * 17, all a’s satisfy the equation!! PRIMES in P (almost) [1983] Adleman, Pomerance, and Rumely 给出了一个确定性算法所需计算时间为O( (log n)c log log log n). PRIMES is in P 直到2002年,由Manindra Agrawal,Neeraj Kayal and Nitin Saxena提出的AKS算法,才为我们提供了一个可以在多项式时间内完成对指定数进行素数判定的确定性算法,该算法的运行时间为 . 主要想法: 想法还是源于 Fermat’s 定理. 然而: 如果直接模 n (ring Z/nZ)运算没有很好的结果可以利用. 于是将环扩展到更大的环上希望有更好的结果可以利用. 最终考虑多项式模 n 和 Xr–1, 即环Z/nZ[X]/(Xr-1). 推广的fermat定理 如果n是素数, 则对任意的a有: (X + a)n = Xn + a (mod n, Xr-1). Proof: If n is prime, n divides for every i, 0 i n. If n is composite, then n does not divide for any prime p dividing n. 一个可能的测试 如果对于任意给定的n,都存在一个小 r 和很少的 a, 满足推广的fermat定理,要是能判定出n是素数,则可得到一个好的素性判定方法,这就是AKS算法. 很容易证明: 如果选择一个合适的小”r”,对每一个0 a 2 ?r log n 有 (X + a)n = Xn + a (mod n, Xr-1)成立 则 n 是一个数的方幂或者n有一个小于 r的素因子.由此得到了以下的素数判定方法. AKS算法 输入n1 ⑴ if( )输出合数; ⑵ r=2; ⑶ while(rn){ ⑷ if(gcd(n,r)≠1) 输出合数; ⑸ if(r素数){ ⑹ 设q为r-1的最大素因子; ⑺如果 ⑻ break;} ⑼ r=r+1; ⑽ }

文档评论(0)

1亿VIP精品文档

相关文档