当前位置:文档之家› 公钥密码体制实现

公钥密码体制实现

1) ,如果 ,则 ,否则 ,转向2)
2) ,若 ,转向5),否则转向3);
3) ,转向4);
4)若 , ,转向2);
5)计算出的y为 的结果,退出;
4RSA的实现
出了以上的算法,RSA还需要解决大数存储和运算的问题。目前一般计算机的字长都为32/64,而且一般的编译器只能编译64位以内的整数,即在程序中只能使用64位以内的整数,这对于要求几百上千位大整数的RSA体制来说是远远不够的。如何解决大整数的存储及运算对于RSA体制来说是十分关键的。目前常采用的大整数表示方法有两种,一种是使用数组存储二进制序列,另一种方法是直接存储十进制序列。前一种方法表示形式直观,编程简单,但是占用内存空间十分大,而且在显示和存储之间要进行进制转换,对如此长的序列进行运算效率较低。所以采用第二种方法要优于第一种方法。
若模数n被分解,则RSA系统被破解。根据RSA使用的领域,模数n的位数也有不同的要求:临时性使用384位,经过努力可以破解;商用512位,专业组织可以破解;军用1024位,10年内难以破解。电子邮件安全协议PDG中RSA使用的位数达到2047位。
私钥e和φ(n)互质的条件比较容易满足,为了加快加密解密的速度和节省存储空间,可以取较小的e,但e太小会导致RSA系统的安全性问题。一般的e的选取需要遵循以下原则:
1)用户A任选大素数p,q(保密),计算n=p*q(公开),φ(n) = (p-1)*( q-1)(保密);
2)任选e满足gcd(φ( n), e) = 1,令e为A的加密密钥(公开),计算d使得e*d≡1modφ(n),d保密,e的公开不影响d的安全;
3)用户B欲将信息保密发送给A,先将信息数字化为m(m<n),查看A的公钥e,n,计算 ,将C发送给A;
4.1大数运算
加法计算比较容易的,先从低位算起,因为只须要对应的位相加,再加上前一位的进位,再去判断是否本位是否有进位,有则把本位数字改为减去它的权,也就是10,再置进位为1。如果没有进位,则给进位赋值0。
减法较为复杂,因为要处理负数。用整型或其它类型时,则在处理、保存时会更为复杂。算法也是从低位开始减。先要判断减数和被减数那一个位数长,减数位数长是正常减;被减数位数长,则被减数减减数,最后还要加上负号;两数位数长度相等时,最好比那一个数字大,否则负号处理会很繁琐;处理每一项时要,如果前一位相减有借位,就先减去上一位的借位,无则不减,再去判断是否能够减开被减数,如果减不开,就要借位后再去减,同时置借位为1,否则置借位为0。
确定性素数检测法,判断精确度很高,但运算花费的时间较长;概率性素数检测法,运算耗费较小,但要承担把一些合数误判为素数的风险。由于在RSA加密算法当中,合数被错误地当作素数实施加、解密时,除了会出现异常外,对数据的安全性并不会构成太大威胁。因此,采用误判率较低的素数检测法就可以很好的解决这一问题,故当前广泛采用并被深入研究的是素数的概率测试法。
b.计算
c.如果 并且 循环做下面的操作,否则转3:

