encryption - 需要提示:共享内容的加密。如何组织?
问题描述
我不太确定我应该如何处理这个问题。
情况如下:
我正在计划一项可以与其他人共享内容的服务。
- 我暂时将分享内容的 Person 命名为Alice以及与Bob和Carol分享内容的两个人。爱丽丝是一个分享者;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 被邀请加入系统,所以他们不会知道太多。因此加密/解密应该在后台自动管理。这意味着私钥将存储在服务器的某个位置,或者不是吗?
你看,在这些场景中有很多用例,我不确定组织这个的好方法。
- 我应该将公钥/私钥存储在哪里,以便只有 Alice、Bob 或 Carol 可以使用它们,并且只有在允许的情况下才能使用它们?
- 我应该为每个用户、每个共享者/观察者对还是为每个文档创建一个公钥/私钥对?
- 我应该在浏览器(Angular)还是已经在服务器端(express/NodeJS)解密文档?
- 密钥(至少是私有密钥)是否应该自己加密?
- 文档应存储在 Amazon S3 上。我应该为每个用户创建一个存储桶吗?
- 如何确保我可以拒绝我之前授予的任何访问权限
技术栈似乎不是最重要的,但它是 MEAN(MongoDB、Express、Angular2、NodeJS)。它还使用 NgRx 存储。
我不需要的是一个成熟的程序,但只是朝着正确的方向轻推。如果你碰巧有一个,我不会拒绝它:)
编辑:总结
以下是该场景的简短摘要:
Alice 应该能够与 Bob 共享文档。文档应该被加密,以便只有 Alice 和 Bob 可以阅读它们。共享是通过浏览器中的网络应用程序进行的。
编辑2:
哦,顺便说一句,Alice 和 Bob 或 Alice 和 Carol 不需要在同一时刻在线,或者在 Alice 共享文档的时刻在线。事实上,它们是共享的,以供几年后使用。
解决方案
你应该:
- 加密静态数据
- 确保您的应用程序仅向授权用户授予文件访问权限
Amazon S3 等系统通常会创建每个对象的加密密钥来加密文件。然后,使用主密钥对该密钥进行加密。主密钥保存在密钥管理系统中,永远无法导出。
这样,如果获得其中一个加密密钥,则只能用于解密一个文件。或者,如果政府要求访问文件并因此需要加密密钥,他们只能读取该文件。
Amazon S3 可以使用服务器端加密和 AWS Key Management Service 自动为您管理上述所有内容。
推荐阅读
- python - Isinstance 函数检查给定的元素是否适合我的矩阵
- java - 如何在java中转换继承的Object
- gcc - 调用 gfortran 生成的 fortran dll 时读取 0x0000000a 时出错访问冲突
- python - 如何使用 gunicorn 将 heroku nginx buildpack 添加到 python django 应用程序?
- julia - 容器值的类型层次结构令人困惑
- java - Java - 检查 HashMap 的值是否正确复制到 ArrayList 的测试返回 false
- python - 除非没有例外,否则如何尝试打开文件?
- java - 在Java中模糊匹配一个字符串与另一个字符串的开头
- android - Firebase Firestore:实例已初始化后无法调用 useEmulator()
- r - 将 dfs 与 dplyr 例如 inner_join 连接时,仅从一个 df 匹配 cols