身份验证试图证明某人的确是他本人。有许多可以提供身份验证的方法,但是与大多数安全措施一样,方法越安全,使用起来就越麻烦。
身份验证技术包括密码、数字签名、生物鉴定措施(例如指纹扫描),以及涉及硬件(例如智能卡)的措施。在网络上,只有两种技术是经常使用的:密码和数字签名。
生物鉴定措施和大多数硬件解决办法都包含了特殊的输入设备,因此限定授权用户必须到指定的机器上接触这些设备。这对于要访问某个组织的内部系统来说,它是可以接受的,甚至是令人满意的,但是它会丧失让一个系统在网络上得到广泛应用的许多好处。
密码易于网络应用,也易于用户使用,并且不需要特殊的设备。它们提供一定级别的身份验证,但是也许不能独立地适于安全级别较高的系统。
密码是一个简单的概念。用户和系统都知道密码。如果一个访问者声称是某个用户,并知道密码,系统就没有理由不相信他就是该用户。只要别人不知道或者猜不出密码,那么采用密码就是安全的。但是只使用密码仍然存在许多潜在的弱点,例如它不能提供健壮的身份验证。
许多密码很容易就被别人猜到。如果允许用户选择自己的密码,大概50%的用户会选择容易破解的密码。这种密码中通常包含字典单词或者用户名。以易用性作为代价,可以迫使用户在密码中包含数字或者标点符号,但是这会导致一些用户难以记住密码。
告诉用户选择更好的密码可能会有所帮助,但是即便如此,仍然有约25%的用户会选择容易破解的密码。这可能需要通过加强密码政策来实现,防止用户选择容易破解的字符组合,这可以通过使用非字典单词,或要求密码是数字或标点符号或大小写字母的混合来实现。严格的密码规则的一个危险是它可能会导致许多合法用户不能记住自己的密码。难以记住密码会增加用户不安全操作的可能性,例如,他可能写一个便条"username fred password rover",把这个便条贴在显示器上。需要教育用户不要将密码写下来或做其他蠢事,例如在电话中将密码告诉自称正在系统中工作的人。
密码也可以通过电子化的方式捕获。通过运行一个程序捕获终端的按键或者使用一个“嗅控器”捕获网络信息,入侵者可以(并且肯定可以)捕获一对可以使用的登录名和密码。我们可以通过加密网络信息来限制捕获密码的机会。
尽管密码有许多潜在的缺点,但仍然不失为一种简单而相对有效的用户身份验证方法。它们提供的保密级别可能不适于国家级安全,但是用于检查一个顾客订单的分发状况则是非常理想的。
身份验证机制内置于大多数流行的Web浏览器和Web服务器之中。Web服务器可能会要求请求服务器上特定目录文件的人们输入用户名和密码。
当需要一个登录名和密码时,浏览器将弹出一个如图15-2所示的对话框。
图 15-2 当用户试图访问Web服务器上一个受限目录时,Web浏览器将要求用户进行身份验证Apache的Web服务器和Microsoft的IIS都采用了这样的办法,它能够很简单地保护网站的一部分或者全部。使用PHP或者MySQL,可以通过许多其他方法来实现同样的效果。使用MySQL比内置的身份验证速度更快。使用PHP,可以提供更灵活的身份验证,或者以更具吸引力的方式呈现此要求。
我们将在第17章中详细介绍身份验证的示例。