2016-12-06 131 views
1

我正在开发一个基于Web的应用程序,许多第三方机构 将在世界各地使用。什么是加密/解密密钥管理最佳实践

基于浏览器的客户端会将敏感数据送入共享后端数据库。

所有国家的所有组织都会将数据读写到同一个数据库中。

我希望对浏览器中输入的数据进行加密,使其在传输过程中安全 到后端数据库。例如客户端加密。

我也希望在数据库中静止时加密数据。

此应用程序将使用Java,Javascript(REACT.js)和Scala开发。

后端数据库将是MongoDB。

我找不到一个很好的密钥管理示例/描述例如如何正确生成密钥, 在其生命周期中分发,存储,替换,删除和恢复。

我有以下选择/决定作出: - 加密

香精,如TripleDes的,RSA,河豚,Twofish的,AES等。 密钥(S)对称/非对称和/ thier长度 我应该如何安全地将密钥分发给我的客户。 如何让我的密钥在我的后端服务器上保持安全。

如果密钥应具有生成,分发,存储,替换,删除的生命周期。 当我现在使用Key1或Key2时,如何解密用Key0加密的数据?

我应该如何存储我的多个客户端的多个密钥,以使我能够为每个客户端数据加密/解密 。

+3

这可能更适合http://security.stackexchange.com。 – deceze

回答

1
  1. 使用带证书锁定的HTTPS来保护传输中的数据。

  2. 使用AES进行加密。不要在新作品中使用TripleDES,RSA,Blowfish或Twofish。使用HSM

  3. 使用未分配的长寿命密钥对数据进行加密,并使用可根据需要更改的短生命密钥对该密钥进行加密。

  4. 考虑到项目的范围,让一个加密领域的专家来设计安全和审查代码。

+0

非常感谢您的建议。正是我所要求的。 – Hector