首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件加密设计

文件加密设计
EN

Security用户
提问于 2017-05-31 14:06:14
回答 2查看 452关注 0票数 2

我正在构建一个应用程序和一个服务器。服务器是一个带有Postgres后端的node.js API。

应用程序中创建的图像将存储在亚马逊S3。有关文件的元数据将存储在Postgres中。

我放大了两种可能的加密密钥解决方案。两者都涉及亚马逊预先签名的URL。这些URL是由Amazon生成的,这是我的服务器调用的结果。

  1. 在app中拍摄照片
  2. 通过我的API保存到Postgres的文件元数据
  3. 服务器从Amazon获得预先签名的URL,用于上传文件
  4. 在步骤2中调用的结果是将URL返回给应用程序。
  5. 该应用程序使用URL将该文件发布到Amazon

至于文件加密,我可以选择使用(kms),即Amazon生成并跟踪每个文件的单独加密密钥。我的服务器需要使用主键来获得预先签名的URL。

或者,我可以选择在服务器上为每个文件生成单独的加密密钥,并将这些密钥与Postgres中的其余元数据一起存储。Amazon仍然会执行加密/解密,但是我会在请求中传递每个单独的密钥,而不是传递主密钥。

KMS,pro:

  • 没有与Postgres中的文件元数据一起存储的加密密钥

KMS,con:

  • 主键在S3中解锁每个文件(但是主键可以旋转)

自定义生成的密钥,pro:

  • 通过XOR:ing键更容易实现额外的用户密钥。如果客户端不信任我的密钥处理,他们可以添加一个只存在于设备上的额外密钥,可能在iOS密钥链中。

自定义生成密钥。con:

  • 如果Postgres数据库被破坏,S3上的文件也可能被破坏。

我是个程序员,不是安全专家。如果我需要的话,我会咨询一位专家,但我认为这个论坛的专家也许可以先给出一些更多的见解。

当然,还采取了其他安全措施。应用程序只通过HTTPS与API对话,应用程序通过API进行身份验证(使用Oath2和JWT)。

我真的很喜欢预先签名的URL概念,因为这使得应用程序对S3上传/下载所需的任何密钥都一无所知。

我应该使用kms还是自己生成密钥?

谢谢!

EN

回答 2

Security用户

回答已采纳

发布于 2017-05-31 14:57:31

以下是对讨论的总结:

你需要知道你想保护钥匙免受什么样的攻击。正如我们所讨论的,您正确地提到了这两种解决方案的优缺点。

我建议将它们混合起来,这样您将使用两个密钥- KEK (密钥加密密钥)和DEK (数据加密密钥)。您将只有一个KEK和与数据库中存储的数据一样多的KEK。

当您将数据存储到DB时,您将生成DEK,用DEK加密数据,用KEK加密DEK,并将加密的DEK与数据一起存储在数据库中。为了读取,您将从DB获得数据和加密的DEK,您可以使用KEK解密DEK,并使用DEK解密数据。

DEK应该仅用于应用程序的内存中。不应在任何其他地方未经加密而存储它。当不需要时,您应该立即从内存中处理它的安全处理(即用零重写字节缓冲区并释放它--注意字符串,因为这些字符串通常是不可变的)。

存储和使用KEK的正确方法应该是在HSM (KMS)中存储和使用KEK,以便某些人,甚至是服务器/应用程序管理员都不会发现它。

它的阴暗面可能是AWS KMS的价格。如果要将其存储在配置中,它可能会被攻击者窃取,然后使用解密数据库转储。但是,你可能不是在保护一个陆军基地;)

还有必要提到的是,如果您需要更改KEK,则必须重新加密DB中存储的所有KEK。

票数 2
EN

Security用户

发布于 2017-06-01 07:47:50

重温..。我自己也发了一个答案。

简短回答:我将使用KMS.

在阅读了更多关于KMS的内容之后,它似乎非常适合我的需求,而且它根本不贵。我们已经使用S3作为文件存储,当我们准备就绪时,我们将在生产环境中使用AWS,因此很容易将KMS添加到设置中。我也将让KMS处理其他秘密,即不再有秘密配置文件。

我担心KMS会使它变得更复杂,但它实际上很容易使用。

我也害怕价格。我以为它的价格会像HSM,但它要便宜得多。

我会在这里留下一些链接,供其他人查找,如果他们与我处于相同的情况。不幸的是,我没有足够的声誉来发布两个以上的链接,所以我将在没有https://前缀的情况下发布其中的一些链接。

概述:

价格:

我可能会在Node.js内部处理这个问题:

  • github.com/DavidTanner/nodecredstash

在命令行中也很容易使用:

  • github.com/fugue/credstash

有启发性的阅读,如果你需要初学者的信息,如我所做的:

  1. blog.threatstack.com/cloud-security-best-practicesfinding-securing-managing-secrets-part-1
  2. blog.threatstack.com/cloud-security-best-practices-finding-securing-managing-secrets-part-2
票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/160868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档