网络信息安全课程论文

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Solovay -Strassen 素数判定算法

姓名:孟祥伟

学号:2131211

专业:控制工程

日期:2014年5月26日

1前言

网络信息安全的研究主要有两个研究方向,一个是网络协议的分析,通过分析网络协议检测出网络协议中存在的漏洞,然后有效的修改这些网络协议,弥补这些漏洞。另一个就是通过对信息进行加密,把需要通过网络传输的信息加密后再进行传输和把机密的信息加密后再进行存储。近年来,随着计算机运算速度的不断提升利黑客攻击手段的不断改进,保密通信和信息安全越来越受到人们的重视,直接促进了密码学的发展和应用。

在现代密码系统中,大素数的判别和寻找对一些加密系统起着关键作用。很多公钥密码算法都用到素数,特别是160位(二进制)以上的大素数。熟知,RSA 的公共模数就是两个512(近年来又有了对1024,乃至2048)位以上的大素数的乘积;又如,基于有限域

F上离散对数的公钥密码体制,其中素数p要求在512

p

位以上,且p-1有一个大素因子q(160比特以上);再如,基于椭圆曲线离散对数的公钥密码体制(ECC)中,一般要求基点的阶是一个160位以上的大整数,且是一个素数。由此可见大数的素性判断的重要性。

但当前既没有一个有效的确定性素数检测算法,也没有一个高效确定性素数产生算法。当前使用的高效的素数判定算法都是概率算法,速度虽快,但可能会错判误判,即把合数判定成素数,这将会严重影响系统的可靠性以及安全性。而RSA 算法是目前最优秀的公钥解决方案之一, 其安全性建立在大整数分解为两个素数之积的困难性假设基础之上。因此, RSA 算法的核心问题是要解决通过何种方式能快速的找到两个大的随机素数。这样既有利于提高RSA 加密的安全性, 又有利于提高加密效率。

因此,开展在多项式时间内判断一个正整数是否是素数的确定性算法研究,以及快速素数产生算法的研究是非常必要和急需的,这对于促进公钥密码体制的应用以及增强保密通信的可靠性以及安全性都有重要意义。

2 算法概述

素数就是一个除了1和它自身以外不能被其它数整除的数。关于素数的一个基本问题是如何有效地确定一个数是否是一个素数,即素性测试问题。素性测试问题不仅在数学上是一个有挑战性的问题,而且在实际应用系统中也具有十分重要的地位。例如,很多现代密码学应用通常需要确定一个几百位的素数。如果不采用一些快速有效的素性测试方法,即使人们使用运行速度最快的计算机来测试一个100位的十进制整数,花费的时间也将可能超过宇宙可能存在的时间。

判定一个整数是否是素数,最为简单的办法就是直接利用素数的定义,用比要判断的数小的整数去一一试除,如果有一个数能整除要判别的数的话,那就能确定该整数为合数。统计表明,大约有76%的奇数有小于100的素因子,可见这种最平凡的方法有时十分有效。但是对于大素数来说,由于计算量太大,根本无法实现用于具体的应用系统中。所以科学家们根据素数判断的理论发明了许多新的算法,提高了素数判断的效率。

数学家们设计快速有效的素数测试方法的历史已经长达两千多年了。Eratosthenes筛法是对于所有素数都有效的最古老的素数测试算法,然而它的时间复杂性与输入整数的关系是关于输入整数的规模的幂指数关系,因此在实际中使用它来测试大的素数是不合适的。

实践中常见的素数检测方法大致分为两类,一类是确定性的,例如Lehmer 的N—1检测,Lucas的N+I检测,椭圆曲线素性证明(ECPP)等等,当输出结果为―素数‖时,能够保证被检测数一定为素数。另一类是概率性的,如Miller-Rabin 检测,Baillie-PSW检测等等,当输出结果为―素数‖时,仅以一定的高概率保证被检测数的素性。不过概率性检测一般要比确定性检测快得多。

目前,国内外用于测试整数素性的概率算法常见的有两个,即Solovay-Strassen算法和Miller-Rabin算法。

3 Solovay -Strassen 概率素数测试法

Solovay-Strassen 概率素数测试法是建立在以下两个定理之上的。 定理1:

设p>2是一个素数,则对任意整数a>0,

)(mod )(2

)1(p a p

a

p -≡ 定理2:

如果n>2是一个奇合数,则至少有50%的a ∈Z ,即1a 1-≤≤n ,使得同余式

)(mod )(2

)1(n a n

a

n -≡

不成立

1.算法描述

根据以上两个定理,Solovay-Strassen 素数测试法描述如下: (1)随机均匀的选取};1,.....,2,1{-∈n a (2)计算gcd(a ,n);

(3)如果gcd(a ,n)≠1,则n 不是素数;

(4)计算)(mod )(2

)1(n a

n a

n -和;

(5)如果)(mod )(2

)1(n a

n

a

n -≡,则n 可能是素数;否则,n 不是素数。

2.算法分析

如果对一个大整数n 找到一个任意的a ,使得)(mod )(2

)1(n a

n

a

n -≡,不成立,

则可证明n 不是素数,否则n 是素数的概率至少为50%。如果对n 进行k 次Solovay-strassen 素性测试,如果每次输出都为n 可能是素数,则n 是合数的概率小于

k 21,当k 足够大时,k 2

1

是一个十分小的数。

4 Solovay –Strassen算法的实现细节

对一个数是n是否为素数的判断可以从2到根号n依次去除n,如果n能被其中一个整除则说明n不是素数,否则n是素数。还可以用厄拉多塞筛法,采用构造素数表的方式,从2起,依次列出后续数字,如果某个数是前面数字的倍数,则从表中删除,即删掉所有素数的倍数,最后得到的表就是一个全是素数的表。用于程序实现的话,可以设置一个栈,初始时栈内只有一个元素2,令从3起依次累加,并判断如果i不是栈内任何一个数的倍数,则令i进栈,否则继续循环,直到达到要求为止。

以上两种方式对于较小的数的判断还可以使用,但是当数字达到很大的时候,这两种方式的效率都会很低,因而我们要寻求更快的判断一个数是否为素数的方式。首先看几个定理:

定理:设n>1是一个奇数,如果对于n-1的每一个素因子q存在一个整数a 使得下式成立,则n为素数:

a^(n-1)≡1 (mod n)

a^((n-1)/q)≠1 (mod n)

费马小定理:若p是素数,则对于任意的正整数a≠0(mod p),有

a^(p-1)≡1(mod p)

素数重要性质:a^((p-1)/2)≡ (a/p)(mod p),其中p是素数,(a/p) 是雅可比符号

根据以上定理我们可以得到一个素性判定的效率较高的方法。Solovay-Strassen 素性测试。

Solovay-Strassen 素性测试:

1) 对i从1到t 做如下循环:

1.1) 选择一个小于n的随机数b;

1.2) 计算j≡b^((n-1)/2) mod n;

相关文档
最新文档