zoukankan      html  css  js  c++  java
  • S/Key:物美价廉的身份验证解决方案

    S/Key:物美价廉的身份验证解决方案

    http://www.enet.com.cn/ 2009年01月06日10:38 eNet硅谷动力
    【导读】:身份认证,是任何网络安全方案的一个基础。如在大部分情况下,需要认证的实体是通信的发送者,即需要确定访问者的合法性问题。在特定的情况下,还需要对接收者进行认证,即要被访问者的真实性问题。

      【eNet硅谷动力专稿】身份认证,是任何网络安全方案的一个基础。如在大部分情况下,需要认证的实体是通信的发送者,即需要确定访问者的合法性问题。在特定的情况下,还需要对接收者进行认证,即要被访问者的真实性问题。在安全性级别比较高的时候,往往需要进行双向认证。同时,还要考虑只认证终端设备即可,还是需要在认证终端设备的时候,同时去认证用户的合法性问题。这些都牵涉到身份验证方案。

      现在可行的身份验证方案有很多。如基于安全口令的身份验证或者基于数字证书的身份验证等等。不过有些方案要么过于简单,存在比较多的漏洞。如虽然很多人喜欢利用口令来作为用户认证或者设备证明,但是如果口令设置很简单,或者不经常更改的话,甚至以明文形式在网络上传输,则很容易被人破解。另外一些解决方案就是过滤复杂,实施成本比较高。如基于数字证书的身份验证,则实施起来有一定的难度。

      笔者现在在企业中部署的是一种物美价廉的身份验证解决方案。其也许不是一种最安全的身份验证方法,但是它是一种性价比比较高的解决方法。它就是S/Key一次性口令系统。

      S/Key一次性口令系统是一个基于MD4 和MD5的一次性口令生成方案。他可以对访问者的身份与设备进行综合验证。S/Key协议的操作时基于客户端/服务器端模式。客户端可以是任何设备,如普通的PC或者是有移动商务功能的手机。而服务器一般都是运行Unix系统。

      笔者之所以向大家推荐这个解决方案,主要有两个方面的原因。一是这个身份认证解决方案,可以有效解决重放攻击。重放攻击是指攻击者通过某种方式在网络连接中获取他人的登陆账户与口令,然后利用它多某个网络资源的访问权限。而现在S/Key协议分配给访问者的口令每次都不同,所以,就可以有效解决口令泄漏问题。因此,可以避免重放攻击。

      其次,现在有不少基于这个解决方案的免费工具,也非常的实用。所以,有一定基础的安全管理人员,可以非常方便的掌握这个解决方案。如此的话,这个S/Key解决方案对于企业来说,可能是免费的。或者只需要添加一些硬件方面的投资即可。

      一、三步实现S/Key身份认证。

      其实从理论上说,S/Key身份认证很容易实现,只要通过三个步骤就可以轻易实现。

      第一步:连接请求人在客户端上,往往就是用户自己的主机,输入账户名。若利用S/Key的专业术语,这个用户名又叫做通行短语。当用户打开这个客户端,S/Key服务器也同时传送过来一个种子。这个种子往往是以明文的形式传输。

      第二步:客户端会多次应用安全哈希函数,产生一个64位的安全性口令。通常情况下,客户端会进行多达98次的哈希函数运算,以提高口令的安全性,增加其破译难度。哈希是一种加密校验和或消息完整性代码 (MIC) ,每一方都必须通过计算才能验证消息。例如,发送计算机使用哈希函数和共享密钥计算消息的校验和,并在数据包中将其包含进来。接收计算机必须对接收的消息和共享密钥执行同样的哈希函数,并将其与原始消息(包含在发送方的数据包中)加以比较。如果消息已经在传输过程中更改,哈希值会不同,将拒收数据包。所以,哈希运算本身就是一种安全的口令计算方法。若通过98次的运算而得出的口令,可以说,其安全程度是非常高的。

      第三步:输出函数会把这个64位的一次性口令以明文的形式显示给用户。然后用户在登陆界面中输入这个一次性口令。登陆程序就会把这个口令传递给登陆服务器,服务器就会对此进行验证。若一致的话,用户则就可以进行正常的访问。否则的话,服务器就会拒绝用户登陆。不过让用户手工输入64位的密码可能会比较吃力。所以,有些S/Key工具,提供了直接复制粘贴的功能,避免了用户手工输入的麻烦。

    二、缺陷:需要手工进行初始化。

      一般在S/KEY服务器上有一个文件,它存储着每个用户上一次成功登陆的一次性口令。服务器端在进行验证的时候,会把接收到的一次性口令输入到安全哈希函数中进行运算。如果运算出来的结果跟上一次的一次性口令一致的话,认证就成功了。然后服务器就会把这个一次性口令存入到这个表中,等待下一次验证。

      但是,当用户没进行一次登陆,则客户端执行哈希函数应用程序的个数就会减少一个。也就是说,在客户端上生成的一次性口令是有限的,而不是无限制的。S/Key就是通过这种方式保证口令的唯一性。可是,这也会造成用户的困扰,如当一次性口令用完时,就需要用户对S/Key服务进行初始化,以避免用户不能够重复登陆的情况。

      当在客户端计算一次性口令时,客户端通行短语可以是任意长度,不过为了安全起见,我们建议最好长度超过8个字符。这些内容都可以在初始化的时候进行设置。若要把设备认人证与身份认证结合,则可以把设备的一个序列好,如MAC地质等当作通行短语。如此的话,就只有在特定的设备上才能够登陆企业的某个网络应用。

      三、建议:根据企业的安全需求选择不同的商业化产品。

      以上只是S/Key 的基本解决方案。若采用免费产品的话,基本上只能够实现如上的一些基本功能。企业若在安全方面还有比较高的要求,则可以购买一些商业化的产品,来强化S/Key一次性口令在企业中的使用价值。

      如有时候管理员会觉得每次要输入一次性口令会比较麻烦,而且也不想通过复制占铁的方式。则企业就可以购买一些商业的软件,他们可以实现自动登陆。也就是说,会自动把这个哈希函数计算所得的长达64位的一次性口令输入登陆框中,以减少用户输入的工作量。这在实际应用中,是很受欢迎的一个功能。

      另外,根据使用频率的不同,每次都需要手工的对客户端进行初始化,也是一件很让人懊恼的事情。在一些商业的S/Key解决方案中,也实现了客户端的自动初始化功能。如可以每隔一个月或者半年,让系统自动进行初始化。这个频率就要企业根据自己的使用情况来确定。当然,也可以让系统在一次性密码用完之后自动初始化。

  • 相关阅读:
    人不能乱说
    信息不可透露

    一波韭菜又一波韭菜,割了一波又一波
    截取等宽中英文字符串(比如截取2个,中午截取两个字,英文截取四个单词)
    nhibernate 配置nvarchar(max)
    angularjs 自带的过滤器
    检测是否是IE浏览器
    WebClient 使用
    从流获取缩略图
  • 原文地址:https://www.cnblogs.com/si812cn/p/1611308.html
Copyright © 2011-2022 走看看