php - Amazon AWS (EC2/S3) 上最好的数据加密策略......在这种情况下你会怎么做?

标签 php delphi amazon-s3 amazon-ec2

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

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

在处理文件下载时,我遇到了 4 种必须妥善处理的可能性:

  1. If a user uses his/her own private encryption key:

    a. Downloading from Delphi / Client: file is decrypted on user's machine after download

    b. Downloading from website / PHP: impossible (directly), unless I give the user the possibility to download a small utility that allows him/her to locally supply his/her private key and decrypt the file after download.

Pros/Cons: Secure, but not straightforward / too restrictive, and impossible to do on mobiles(?)

  1. User choose to use my shared private encryption key (located on the cloud)

    a. Downloading from Delphi / Client: file is first decrypted via PHP on EC2 (then served to the user), in which case the download process could become very slow if many users are downloading files (unlikely) or if the files being decrypted are too large.

    b. Downloading from website / PHP: same as (a)

Pros/Cons: Straightforward/ just works, but may results in a huge CPU usage, unacceptable delay when downloading (esp. if the file size in question is huge).

我的问题分为两部分:

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

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

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

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

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

最佳答案

如果您被迫提供服务器端加密/解密,请将 system()/exec() 与 openssl 或其他东西一起使用。我不希望看到 PHP 用于加密/加密任何大的东西,只是因为它并不是真正为这样做而设计的。在这种情况下,一定要在一段时间后删除未加密版本的文件。

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

我会做什么:

1) 上传到 EC2。生成一个随 secret 码,用你的公钥加密,然后存储。您不想对大型内容使用非对称加密。使用先前生成的随 secret 码通过命令行使用 openssl 进行加密。将加密文件上传到 S3。删除(可能粉碎)未加密的文件。

2) 对于下载,从 S3 获取。让您的用户上传私钥。使用私钥解密先前随 secret 码的加密版本。现在使用该密码使用 openssl 解密文件。使名称成为随机的哈希值,这样它就可以在没有 PHP 的情况下直接通过 nginx/apache。让 cron 每 x 分钟清理一次。

关于php - Amazon AWS (EC2/S3) 上最好的数据加密策略......在这种情况下你会怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12236389/

相关文章:

php - 如何从 DynamoDB(iOS 和 PHP)获取行数?

json - 使用 SuperObect 更改 Json

amazon-s3 - boto - 从桶中获取键值的更简洁的方法?

javascript - 验证客户端应用程序身份 - 客户端位于浏览器中

php - 正则表达式从正则表达式代码中排除 1 个单词

php禁止用户访问特定页面,除非登录

delphi - 您如何找到 Delphi 组件的来源包?

c++ - NtEnumerateKey() 的 KeyInformation 参数

ruby-on-rails - Rails - 如何创建文件 (XML) 并将其保存到 Amazon S3 存储桶中?

amazon-s3 - 是否有本地提供 Amazon S3 风格 API 的服务器?