提示:共享内容的加密。如何组织?

时间:2019-02-11 09:55:25

标签: encryption amazon-s3 mean-stack

我不太确定该如何处理。

这里是情况:
我正在计划一项可以与他人共享内容的服务。

  • 暂时将我命名为共享内容的人爱丽丝,并与 Bob Carol < / strong>。爱丽丝(Alice)是共享者;和Bob和Carol是观察者
  • 爱丽丝正在共享一些文档……:
    • 文档 A 与任何人共享
    • 文档 B 与Bob共享
    • 文档 C 与Carol共享
    • 文档 D 与Bob和Carol共享
    • 文档 E 已与Bob共享,并计划将来与Carol共享
    • 文档 F 与任何人共享,并且计划将来与Bob共享
    • 文档 G 与Bob共享,但将来应与Carol而不是Bob共享
    • ...

当然Bob和Carol也可以是共享者,而Alice也可以是观察者。

让我们假设Bob和Carol可能不是IT专家,因此他们不知道如何使用公钥/私钥对。作为共享者的爱丽丝是系统的活跃订户,而鲍勃和卡罗尔也被邀请加入系统,所以他们不会知道太多。因此,应该在后台自动管理加密/解密。这意味着私钥将存储在服务器上的某个地方,不是吗?

您看到的是,在这些情况下有很多用例,但我不确定是否有组织这种情况的好方法。

  • 我应该在哪里存储公钥/私钥,以便只有爱丽丝(Alice),鲍勃(Bob)或卡罗尔(Carol)才能使用它们,并且只有在允许的情况下才能使用它们?
  • 我应该为每个用户,每个共享者/观察者对还是每个文档创建一个公钥/私钥对?
  • 我应该在浏览器(Angular)中还是已经在服务器端(express / NodeJS)解密文档?
  • 密钥(至少是私有密钥)应自行加密吗?
  • 文档应存储在Amazon S3上。我应该为每个用户创建一个存储桶吗?
  • 如何确保我可以拒绝以前授予的任何访问权限

技术堆栈并不是最重要的,但它是MEAN(MongoDB,Express,Angular2,NodeJS)。它还使用NgRx存储。

我不需要的是成熟的程序,但是只有一些方向正确。如果您碰巧有一个,我不会拒绝它的:)

编辑:摘要

这是该场景的简短摘要:

Alice应该能够与Bob共享文档。这些文档应该被加密,以便只有Alice和Bob可以阅读它们。共享是通过浏览器中的Web应用程序进行的。

编辑2:

哦,而且BTW,Alice和Bob或Alice和Carol不必同时或在Alice共享文档的那一刻都在线。实际上,它们共享在一起可以在几年后使用。

2 个答案:

答案 0 :(得分:0)

您应该:

  • 加密静态数据
  • 确保您的应用程序仅授予授权用户文件访问权限

Amazon S3之类的系统通常会创建一个每个对象加密密钥来加密文件。然后,使用主密钥对该密钥进行加密。主密钥保存在密钥管理系统中,永远不能导出。

这样,如果获得了一个加密密钥,则只能用于解密一个文件。或者,如果政府要求访问文件并因此要求加密密钥,则他们只能读取该文件。

Amazon S3可以使用服务器端加密和AWS Key Management Service为您自动管理以上所有内容。

答案 1 :(得分:0)

  

您不认为我可以通过使此过程变得更加复杂来增加安全性?

使过程更加复杂通常会导致更复杂的错误。

理论上-您可以通过使用内容密钥加密内容,然后为每个访问用户的公共密钥加密内容密钥来创建端到端安全性。尽管每个用户都需要自己拥有自己的私钥并能够使用它。

  

已经在服务器端(express / NodeJS)

好的,您有一个服务器端应用程序,因此使事情变得更容易。

看到您的要求,您可能不需要直接在S3上管理访问。为了简化操作,您可以创建一个应用程序来决定哪个用户可以访问内容,也可以不访问该内容。然后,应用程序可以直接提供内容(例如代理S3内容),也可以提供签名的url以访问内容。前提是您确保应用程序凭据的安全。

  

应该对文档进行加密,以便只有Alice和Bob可以阅读它们。
  ...
   因此,应该在后台自动管理加密/解密。

您可以在S3本身上对内容进行加密,尽管它对用户是透明的,但用户将收到纯内容。

  

如果您碰巧有一个,我不会拒绝它的:)

您可能已经检查了任何内容管理或门户解决方案,它们通过defaut(Aflresco,Liferay等)或任何可行的CMS系统提供访问和内容共享