在51CTO安全频道特别策划的CISSP的成长之路系列的上一篇文章《讲解身份验证过程》里,J0ker给大家介绍了用户验证时所依赖的三种验证要素、密码和密码短语及其安全使用原则。作为技术实施难度和成本最低的用户验证方案,基于密码的用户验证方案广泛应用于我们的日常生活和工作中。但由于密码本身的脆弱性,很容易被攻击者所破解或窃取,因此,在高安全级别的系统中,往往会在使用密码验证的基础上,再增加其他的验证手段,以增强系统的安全性——这便是本文要介绍的用户所有的凭证(Something you have)和下一篇文章要介绍的用户生物特征(Something you are)这两种用户验证手段。

  用户所有的凭证,和传统的密码方式最大的不同在于,用户所有的凭证,对用户来说是他所有的一个物品,用户不需要了解它们具体是怎么运作的,只需要在系统要求用户进行身份验证时提供它们即可。大家可能会觉得J0ker这样说有点抽象,举个简单的例子,用户要进入一个有警卫看守的房间,如果只需要对上暗号而不需要警卫验证用户的其他属性就能进入,就是传统的密码方式。如果用户对上暗号之后,警卫还需要用户提供自己的工作证或者钥匙才能进入,这就是使用用户所有的凭证的验证方式,更进一步的,按照规定用户还必须是警卫认识的人,用户才能进入,这就是用户生物特征的身份验证方式。因此,用户所有的凭证,也就相当于用户进入系统的钥匙。

  用户所有的凭证按照存在的形式还可以分成逻辑存在和物理存在: 逻辑存在的用户所有凭证通常是保存在用户的系统中,在使用时自动或由用户手动提交给验证系统,这种存在形式的用户所有凭证常见的有各种数字证书、某个包含有特殊字符或内容的文件,或者软件实现的Token一类的产品等。而物理存在的用户所有凭证则包括一次性密码(OTP)、存储卡和智能卡等,因为逻辑存在的用户所有凭证有被攻击者复制利用的风险,因此,物理存在的用户所有凭证在安全上要比逻辑存在的更胜一筹。

  下面J0ker将给大家介绍目前使用最为广泛的两种用户所有凭证方案,一次性密码(OTP)和智能卡:

  一次性密码(One Time Password,OTP)和传统的可多次使用密码不一样,一次性密码只能使用一次,使用之后便告失效。这样,即使用户的一次性密码被攻击者所获取,攻击者也不能使用一次性密码再去登录用户的系统,因为这个一次性密码已经失效。

  和大家认为的不一样,一次性密码使用的历史相当长,一次性密码的使用甚至还早于计算机出现——近代军事和间谍领域常用的密码本,便可以认为是一次性密码的前身。直到现在,将许多个一次性密码列表打印在纸上,并交给用户使用,仍然是最为廉价但安全性相当高的一种一次性密码方案,国内有的银行在加强网上银行安全性的时候便选择了这样的一次性密码实现方式,大家可以在使用相关银行的网上银行时留意一下。当然,这种一次性密码实现的安全取决于用户是否能妥善保管打印有一次性密码的密码本。

  更多的一次性密码方案采用电子和计算机技术来实现,这类一次性密码方案的用户端通常是一个类似于小的计算器或钥匙吊坠般外形的设备,上面有个数不等的按钮,行业里也将这个设备称为令牌设备(Token Device)。用户按照一定的规则向令牌设备输入数据,令牌设备计算后返回一个结果给用户,这个结果就是用户登录系统的一次性密码。令牌设备可以根据实现方式分成同步式令牌设备和异步式令牌设备:

  同步式令牌设备(Synchronous Token):令牌设备内保存有和验证服务器相同的一个基准值,如精确到微秒的时间,或用管理员设置的一个可变数值。基于时间同步的令牌设备称为Clock-based Token,而基于可变数值计算的则称为Counter-based Token。它们生成一次性密码的方式大致相同,都是用户输入密码后,由令牌设备利用与服务器同步的变量作为一个参数,重新生成一个用于登录系统的一次性密码。而验证服务器端则会使用相同的变量及算法处理保存在数据库中的用户密码,如果用户提供的一次性密码和验证服务器计算的相同,就可以证明该用户是系统的合法用户。

  

  图1,基于时间同步的令牌设备(Clock-based Token)的工作流程

  

  图2,基于变量同步的令牌设备(Counter-based Token)的工作流程

  异步式令牌设备(Asynchronous Token):由于同步式令牌设备需要和验证服务器相一致的时间或数值变量,所以同步式令牌设备的部署和维护并不轻松。异步式令牌设备则没有这个缺点,它不需要验证服务器维护和令牌设备之间的时间或变量同步。异步式令牌设备采取挑战-回答(Challenge-Response)的一次性密码生成方式,在用户提出登录请求后,验证服务器将根据用户输入的密码返回一个数字,用户再将这个数字输入到令牌设备中进行计算后,把计算结果返回给验证服务器,验证服务器也会进行相同的计算步骤并将结果和用户的输入进行比较,如两个值相同,则验证通过,用户可以登入系统。

  近几年市面上还出现了使用安装在用户系统内的令牌程序代替物理令牌设备的一次性密码方案,这种方案进一步降低了用户部署和维护的成本,也更加适用于追求安全性,又对验证方案的成本敏感的企业使用。

  智能卡(Smart Card):智能卡是一张类似信用卡大小的塑料卡片,在它里面有一块微型的芯片,这款芯片可以存储一些与用户验证相关的信息。有的高级智能卡还包括专用的计算芯片,能够提供一定的加解密或其他运算功能。智能卡的使用要比一次性密码更为广泛,经常被企业用于提供物理安全的访问控制方案中。