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

时间:2012-09-02 13:39:46

标签: php delphi amazon-s3 amazon-ec2

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

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

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

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

         

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

         

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

  2.         

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

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

           

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

           

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

    2. 相同         

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

我的两部分问题是:

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

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

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

编辑流量始终加密,因此仅限HTTPS!

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

1 个答案:

答案 0 :(得分: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获取。让您的用户上传私钥。使用私钥解密先前随机密码的加密版本。现在使用该密码使用openssl解密文件。使名称成为随机的哈希值,这样它就可以在没有PHP的情况下直接通过nginx / apache。让cron每隔x分钟清理一次。