2 回答

TA贡献1830条经验 获得超9个赞
请注意,Diffie-Hellman 交换机制不受 MITM 攻击的保护,因此不加密流量意味着您需要对来自服务器的 DH 数据进行身份验证。这就是为什么使用基于DH的密码套件的Web服务器使用其服务器证书的私钥对通过网络发送的DH元素进行签名的原因,以便客户端检查这些元素是否确实来自他要连接到的服务器。这些元素是公开的,但需要签名。
您所说的“具有共享盐的有效负载哈希生成”是一个键控哈希消息身份验证代码,因此它基于共享密钥,正如您所注意到的,并且由于您不想使用此机制,这意味着您不信任客户端。因此,您必须使用非对称加密对有效负载进行签名。
使用非对称算法对服务器有效负载进行签名意味着您首先需要让服务器与客户端共享公钥。由于您不加密客户端和服务器之间的数据,因此您需要在客户端源代码中部署服务器公钥。
您谈到了签名生成过程,但是客户端上的签名检查过程在您的情况下也非常重要,因为用户等待结果的总时间是添加签名时间和检查签名的时间(而且,签名通常可以在服务器上预测, 如果要签名的数据不是动态生成的,但永远无法预料到验证)。因此,您需要一种快速检查客户端签名的方法。首先,对哈希值进行签名,而不是对整个有效负载进行签名。然后选择客户端开发环境中可用的最快非对称签名算法。请注意,检查 RSA 签名比检查 DSA 或 ECDSA 签名更快,因为相应的密钥长度对应于相同的安全级别。所以你应该留在RSA。
直到这条线之前,所有这些可能不会对您有太大帮助!现在有一种方法可以使用RSA来签名和验证签名来提高性能,这种方式与SSL / TLS在从同一服务器下载多个页面或其他对象时实现以提高浏览器性能的方式完全相同:使用会话缓存。您与一个特定用户共享特定会话的公共密钥。切勿将此常见机密用于其他会话。当用户首次连接时,仅使用 RSA 一次,以交换临时共享机密或交换 DH 材料以创建此共享机密。然后,每次服务器需要对对象进行签名时,它都会使用此特定密钥创建一个键控哈希消息身份验证代码。因此,如果用户找到该机密,例如使用浏览器的调试模式,则这不是问题:此机密仅用于帮助他知道来自服务器的内容未被更改。因此,用户不能使用此密钥来更改服务器与其他用户之间的数据交换。
添加回答
举报