亚马逊AWS(EC2/S3)上最好的数据加密策略......在这种情况下你会做什么?

The*_*ude 6 php delphi amazon-s3 amazon-ec2

我的Delphi 2010应用程序(目前正在开发中)加密用户的文件并将其上传到EC2然后再上传到S3.用户可以使用安全的网站下载他们的文件(有点像Dropbox,但在不同的环境,市场,使用等...)

我使用RSA加密.我让我的用户可以选择是否要使用自己的私钥(在本地生成)或使用共享密钥(位于云端)

在处理文件下载时,我最终得到了4种必须正确处理的可能性:

  1. 如果用户使用他/她自己的私有加密密钥:

    一个.从Delphi/Client下载:文件在下载后在用户的机器上解密

    湾 从网站/ PHP下载:不可能(直接),除非我给用户下载一个小实用程序的可能性,允许他/她在本地提供他/她的私钥并在下载后解密文件.

优点/缺点: 安全,但不是直截了当/限制太多,也不可能在手机上做(?)

  1. 用户选择使用我的共享私有加密密钥(位于云端)

    一个.从Delphi/Client下载:文件首先通过EC2上的PHP解密(然后提供给用户),在这种情况下,如果许多用户下载文件(不太可能)或者解密的文件太大,下载过程可能变得非常慢.

    湾 从网站下载/ PHP:与(a)相同

优点/缺点: 直接/正常工作,但可能导致巨大的CPU使用率,下载时出现无法接受的延迟(特别是如果有问题的文件大小).

我的两部分问题是:

1)是否有更好的策略来处理这种情况?和

2)如果您希望为用户提供在私有和共享加密密钥之间进行选择的能力,您会做什么(在加密策略/处理下载方面)?

PS.我正在使用Delphi 2010(客户端),在EC2实例上运行的PHP 5.3正在运行最新的标准Amazon Linux 2012构建

EDIT流量始终是加密的,因此仅限HTTPS!

编辑2我正在使用GPG进行加密/解密

Tec*_*163 2

如果您被迫提供服务器端加密/解密,请使用 system()/exec() 和 openssl 等。我不想看到 PHP 被用来加密/加密任何大型的东西,仅仅是因为它并不是真正设计来这样做的。在这种情况下,在一段时间后删除文件的未加密版本非常重要。

正如您想要做的那样,在服务器端确保安全确实很困难。如果您要加密/解密小东西,您可以在浏览器中使用 javascript 来完成 - 也许请参阅https://www.google.com/search?q=javascript+aes&sugexp=chrome,mod=16&sourceid=chrome&ie=UTF -8

我会做什么:

1)上传到EC2。生成随机密码,使用您的公钥对其进行加密,然后存储该密码。您不想对大数据使用非对称加密。使用先前生成的随机密码通过命令行使用 openssl 进行加密。将加密文件上传到S3。删除(也许粉碎)未加密的文件。

2) 下载时,从S3获取。让您的用户上传私钥。使用私钥解密先前随机密码的加密版本。现在使用该密码通过 o​​penssl 解密文件。将名称设置为随机的哈希值,这样它就可以直接通过 nginx/apache,而无需 PHP。让 cron 每 x 分钟清理一次。

  • @DorinDuminica 我仍然认为河豚相对于现代流密码没有任何优势,并且至少有一个明显的缺点:64 位块。甚至它的作者也建议使用更新的密码。如果您想避免 AES,您可以选择任何其他 AES 决赛入围者,例如 Blowfish 的后继者 TwoFish。 (2认同)