> 文章列表 > RSA加密算法的实际实现与应用

RSA加密算法的实际实现与应用

RSA加密算法的实际实现与应用

RSA算法实现概述

      按照算法实现所使用整数长度的分类,我们可以将算法实现分为小整数版本RSA大整数版本RSA。一般小整数版本RSA的整数长度小于64位,大整数版本RSA的整数长度大于64位。网上很多博客和项目编写的RSA加密算法实现,其实都是小整数版本RSA,而实际工程应用的RSA加密算法都是大整数版本。
      使用常规程序编写的RSA,由于常规整数类型一般只有32位或者64位,所以使用这种方式编写的RSA算法只能适用于小整数情形。小整数版本的RSA算法实现相对大整数版本来说,会更加容易实现,也更能直观地理解其中的原理和方法。但是缺点也很明显,就是因其使用整数较小,质因数分解相对更简单一些,基本上没有实际应用的安全性。
      在小整数版本的实现中,因为涉及到乘方运算,考虑到实际运算的溢出问题,可选的整数长度只能小于相应数据类型长度的一半,比如选用32位整数类型,那么实际算法的整数有效长度应该小于16位。同理,如果选用64位整数类型,那么对应的整数有效长度应小于32位。即使选用长度最大的64位整数,那么算法涉及的整数最大上限也就在10亿左右,用目前平均算力的计算机对这样的整数进行质因数分解,可以说非常非常的轻松。

RSA算法实际应用

      RSA密钥包含公钥私钥,是成双成对使用的。公钥包括模数整数n和公钥整数e,形式为 (e, n) ;私钥包括模数整数n和私钥整数d,形式为 (d, n) 。
      RSA算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是750~800个二进制位。也就是说,长度超过800位的密钥还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。
      RSA密钥长度指的是模数整数的位数,如2048位RSA密钥指的是模数为2048比特的RSA密钥对,常规选值为:1024、2048、4096等。
      一次RSA加密对明文长度是有限制,实际上,RSA算法本身要求加密内容也就是明文m必须满足: 0 < m < n(模数)。如果要加密一个长度大于模数的明文块,就需要对明文进行分块以满足要求。对长度小于模数的明文进行加密,则需要进行填充,一般使用的Padding标准有NoPadding、OAEPPadding、PKCS1Padding等。
      RSA算法也是一个块加密算法,总是在一个固定长度的块上进行操作。一次RSA加密能处理的明文长度是受RSA填充模式限制的,但是RSA每次加密的块长度就是key length。由于有填充,涉及随机数的使用,对同样的数据,用同样的密钥进行RSA加密, 每次的输出都会不一样, 但是这些加密的结果都能正确的解密。

RSA算法优点缺点

优点:RSA算法是国际标准算法,属于主流算法之一,应用广泛,兼容性比较广,能够适用于各种不同的系统之中,不容易出现限制问题。
缺点:RSA算法加密长度为2048位,对于服务器的消耗是比较大的,计算速度也比较慢,效率偏低,一般只适用于处理小量数据。

尽管RSA加密算法运行消耗大,效率低,但是由于其优秀兼容性和安全性,它依旧是使用最广泛的非对称加密算法。

RSA算法性能指标

      在诸如 RSA、ElGamal、全同态加密 等公钥加密算法中,大数乘法是实现加密过程中必不可少的运算单元之一,也是计算量最大、耗时最多的一个单元。目前,实现大数乘法的算法主要有: 小学算法、Karatsuba-Ofman 算法、Toom-Cook 算法和 Schnhage-Strassen 算法等。其中,基于数论转换NTT( number theoretic transform,NTT) 的 Schnhage-Strassen 算法是最为高效也是最适合并行计算的方法。
      衡量RSA算法性能的指标中,有两个极其重要:运算速度安全等级。运算速度是RSA算法加密和解密的速度,通常主要时间消耗是大数乘法所导致,优化方向可考虑运算过程的设计;安全等级体现在RSA算法对信息的安全保证,通常主要跟密钥长度和随机数使用等关键参数有关,优化方向可以根据关键参数多角度考虑。

设计前沿