我正在创建一个企业应用程序,服务器端运行一整套不同的应用程序,在客户端,只有一个网页,没有小程序或其他任何东西。不幸的是,用户创建的数据可能是机密的,所以我需要以某种方式对其进行加密。
据我了解,JavaScript 密码学不是一个好主意。在第三方服务器上生成密钥并将其发送给客户端怎么样?感觉就像只是将问题转移到其他地方,而不是解决它。
你能给我一些建议吗?我真的不明白如何加密数据。
我正在创建一个企业应用程序,服务器端运行一整套不同的应用程序,在客户端,只有一个网页,没有小程序或其他任何东西。不幸的是,用户创建的数据可能是机密的,所以我需要以某种方式对其进行加密。
据我了解,JavaScript 密码学不是一个好主意。在第三方服务器上生成密钥并将其发送给客户端怎么样?感觉就像只是将问题转移到其他地方,而不是解决它。
你能给我一些建议吗?我真的不明白如何加密数据。
JavaScript 密码学不是一个好主意
JavaScript 密码学本身并不坏,它只是对最常见的威胁无效。
如果您认为中间人 (MITM) 是一种威胁,那么 SSL/TLS 是一种更有效的控制,否则攻击者可以用 JavaScript 替换不使用加密的版本。
如果您认为客户端的恶意软件是一种威胁,那么它可能会以任何喜欢的方式修改 JavaScript,而您的加密将毫无用处。
如果您认为服务器端是一种威胁(例如,客户端希望服务器存储某些内容但看不到内容),那么它可能是有效的,但客户端需要一些其他方法来确保 JavaScript 没有被篡改(这不是一个容易解决的问题)并且客户需要自己管理密钥。
在您描述的用例中,听起来客户端加密不会真正增加任何额外的安全性。无论哪种方式,您都必须处理传递密钥的问题,这可能取决于 SSL/TLS 的完整性,无论. 客户端要么必须将密钥发送到服务器,要么相反,即使您使用公钥加密来解决这个问题,您仍然会遇到确保发送给客户端的公钥是真实的问题。您很可能最终只是重新实现了一个典型的公钥基础设施。
除此之外,在 JavaScript 中执行加密没有根本问题,除了:
SSL/TLS是浏览器和服务器之间的加密层。只要您在服务器上正确配置了 SSL/TLS,任何额外的 javascript 类型加密都是多余的。
如果您正在尝试创建一个安全的应用程序,而您的团队不了解 SSL/TLS 的作用,您可能需要考虑聘请安全顾问来帮助您处理这些架构细节,并确保您避免任何陷阱。
你有没有想过在服务器端使用 SSL/TLS。因此数据将通过安全通道遍历。稍后在服务器端,您可以加密 ti 并将其以这种形式存储在数据库中
从 OP 的评论来看,这听起来对他们没有用,但是,它可能对其他人有用。
可以有效地加密信息客户端,但用例很少而且相差甚远。
示例用例:
在这种情况下,javascript 应用程序可以通过 TLS 交付。可以使用认为可以接受的任何两种加密方式对文档进行加密。密钥可以从用户密码中导出,并且只存储在内存中。如果上述任何一项都不是真正的 javascript 加密将是多余的,如下所示: