将大数据分割用于RSA加密

5

最近我们一直在使用OpenSSL来帮助加密/解密一些数据。每个“客户端”都会有一个由本地证书颁发机构给他们的公钥/私钥对和X509证书。现在我正在研究如何使用该密钥对加密/解密数据。

我查阅了所有资料,都显示使用RSA_public_encryptRSA_private_decrypt方法进行RSA加密。但是,我可以加密的数据量受到填充类型RSA_PKCS1_OAEP_PADDING的RSA_size(rsa) - 41的限制。所以我的问题是如何在遵循我们的RSA方案(没有静态关键词等)的同时加密更大量的数据。我想把数据分成块然后再加密它,但这似乎违背了填充的意义。

任何帮助将不胜感激。

2个回答

6
即使您破解了数据,也会发现速度极慢。正确的方法是:
  1. 为对称算法生成随机密钥
  2. 使用对称算法和随机密钥加密数据
  3. 使用您的公钥加密随机密钥,并将其以加密形式存储在数据旁边(或之前)。

有道理。在C语言中生成随机密钥的最佳方法是什么?使用arc4random()从UTF8中选择随机字符?在openssl或c的stdlib中是否有“Secure Random”类? - Staros
@Staros,arc4random()看起来是一个不错的选择,因为它实现了具有密码学强度的RC4生成器。但我也会看看erickson在这个问题中的答案,并检查使用OpenPGP的可能性--它会为您处理一切。 - Eugene Mayevski 'Callback
1
@Staros - 从/dev/random中读取所需数量的比特。它们不需要是任何编码的字符。 - aaz
不幸的是,OpenPGP和GnuPG受到许可证的限制,如果您使用它们,则需要发布所有源代码。 - Oscar
1
@Oscar,你可能在谈论实现。OpenPGP是一个标准(RFC 2440和RFC 4880,http://tools.ietf.org/html/rfc4880)。标准本身并不规定代码的许可证。 - Eugene Mayevski 'Callback

1

你应该使用像CMS(电子邮件客户端中S/MIME支持的基础)或PGP这样的标准。几乎每个平台都有这些标准的库。

你会发现它们在大数据加密方面的方法非常相似,使用对称密码来加密数据,并使用“消息”接收者的公钥加密该秘密密钥。这种方法既安全又快速。

然而,这些标准还进一步处理了你可能尚未考虑过的安全问题,例如为多个接收者加密数据、将元数据附加到加密内容等。你还可以与其他软件实现互操作性。例如,如果你使用S/MIME,则可以使用任何平台上的任何电子邮件客户端进行解密。实际上,根据你的集成要求,你可能不需要编写任何软件。

使用这些成熟的协议之一不能解决你所有的安全问题,但它会使做一些真正愚蠢的事情更加困难。


CMS在OS X的当前版本的OpenSSL中不可用。我认为它是在0.9.9或1.0中引入的。PKCS7是可用的,我猜应该也适用于CMS。 - Staros
1
我曾经认为CMS是PKCS7的更高级实现,但不知道具体原因。 - Staros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接