Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption 需要提示:共享内容的加密。如何组织?_Encryption_Amazon S3_Mean Stack - Fatal编程技术网

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

Encryption 需要提示:共享内容的加密。如何组织?,encryption,amazon-s3,mean-stack,Encryption,Amazon S3,Mean Stack,我不太确定我应该如何处理这个问题 情况如下: 我正在计划一项可以与其他人共享内容的服务 目前,我将命名共享内容的人Alice,以及与Bob和Carol共享内容的两个人。爱丽丝是一个分享者;鲍勃和卡罗尔是观察员 Alice正在共享一些文档…: 文档A不与任何人共享 文档B与Bob共享 文档C与Carol共享 文档D与Bob和Carol共享 文档E与Bob共享,并计划将来与Carol共享 文档F不与任何人共享,计划将来与Bob共享 文档G与Bob共享,但将来应与Carol而不是Bob共享

我不太确定我应该如何处理这个问题

情况如下:
我正在计划一项可以与其他人共享内容的服务

  • 目前,我将命名共享内容的人Alice,以及与BobCarol共享内容的两个人。爱丽丝是一个分享者;鲍勃和卡罗尔是观察员
  • Alice正在共享一些文档…:
    • 文档A不与任何人共享
    • 文档B与Bob共享
    • 文档C与Carol共享
    • 文档D与Bob和Carol共享
    • 文档E与Bob共享,并计划将来与Carol共享
    • 文档F不与任何人共享,计划将来与Bob共享
    • 文档G与Bob共享,但将来应与Carol而不是Bob共享
当然,鲍勃和卡罗尔也可以是分享者,爱丽丝也可以是观察者

让我们假设Bob和Carol可能不是IT专家,因此他们不知道如何使用公钥/私钥对。Alice作为共享者是系统的主动订户,Bob和Carol被邀请加入系统,因此他们不会知道太多。因此,加密/解密应在后台自动管理。这意味着私钥将存储在服务器上的某个位置,不是吗

你看,在这些场景中有很多用例,我不确定有什么好的方法来组织它们

  • 我应该将公钥/私钥存储在哪里,以便只有Alice、Bob或Carol可以使用,并且只有在允许的情况下才可以使用?
  • 我应该为每个用户、每个共享者/观察者对或每个文档创建公钥/私钥对吗?
  • 我应该在浏览器(Angular)或服务器端(express/NodeJS)解密文档吗?
  • 密钥(至少是私有密钥)是否应该自行加密?
  • 文档应存储在Amazon S3上。我应该为每个用户创建一个bucket吗?
  • 我如何确保我可以拒绝以前授予的任何访问权限
技术堆栈并不是最重要的,但它很重要(MongoDB、Express、Angular2、NodeJS)。它还使用NgRx存储

我不需要的是一个成熟的程序,但只需要在正确的方向上推动一下。如果你手头正好有一个,我不会拒绝的:)

编辑:摘要 以下是该场景的简短摘要:

Alice应该能够与Bob共享文档。文件应该加密,以便只有Alice和Bob可以阅读。通过浏览器中的web应用程序进行共享

编辑2: 哦,顺便说一句,爱丽丝和鲍勃或者爱丽丝和卡罗尔不需要在同一时刻在线,或者在爱丽丝共享文档的时候在线。事实上,它们是共享的,可以在几年后使用。

您应该:

  • 加密静止数据
  • 确保应用程序仅向授权用户授予文件访问权限
Amazon S3等系统通常会为每个对象创建一个加密密钥来加密文件。然后,使用主密钥对该密钥进行加密。主密钥保存在密钥管理系统中,永远无法导出

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

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

您应该:

  • 加密静止数据
  • 确保应用程序仅向授权用户授予文件访问权限
Amazon S3等系统通常会为每个对象创建一个加密密钥来加密文件。然后,使用主密钥对该密钥进行加密。主密钥保存在密钥管理系统中,永远无法导出

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

AmazonS3可以使用服务器端加密和AWS密钥管理服务为您自动管理上述所有内容

你不认为我可以通过使这个过程变得更加复杂来增加额外的安全性吗

使过程更复杂通常容易出现更复杂的错误

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

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

好的,您有一个服务器端应用程序,使事情变得更简单

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

文件应该加密,以便只有Alice和Bob可以阅读
...
因此,加密/解密应在后台自动管理

您可以在S3本身上加密内容,尽管它对用户是透明的