我正在寻求实现一些有效(即具有良好性能)的逻辑,在我们的 Web 应用程序中进行有效负载签名。目标是让 HTML5 客户端保证接收到的有效负载的内容确实是我们后端生成的内容。
我们不想使用共享 salt 生成有效负载哈希,因为用户可以轻松打开 HTML5 源并找到 salt 短语。
我们现在已经实现了 RSA 签名,我们的后端使用其私钥添加有效负载签名,而我们的 HTML5 客户端使用其烘焙的公钥对其进行验证。然而,签名生成过程需要 250 毫秒(对于相对较小的有效负载),并且由于签名请求的性质,这个时间量是不可接受的。
唯一的另一个想法是在每次客户端初始化其与后端的会话时在运行时生成一个共享密钥。然而,这个秘密不能以明文形式发送,所以看起来我们将不得不实现一个 Diffie-Hellman 交换机制,如果可能的话,我们希望避免这种情况,或者使用现有的库实现自动化。
请记住,由于我们销售产品的性质,保密和加密需要在应用层完成。我们不希望加密我们的流量,这是我们的客户可能会或可能不会实施的东西(因为它是一个 Intranet 应用程序)。但是,我们必须避免将与我们的许可检查机制等相关的内容暴露给他们。后端不是基于云的,也不由我们控制,而是安装在客户的机器上,在本地。
前端是 Javascript,后端是 Java。