Ⅱ当 并且 循环做下面操作,否则跳到Ⅳ
Ⅲ计算 ,如果 返回“合数”,否则
Ⅳ如果 则返回“合数”
3)返回“素数”
Miller-Rabin算法是一个概率算法,算法的计算集中于(b)步和(c)步的循环中,最坏情况是Ⅳ的循环没有中途退出,则一轮Miller-Rabin算法的最坏情况复杂度为 (以模n乘法为基本操作)。如果以单精度乘法操作作为时间复杂度的衡量,则一轮优化的Miller-Rabin算法的最坏情况时间复杂度是 。从时间复杂度来看Miller-Rabin算法的性能是很好的。在实际应用中,Miller-Rabin算法的实际执行速度也很快。
RSA体制常采用Miller-Rabin算法来判断数性,Miller-Rabin算法描述如下:
输入:一个大于3的奇整数n和一个大于等于1的安全参数t(用于确定测试轮数)
输出:返回n是否是素数(概率意义上的,一般误判概率小于 )即可
步骤:1)将n-1表示成
2)对i从1到t做循环做以下操作:
a.选择一个随机整数a
1公钥密码体制及其基础
不同于传统对称密码体制,在公钥密码体制中有两个不同的密钥。其中一个密钥是公开的,称为公钥,另一个是保密的,称为私钥。举个例子:当用户Bob要向用户Alice用密文通信时,Bob首先查找出Alice的加密密钥k,利用公开的加密算法E对明文m加密得到密文c=Ek(m),Alice收到密文c后利用自己的解密算法D和解密密钥k′进行解密,得到明文m=Dk′(c)。公钥密码体制的基本方式如图1所示:
虽然RSA算法的安全性得到了人们的认可,但是RSA在进行加密和解密运算时的整数求幂运算耗时很大,所以RSA算法比对称密码体制加密(解密)同样明文(密文)的耗费时间多得多,这在一定程度上制约了RSA的应用广度。
下面就重点讨论RSA公钥密码体制的思想,算法和实现。
RSA算法是利用陷门单向函数的一种可逆模指数运算,它的安全性是基于大数因子分解的困难性。RSA体制的基本步骤如下:
公钥密码体制的实现
摘要:本文介绍了公钥密码体制的优点、缺点及其基本原理,重点分析了公钥体制的相关算法和实现。论文较为详细地介绍了用于数性判断的Miller-Rabin算法、求解最大公约数的Euclid算法、用于产生密钥的幂模运算算法。另外公钥体制加密是私钥与明文之间运算的过程。二者均是大数,要在目前32位和64位的计算机上实现公钥密码体制,必须解决大数存储和运算问题,本文讨论了两种大数表示方式:二进制序列表示和十进制序列表示。
乘法计算的算法,从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果,之后,用第二位相乘,记录结果并且左移一位,以此类推,直到计算完最后一位,再将各项结果相加得出最后结果。直接用这种方法,需要要用多个链表来保存计算出的分结果,之后结果再相加得到最后结果,可以优化一下,只使用一个链表来表示结果,先把第一位乘数与被乘数的结果保存在链表中,之后把存储结果的头部后移一位,也就是从链表的第二加起,当第二位乘数与被乘数结果加到第二之后的各个项内。以此类推,直到结束。这样就可以用一个链表来存储相乘后的结果。
3.2最大公约数判断
RSA中公钥e与φ(n)的最大公约数应为1。Euclid算法是现在用于计算最大公约数的常用算法之一。Euclid的描述十分简单:记 表示非负整数 的最大公因数,那么: ,也可以写成: 为任意整数,即 。
比如: 。
其证明如下:
假定 ,那么有 和 。对任何正整数 ,可表示为如下形式: ,因此,有 ,k为某个整数。但由于 ,b也能整除kb,而 ,故有 ,这表明d也是b和 的公因子。由于这是可逆的,如果d是b和 的公因子,那么 ,且 ,这等同于 。这样a和b的公因子集合等同于b和(a mod b)的公因子集合。
a.e不可过小。一般选择e为16位的素数。这样既可以有效防止攻击,又有较快的加解密速度。
b.e应使其在mod(n)的阶为最大。
在许多RSA的应用中,希望使用位数较短的密钥以降低解密或数字签名的时间,如RSA在IC卡中的应用。目前已经证明当 时,可以由连分布式算法在多项时间内求出d的值,所以为了保证RSA的安全性,要求d的值不能小于 。
3RSA涉及算法
3.1素数检测算法
在RSA密码中,首先要产生2个大素数。素数在密码理论中占有极其重要的地位,但要判断一个大整数是否为素数却一:确定性素数检测法和概率性素数检测法。通过确定性素数检测法检测的数必定是素数。常见算法包括试除法、基于Lucas定理以及基于Pocslington定理的确定性素数检测法;通过概率性素数检测法检测的数为素数的概率为1-ε,其中ε为素数检测方法中可控制的任意小数,但不能为0。此类方法中较为著名的有Solovay-Strassen检测法、Lehmann检测法和Miller-Rabin检测法等。
关键词:公钥密码体制;RSA体制;算法
传统密钥的加密密钥与解密密钥采用同一个密钥,这个特点使得它有一些优点,但也存在着几个固有的缺点。首先,在进行安全通信之前,双方需要确定一个共同的密钥。这使得对称密钥在网络应用方面存在缺陷。在公共的网络信道中传对称密钥和使用该对称密钥加密的密文,这种信息通信方式是不安全的,其安全性无异于直接传递明文。其次,网络的发展提出了新的需要:如何确定消息来自某个特定的人而各方均无异议。传统加密方法显然不能满足这种需求,通信双方都可以利用密钥加密内容。
为了解决传统加密算法不能解决的问题,1976年,WhitefieldDaffier和Martin Hellman在著名的《NewDirectionsin Cryptography》一文中,为解决信息公开传送和密钥管理问题,首次提出公钥密码体制这一伟大的思想,他奠定了近代密码学的基础,并对近代密码学的发展产生了重大而深远的影响。
单向函数在密码学中起一个中心作用。它对公钥密码体制的构造的研究是非常重要的。虽然目一前许多函数被认为或被相信是单向的,但目前还没有一个函数能被证明是单向的。公钥密码体制也可以用来实现认证系统。
公钥体制加解密的方法与对称密码方法完全不同,所以公钥体制有着对称密码所没有的一些良好优点,并解决了对称密码体制固有的缺点。公钥密码体制密钥分配简单,密钥的保存量少。当互不相识的人需要进行秘密通话时,可以借助可信第三方方便的进行。另外公约密钥还可以完成数字签名和身份鉴别,这是对称密码所无法做到的。
3)存在信息k′,在已知k′时,对给定的任何y若相应的x存在则计算x=f-1(y)是容易的。
仅满足条件(1)和条件(2)的称为单向函数,第(3)条称为陷门性或称为陷门信息。其中,由x计算y的过程即为加密,由y、k′计算x的过程即为解密。
图2 单向陷门函数
设计公钥密码体制的关键是先要寻找一个合适的单向函数,大多数的公钥密码体制都是基于计算单向函数的逆的困难性建立的。例如,RSA体制就是典型的基于单向函数模型的实现。这类密码的强度取决于它所依据的问题的计算复杂性。值得注意的是,公钥密码体制的安全性是指计算安全性,而绝不是无条件安全性,这是由它的安全性理论基础即复杂性理论决定的。
相关主题