关于在非安全信道中的用户名-密码方式的验证安全问题

转载 2006年05月22日 14:12:00

大家都知道FTP的用户密码是明码传输,在公网环境下极不安全。因为考虑过书写一个类似的需要安全验证的协议,研究了一下相关的问题。假设一个非法用户可以嗅弹到会话的所有内容,该协议需要达到以下的要求:

1.非法用户无法得到密码

2.非法用户无法利用嗅探到的信息通过验证

我们可以考虑依靠DES等私钥加密方法加密密码,假如我们写的是一个公共的协议,加密方法和加密密钥就都需要公开,加密就形同虚设,黑客可以轻易的得到原来的密码。

我们再考虑MD5hash算法,当服务器要求密码时,客户端对密码作hash,服务器把客户的密码hash和服务器的密码hash作比较,假如相同就是验证通过,黑客只能得到HASH过的密码,假如原始密码比较复杂的话,黑客是无法在有限时间得到原始密码的,第一点满足了,公钥加密方法也可以达到类似效果。

但是我们发现黑客虽然无法得到原始密码,但是他毕竟得到了hash以后的密码,使用这个密码,也可以正常登录,我们第2点是无法满足的,所以,我们要考虑需要一些客户端的信息,和密码一起做HASH,这个信息必须:

1.服务器和客户端都可以得到这个信息并且内容一致

2.黑客难以伪造这个信息

一个看起来不错的信息是客户的ip地址(我首先想到的也是这个),但是可惜,因为NAT的存在,这个并不是很好用,我一直把精力放在客户可以提供的信息上,最后在Serv-UFtpServer中发现它的一种对密码进行MD5的登录会话是这样的:

220Serv-UFTPServerv5.0forWinSockready...

USERtest

331Responsetootp-md5998lame113requiredforskey.

PASSSLATBEARQUOTOILMARSGORE

230Userloggedin,proceed.

相同的机器,另外一次登录又不一样了:

220Serv-UFTPServerv5.0forWinSockready...

USERtest

331Responsetootp-md5994lame113requiredforskey.

PASSFLEDDOOMOVASAFELESTHALT

230Userloggedin,proceed.

总算茅塞顿开:服务器发送给客户一个KEY,然后客户再把密码和这个KEY一起做Hash。因为每次发送的KEY都不一样,即使黑客可以嗅探到登录会话,也无法得到密码或者伪造信息进行登录了。

写出这个,无非是整理我对这个问题的一些思路,希望对大家有作用,也希望大家提一些看法(俺不是搞这个的,大家点拨点拨)

 (转自Carfield的猫窝)

关于用户登录的记住密码实现思路(考虑到安全问题)

做网站的时候经常会碰到要实现记住密码,下次自动登录,一周内免登陆,一个月内免登陆这种需求。这种功能一般都是通过cookie来实现的。 整个过程就是用户在登陆的时候,如果选择了记住密码或者一周内免登陆...

用户登录记住密码功能(记住登陆状态),下次不需要重新登录,注意安全问题!实现原理

做网站的时候经常会碰到要实现记住密码,下次自动登录,一周内免登陆,一个月内免登陆这种需求。这种功能一般都是通过cookie来实现的。 本篇文章将简单说一下如何使用php实现该需求的。当然实现该需求的...
  • wplblog
  • wplblog
  • 2016年08月08日 07:33
  • 5398

密码存储中MD5的安全问题与替代方案

经过各种安全事件后,很多系统在存放密码的时候不会直接存放明文密码了,大都改成了存放了 md5 加密(hash)后的密码,可是这样真的安全吗? [root@f4d5945f1d7c tools]# p...
  • luyaran
  • luyaran
  • 2017年06月01日 13:44
  • 149

BAE 升级discuz x2.5 论坛安全问题的方式

昨天在 http://www.devba.com/index.php/archives/579.html  看到可以在BAE上搭建 discuz 论坛了,结果就试了一下,结果真安装成功了,不过作者提...

(46)多线程的安全问题解决方式:synchronized

安全问题存在的原因、解决方式synchronized、同步前提、利弊

创建线程的两种方式区别,安全问题

实现方式和继承方式有什么区别? 实现方式好处:避免了单继承的局限性 在定义线程时建议使用实现方式 两种方式的区别: 继承Thread:线程代码存放Thread子类run方法中 实现R...
  • chrise_
  • chrise_
  • 2017年03月09日 07:50
  • 180

多线程_同步代码块的方式解决线程安全问题

package cn.itcast_09; /* * 如何解决线程安全问题呢? * * 要想解决问题,就要知道哪些原因会导致出问题:(而且这些原因也是以后我们判断一个程序是否有线程安全问题的...

黑马程序员—多线程的两种创建方式与多线程安全问题

--------------------------------------------------- android培训、java培训、期待与您交流!------------------------...

JAVA基础再回首(二十四)——多线程的概述、实现方式、线程控制、生命周期、多线程程序练习、安全问题的解决

JAVA基础再回首(二十四)——多线程的概述、实现方式、线程控制、生命周期、多线程程序练习、安全问题的解决 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://blog.csdn.ne...
  • m366917
  • m366917
  • 2016年09月30日 15:56
  • 1461

webgame中常见安全问题、防御方式与挽救措施

【转自】http://www.cnxct.com/experience-with-webgame-of-security-and-defense/ 十月一的假期间,在知乎上看到一个问题《网页游戏...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于在非安全信道中的用户名-密码方式的验证安全问题
举报原因:
原因补充:

(最多只允许输入30个字)