没有SSL的安全认证

OCD*_*Dev 3 php mysql database security

我想到了一个没有SSL的认证系统似乎相当安全.我忽略了重要的事情吗?

  1. 用户点击登录页面
  2. 服务器生成用于传输的盐(t-salt)并将其存储在会话中
  3. 服务器将t-salt作为加载的登录页面的一部分发送给用户
  4. 用户输入用户名和密码并点击提交
  5. 浏览器MD5加密密码和t-salt
  6. 浏览器将用户名和MD5(密码+ t-salt)发送到服务器
  7. 服务器使用用户名(*)从数据库中检索密码
  8. 服务器MD5加密从步骤7检索的密码以及在步骤2中存储在会话中的t-salt
  9. 服务器比较步骤6和步骤8中的两个MD5
  10. 如果它们相同,则登录成功进行身份验证
  11. 服务器从会话中删除t-salt(在步骤2中添加)以防止潜在的重放攻击

*请注意,步骤7中检索到的密码不能单向加密(通常的做法),以便步骤8工作.但是,双向加密系统仍可用于在数据库级别保护密码.(嘿,这带来了允许更加用户友好的密码恢复过程的附带好处.)

除了上面的说明,这个计划的优点和缺点是什么?

Mar*_*c B 10

这对于中间人攻击是敞开的.没有什么能阻止攻击者嗅探链接并从服务器 - >客户端获取盐,或者从客户端 - >服务器获取哈希密码,并重放任何一个.

在每次尝试之后无效并生成新的盐会阻止简单的重放,但是它会归结为竞争条件 - 攻击是否可以在用户之前提交登录尝试?即使这样,由于攻击者坐在中间,他们可能会中断用户的链接,捕获盐渍密码,并自己提交并捕获会话.

  • 我一直在使用使用aes加密的预共享私钥和公钥的非ssl协议.但这不适合网络,除非您构建一个本地端口80监听的自定义软件,并为您转移到外部http服务器.HTTPS用于HTTP安全,浏览器已经可以与它兼容,只要没有公开私钥,它就被证明是非常安全的. (3认同)
  • 在路由器/交换机中,中间人更有可能.为什么你在路上经过的马克杯,你可以把每个通过银行大门的人都碾碎?滚动自己的安全协议绝不是一个好主意,特别是当有广泛使用/安全/审查的协议可用时. (2认同)

maa*_*det 7

你发送t-salt和哈希算法algorythm.计算哈希中的密码不会花费很长时间.

你应该在我看来重新考虑SSL.