2011-05-17 67 views
3

我正在设计一个客户端连接到的Web服务,以检索一些私人数据。每个客户端都有一个唯一的ID和一个秘密密钥(由服务器生成),作为参数发送给Web服务以验证自己。另外,所有通信均通过HTTPS完成。使用通道加密(https)使密钥冗余冗余吗?

我也计划使用HMAC-SHA256,以避免通过电线发送密钥。

但是,我想知道这是否是绝对必要的。由于HTTPS为我提供了客户端和服务器之间的安全通道,为什么我真的介意通过该通道发送密钥?

我设法提出的唯一原因是,一个未知的开发人员可能会在将来添加一个服务,而不会拒绝非HTTPS连接,所以对密钥进行散列是一种针对企业软件开发实际的保险,如果你愿意的话,可以增加一道防线。

我错过了更重要的东西吗?这是一个真正的漏洞,一些攻击媒介可以利用?

回答

2
  • 攻击者在浏览器中安装伪造的可信证书并劫持会话。
  • 发送到您的站点的链接,但重定向到SSL被拦截,并且非SSL会话开始。

还有其他的,但故事是这样的:SSL是复杂的,并且经常以创造性的方式受到攻击。如果你的连接是安全的,那么散列与人类代码的复杂性和cpu时间的代价相比几乎没有什么价值。但是,如果SSL会话受到损害,那么您仍然保存了密钥。就像我们在数据库中散列密码一样,尽管没有人不应该访问,但尽管SSL是明智的,但是散列您的密钥。

2

通道可能是安全的,但是,这并不告诉你端点什么:这取决于有问题的浏览器(和其插件/扩展/ ...),你的关键很可能最终在在用户计算机某处的基于磁盘的缓存中,它可以坐在那里直到永远结束。

这不是一个很有趣的漏洞......直到你意识到,各种恶意软件已经经过磁盘拖网,寻找任何有价值的东西 - 与当前的利率,一些用户感染(除非你的网站只有20个用户;))。所以:不要扔掉一个非常强大的加密机制来节省几个CPU周期;这是一种潜在的危险微观优化IMNSHO。