使用公钥/私钥对(RSA)时,推荐什么技术来防止MITM攻击?

我目前有一组Web服务公开接口到各种不同的客户端types和angular色。 身份validation通过公钥/私钥对(RSA)进行处理,仅在HTTP头中validationURL是签名。

在这个时候,HTTP Body没有被encryption(我使用2048位的私钥/公钥,这使得我只能encryptionless量的信息),所以RSA不够安全,因为服务器不能再certificate自己没有一个男人在这中间。 我也可以encryptionHTTP身体,但性能呢?

我的问题是: 在这种情况下,推荐什么技术来防止MITM攻击?

如果不encryption整个已validation的会话,则使用HTTPS 绝对没有意义 。 如果任何一点你通过一个不安全的通道传输会话ID,那么攻击者就可以使用这个来进行身份validation(就像Firesheep一样)。 更进一步,你违反了OWASP A9 。

从性能angular度来看,SSL最昂贵的部分是最初的握手。 这被caching,并且每个客户端只做一次。

另外要记住的是,如果你想停止SSLStrip风格的攻击,那么你应该设置STS-Header 。

如果您的目标只是真实性(而不是机密性),则可以使用来自客户端或服务器或双向的标头签名来validation接收到的位是否来自发件人。

请注意,如果签名的内容没有被检查的时间戳,那么容易受到简单的重放,这可能使中间的某些人无限期地执行一些function或伪装成另一方。

由于直接的RSAencryption/解密是计算密集型的,所以实现不是为处理大量数据而devise的,所以出现“数据密钥太大”的错误。 实际限制与algorithm提供的encryption强度有关。 允许一个大的,低熵的有效载荷会削弱它。

为避免此错误,您需要使用消息摘要algorithm,在较大的位集(如HTTP POST主体)上执行MD5之类的单向散列,然后使用RSAencryption对固定大小的摘要结果进行encryption。 encryption的散列本质上是一个数字签名。 然后接收方解密,计算主体的哈希结果,并比较哈希以validation签名。

请注意,如果会话密钥可用,因为也正在使用encryption,则可以使用该共享对称密钥简单地encryption正文的散列,而不是执行成本更高的RSAencryption。 这被称为消息authentication码(MAC),不如签名强。

去尝试和validation的解决scheme:使用HTTPS相互authentication,作为奖金encryption整个会议。 除非您的客户端运行在TI计算器上,否则HTTPS性能不是问题。 谷歌使用它的整个Gmail,这应该是一个很好的例子。