我正在开发一个基于Web的应用程序,该应用程序将由许多第三方组织使用在世界各地的许多国家。
基于浏览器的客户端将将敏感数据馈送到共享的后端数据库中。
所有国家的所有组织都会将数据读/写入同一数据库。
我希望对浏览器中输入的数据进行加密,以便在运输中安全到后端数据库。例如客户端加密。
我也希望在我的数据库中静止时加密数据。
将使用Java,JavaScript(React.js)和Scala。
开发此应用程序。后端数据库将是mongodb。
我找不到一个好的密钥管理示例/描述,例如密钥是如何正确生成的,分布式,存储,替换,删除和恢复在其寿命中。
我有以下选择/决定要做出: -
加密的味道,例如三倍,RSA,洪水,二元,AES等。钥匙(S)对称/非对称及其/ther长度我应该如何将钥匙安全地分配给客户。如何使我的钥匙安全在我的后端服务器上。
如果密钥应具有生成的,分布式,存储,更换,删除的生命周期。当我使用key1或key2时,如何解密使用key0加密的数据?
我应该如何为多个客户存储多个键,以使我能够加密/解密每个客户数据。
-
使用https与证书固定在运输中保护数据。
-
使用AES进行加密。在新作品中不要使用三倍,RSA,洪水或二线。
-
使用HSM。
-
使用未分发的长寿密钥对数据进行加密,使用可以根据需要更改的短寿命键加密该键。
-
考虑该项目的范围获得一个加密域专家来设计安全性并审查代码。