微机随机大素数的率生成与应用.docVIP

  • 9
  • 0
  • 约6.34千字
  • 约 12页
  • 2016-10-08 发布于贵州
  • 举报
微机随机大素数的率生成与应用

公开钥密码体制提出至今已有十多年的历史,由于人们对信息安全的迫切要求和密码学者不懈努力,这一体制已得到广泛的应用,在国内外众多的公开密钥密码方案中研究得比较充分而比较有名的首推美国的RSA。它的安全性是基于大数因子分解在数学上是一个 NP困难的问题,至今没有有效的算法。无疑提高素数的位数将大大提高 RSA的安全性,同时大素数有实际的应用领域。这促使我们对微机随机大素数的概率生成应用软件的研制并提供实用。我们将这一软件取名为386BIP-1。在486微机上运行这个软件,通常可在2--3小时内得到一个概率为 1-(1/4) 的100位的随机概率素数,这对于在微机上实现可用于实际的RSA公钥密码系统,提供了可能。此外,该软件支持WINDOWS和网络。 \Center (一)设计要求与方案   根据实际应用的需要,对386BIP-1的设计要求如下: (1) 用C(C++)语言编写源程序. (2) 有好的用户界面,方便的菜单选择. (3) 从键盘输入所要产生的随机大素数的位数(100位以内,100以上的只需稍加改动源程序中的数组大小即可)后,可自动产生所要求位数的大概率随机大素数,且可进一步进行大概率验证,并输出大概率素数于屏幕,打印机或文件中. (4) 提供大素数在RSA中的具体应用。 (5) 用于286,386,486微机;易于移植到大型机。   根据对软件的设计要求,本软件的主体由三个部份组成: (1) 随机大素数的概率生成:在本部份中,从键盘输入所要产生的随机大素数的位数,即可自动随机产生大概率的大素数,并可输出到屏幕,打印机或磁碟文件中。 (2) 大素数概率检验:在本部份中,从键盘或文件输入一个100位以内的大整数,即可自动进行概率检验,一次全部通过是素数的概率为1-(1/4) 。 (3) 大素数在RSA中的应用:本部份中,可从键盘或文件输入所产生的概率大素数,产生RSA加(解)密钥;并提供加(解)密,输出密(明)文于屏幕,打印机或磁盘文件中。 \Center (二)设计分析 (1) 大整数及其四则运算的处理: 386BIA-1软件包可在微机上直接输入输出1000位以内的十进制大整数进行计算; 由于在C语言中,十进制整数的范围仅为 -2 ~ 2 -1(不超出10位),因而首先要解决大整数的表示方法. 我们采取通常的用数组表示大整数的方法 ,因为在具体的程序设计语言(C语言)中考虑到基本运算的运算速度不一致(例如 ,除法比加、减、乘运算慢);同时,要尽可能地避免在程序运行中进行变量类型转换; 我们编程检验过,当使用C语言编程时,如果有字符型同数值型的类型转换,则运算速度要下降十倍以上. 微机大整数运算,文献中已使用了许多方法, 经过反复研究,我们采用以众不同的10000进制方法,即任一整数a都表示为: a = Σ a[i]*10000 (0≤a[i]≤9999,i∈非负整数); 这样一方面可在微机上直接输入输出1000位以上的十进制大整数,另一方面,加法乘法皆不溢出;既易于表达,亦易于运算.在进行四则运算时,直接运用C语言中的基本运算,完全按一般的逐位对齐的办法进行运算,这来得十分方便简捷,同时,在程序运行中完全避免了变量类型转换,大幅度提高了运算速度. 例如: a,b的十进制位数在800位以内时;为在1000进位制下表达a,b,可将它们写成数组: Long int a[200],b[200]; int la,lb; 这里的a[i],b[j]是不超过4位的十进制整数, 即0≤a[i],b[j]≤9999; la,lb 分别是a,b在 10000进位制表示下的长,即la= [Log a]+1 ,lb= [Log b]+1 , 0≤i≤la-1, 0≤j≤lb-1; 这样,十进制整数a,b可分别表示为10000进制数: a= Σ a[i]*(10000), b= Σ b[i]*(10000). 由此可对800位以内的大整数如下作加,减与乘法运算: a+b= Σ (a[i]+b[i])*(10000) ; a-b= Σ (a[i]-b[i])*(10000) ; a*b= Σ(Σ(a[i]*b[j])*(10000) 其中的a[i]+b[j]是两个4位的十进制整数相加,结果不超出一个5位的十进制整数,a[i]*b[j]是两个4位的十进制整数相乘,结果不超出一个8位的十进制整数; 因此可以直接使用微机C语言中的四则运算. 计算过程中尚须记录进位,借位; 以加法为例,可使用长整型变量 ssum,sum[i],w及整型变量ls, 其中ssum存放每四位相加的

文档评论(0)

1亿VIP精品文档

相关文档