我正在开发一个基于网络的应用程序,它将被世界上许多国家的许多第三方组织所使用。
基于浏览器的客户端将向共享后端数据库提供敏感数据。
所有国家的所有组织都将在同一个数据库中读取/写入数据。
我希望加密在浏览器中输入的数据,使其在传输到后端数据库时安全。客户端加密。
我还希望在我的数据库中休息时加密数据。
这个应用程序将使用Java、Javascript (REACT.js)和Scala开发。
后端数据库将是MongoDB。
我找不到一个很好的密钥管理示例/描述,例如,密钥是如何正确生成、分发、存储、替换、删除和恢复的。
我有下列选择/决定:
加密的味道,如TripleDES,RSA,Blowfish,Twofish,AES等。密钥(S)对称/不对称及其长度如何安全地分配给我的客户。如何使我的钥匙在我的后端服务器上安全。
如果密钥应该具有生成、分发、存储、替换、删除的生命周期。当我现在使用Key0或Key2时,如何解密用Key1加密的数据?
如何为多个客户端存储多个密钥,使我能够加密/解密每个客户端数据。
发布于 2016-12-06 16:11:51
这是一个非常非常广泛的问题。你应该把它分成几个问题。实际上,它会填满一篇文章。
对于静止的数据,请使用对称加密。无论如何,非对称的速度太慢了(大多数所谓的非对称加密实际上是混合的)。
用AES。因为这是标准,它有最多的眼睛看它,你将永远不需要解释为什么你选择AES而不是其他东西,和性能等其他一些不太可能出现在您的应用程序中有意义的方式。
此外,MongoDB支持AES的开箱即用.
您的DB键是关键的。将它们安全地锁起来,并将一些备份副本安全地存储(即加密)。密钥生成是它自己的主题,但是MongoDB可能已经为您处理过了,请检查它。
对于通信,请使用TLS,也称为HTTPS。这是标准,所有的浏览器都支持它,所有的and服务器都支持它。
如果您想使用客户端证书,正如您有关密钥分配的问题所示,请阅读PKI。这是一个太多的主题,不能放在SE的textarea字段中。:-)
这应该会让你朝着正确的方向开始。关于更多的细节,我建议你问更多的问题,更狭隘的焦点。
https://security.stackexchange.com/questions/144506
复制相似问题