2011-05-03 107 views

回答

12

在基本的RSA算法(没有填充)这是不是很安全的消息的大小限制为小于模量。

为了增强RSA的安全性,您应该使用PKCS1中定义的填充方案。根据您选择的方案,消息的大小可以显着小于模数。 http://en.wikipedia.org/wiki/PKCS1

73

RSA加密长度稍小于模数的单个消息。具体地说,消息首先被“填充”,产生一个字节序列,然后将其解释为一个介于0和之间的大整数n-1,其中n是模数(公钥的一部分) - 所以填充消息的长度不能超过模数,这意味着原始消息有严格的最大长度。

具体来说,使用最常见的填充方案(PKCS#1“old-style”,又名“v1.5”),填充至少为消息添加了11个字节,并且总填充消息长度必须等于模量长度,例如一个1024位RSA密钥的128字节。因此,最大消息长度是117字节。请注意,生成的加密消息长度与模数相同,因此加密必须将消息大小扩展至少11个字节。

使用RSA对加密的大消息(比如,一个电子邮件)的正常方式是使用一个混合方案:

  • 随机对称密钥ķ被选择(原始的序列例如128至256个随机位)。
  • 使用诸如AES之类的适当且高效的对称加密方案,将大消息用K对称加密。
  • K用RSA进行不对称加密。

“分割”大消息到这么多的117字节的块,每个与RSA加密,无法正常完成,各种各样的原因:这是很难做到的权利,无需添加额外的弱点;每个块将被扩展11个字节,意味着不可忽略的总消息大小增加(网络带宽可能是稀缺资源);对称加密速度更快。

+2

扩大这一点。现在,在RSA加密之前,应使用OAEP(PKCS#1 v2.1)填充消息。填充内部使用哈希函数(MGF)两次以及其他一些信息。假设'hlen'是散列函数的输出大小,那么开销是'2 * hlen + 2'。 SHA-1是最常用的散列函数。这意味着** 1024位RSA密钥**只能加密至SHA-1的** 86字节**和SHA-256的** 62字节**。 – 2016-04-24 18:27:00

+0

我假设“RSA加密长度稍小于模数的单个消息”是因为RSA算法依赖于模数结果,所以如果规则被破坏,那么两个不同的消息可能导致类似的密文,那是对? – Yerken 2017-07-19 00:33:32