3.2 密码窃听的风险
密码与PIN仍然是多种计算机安全机制所依赖的基础,因为这是计算机系统对用户身份进行认证的主要机制。在上一章中,讨论了其应用及密码的“人机接口”问题,现在,我们讨论在设计更通用的协议(在不同机器之间运行)时应该考虑的一些更贴近于技术层面的攻击。简单的嵌入式系统提供了很好的研究案例,比如上世纪90年代中期以前用来打开车库或者车门的遥控器。这些原始的遥控器仅会广播其序列号,这些序列号同时也发挥着密码的作用。
一种很常见的攻击是使用“抓取器”,抓取器是一种可以记录本地广播的信号码的设备,并可以在之后进行重放,这些设备在1995年左右进入市场。盗贼可以潜伏在停车场内,并使用该设备记录下用于打开车门的信号,在车主离开后,就重放这个信号把车门打开。
为解决这一问题,一种应对措施是在开车和锁车时分别使用不同的信号码,但是这样效果仍不理想:首先,攻击者可以潜伏在你的住所旁,早晨记录下你的开车号码,然后在夜间把你的车偷走;其次,16位的密码太短了,以至于在偶然的情况下,人们有可能错误地开启别人的汽车(或者甚而在汽车所有者不知情的情况下在其上设置警报[217])。在20世纪90年代中期出现了一些设备,可以对所有可能的密码依次尝试。平均实验215次就可以找到密码,也就是说如果每秒钟10次的话,不到一个小时就能完成密码获取。如果藏身于停车场的窃贼身边带上100个这种设备,那么不到1分钟就能成功了。
因此,另一种防护措施是把密码的长度加倍,从16位变成32位。制造商骄傲地宣称他们的设备可以提供“超过40亿个信号码”,但是这只能表明他们并没有真正地理解问题。因为每一辆车还是只有一个(或者两个)信号码,尽管猜出来似乎不切实际,但是通过使用抓取器,窃贼仍然频频得手。
将序列号作为密码还存在其他漏洞:很多人都能够访问它。比如,以汽车为例,可能所有的经销商员工(或许还有机动车登记处)都有对汽车序列号的访问权限。有些报警器也使用序列号作为主密码,这样会导致更严重的情况:因为序列号会在订购单、提货单、发票和其他所有标准商业文件上显示出来。
有时候,简单密码也是恰当的技术,甚至在同时用作序列号时也是如此。比如,我在游泳池的季票就只有一个条形码。我肯定能用复印机和层压机伪造出一张,但是转门处有门童,并且服务员也认识“老顾客”,所以没有必要采用高成本的安全手段。我实验室的卡式钥匙更难于伪造一些:学生区的钥匙使用红外条形码,员工区的钥匙则使用RFID芯片,该芯片在与短波无线电交互时会提供序列号来通过认证。这些认证机制可能也是非常恰当的—— 更贵重的一些装备会单独存放在一些房间内,并配置性能良好的机械锁。但对于像汽车这样很多窃贼都会动心的财产,就需要更好的保护技术,这就涉及到了加密认证协议。