1、1Information Security:Principles and Practice,2nd Edition美Mark Stamp著张 戈译第7章 认证27.1 引言本章内容 身份认证方法 身份认证问题 安全协议 访问控制(授权)37.2 身份认证方法自然人能够被一台计算机所认证,需要基于以下任何一样“东西”:你知道什么 你具有什么 比如:ATM卡或智能卡 你是谁4口口令令7.3 口令理想的口令要具备这几个要素:你本人知道,计算机能够验证出你知道,并且任何其他人都无法猜得出来即便是能够访问到不受限的计算资源。-非常困难!还有很多其他的情况,我们并不把一些东西称为“口令”,虽然它们实际上发
2、挥着口令的功能。例如,ATM卡附带的PIN码实际上就是口令。从安全性的角度来看,口令问题的解决方案之一就是用随机生成的密码技术中的密钥来代替口令。破解这样的“口令”,其计算开销将会与穷举式密钥检索相当,这样我们使用的口令就至少能够和我们的密码系统一样强壮了。57.3.1 密钥和口令假设我们的老对手Trudy面临的是64位的加密技术密钥。那么将有264个可能的密钥,如果这个密钥是随机选择的,那么平均而言,Trudy需要尝试约263个密钥,才有望找到正确的那个密钥。6假设Trudy面临的是口令,已知其为8字符长度,对于每个字符有256种可能的选择。那么,将共有2568=264种可能的口令值。乍一看
3、,破解这样的口令可能跟密钥搜索问题基本上是等价的。但遗憾的是用户们在选择口令时并不是随机的。Trudy能够以远远少于263次的尝试次数获得很高的口令破解成功率。举个例子来说,一个经过认真挑选的包含220 1,000,000个口令字的字典就有可能使Trudy能够以相当高的成功概率破解给定的口令。另一方面,如果Trudy试图找出随机生成的64位密钥,并且只对选择的220个可能的密钥进行尝试,那么她能够成功破解的机会大概仅有220/264=1/244,也就是小于17 万亿分之一的概率。所以,口令选择的非随机性是口令相关问题的根源。7.3.2 口令的选择脆弱的口令:Frank Pikachu 1025
4、1960 AustinStamp 系统的安全性常常会依赖于口令的安全性,因此,用户就需要设置难以猜解的口令。jfIej(43j-EmmL+y09864376537263P0em0NFSa7Yago 口令试验:如果允许用户选择口令,那么最佳的建议是基于短语来选择口令。另外,系统管理员还应该使用口令破解工具来进行弱口令测试,因为攻击者当然也会使用这些手段来进行口令破解。需要定期对口令进行修改。77.3.3 通过口令对系统进行攻击假如Trudy是系统范畴之外的人,也就是说,她没有机会访问某个特定的系统。对于Trudy来说,一种常见的攻击路径可能是:外来者-常规用户-系统管理员。在尝试口令破解时还有另
5、一个有趣的议题,那就是检测。例如,系统常常会在三次错误的口令尝试之后将用户锁定。87.3.4 口令验证相对于将原始口令存储在文件中的方式或者加密口令文件的方式,存储哈希口令的方式会更加安全。例子:如果Alice的口令是FSa7Yago,我们可以计算值并将其存储在文件中。y=h(FSa7Yago)其中h是一个安全加密哈希函数。然后,当有声称是Alice的人输入了一个口令时,该口令值将被执行哈希计算并与y进行比较。如果y=h(x),那么输入的口令被认为是正确的,这样用户就通过了身份认证。对口令执行哈希运算的好处在于,即使Trudy获得了口令文件,她也无法获得实际的口令结果就是她只有口令的哈希值。如
6、果Trudy知道了哈希值y,她就能够发起前向检索攻击,通过持续猜测可能的口令x,直到找出一个x使得满足y=h(x),这时她就相当于破解了这个口令。9假设Trudy有一个字典,其中包含了N个常规的口令字d0,d1,d2,dN-1她就能够预先对字典中的每一个口令字进行哈希计算y0=h(d0),y1=h(d1),yN-1=h(dN-1)如果Trudy能够访问包含了口令字哈希值的口令文件,那么她仅仅需要将该口令文件中的条目与她已经预计算了哈希值的字典中的条目进行比对即可。而且,预计算了哈希值的字典可以重用,可以与每一个获得的口令文件进行比对,这样就节省了Trudy重新计算哈希值的工作量。如何预防针对公
7、开密钥加密方案的前向检索攻击?在对消息进行加密之前,我们会将一些随机的二进制位值附加到消息体中。在计算每一个口令的哈希值之前,通过将一些非秘密的随机值,也称为salt,先行附加到口令上,这种做法对于口令也能够得到与前面类似的效果。口令的salt就类似于初始化向量IV。IV是非秘密的值,其作用就是使相同的明文分组在加密时生成不同的密文值,同样,salt也是非秘密的值,目的是让相同的口令被执行哈希运算后得到不同的值。10令p是刚刚输入的口令字。我们生成随机的salt值s,并计算出y=h(p,s),再将数值对(s,y)存储在口令文件中。想要验证输入的口令x,我们要从口令文件中提取出(s,y),计算出
8、h(x,s),再将这个结果与存储的y值进行比较。假如Alice的口令是添加了salt值sa后再进行哈希运算得到,而Bob的口令是添加了salt值sb后再进行哈希运算得到。那么,想要使用自己的通用口令字典来猜解Alice的口令,Trudy就必须将她的字典中的每一个口令字先添加salt值sa,再计算每个哈希值,而在攻击Bob的口令时,Trudy必须再使用salt值sb再次重新计算哈希值。对于有N个用户的口令文件来说,Trudy的破解工作量将以N为系数增长。所以,对于Trudy来说,预先计算的口令字哈希值文件就不再有用了。117.3.5 口令破解中的数学分析假设所有口令的长度都是8个字符,并且对于每
9、个字符都有128种不同的选择,这就意味着,共存在1288=256种可能的口令字。假设口令被存储在一个口令文件中,该口令文件共包含210种口令的哈希值,而Trudy则拥有一个包含220个通用口令字的字典。基于上述这些假设,我们来确定在下面4种情况下,能够成功地破解一个口令的概率是多少。I.Trudy想要确定Alice的口令(也许Alice就是管理员)。Trudy并不使用她自己的口令字典文件。II.Trudy想要确定Alice的口令。Trudy使用她自己的通用口令字典文件。III.Trudy满足于破解口令文件中的任何一个口令,不使用她的字典。IV.Trudy想要找出经过哈希运算的口令文件中的所有口
10、令,并使用她的字典。12情况情况I:Trudy已经决定就要破解Alice的口令。这时,Trudy好像有点心不在焉,完全忘记了她还有一个口令字典可用。因为没有使用通用口令字典,Trudy除了强力破解攻击方案之外别无选择。这就和穷举式密钥检索相同,因而可以预计其工作量将是:256/2=255无论是否对口令添加了salt值,这里的结果都一样,除非有人对所有可能的口令字进行提前计算、排序并存储其哈希值。如果所有口令字的哈希值都已知,那么在没有添加salt值的情况下,根本不产生任何工作量Trudy仅仅需要查找哈希值列表,从而找出对应的口令即可。13情情况况II:Trudy又一次想要恢复出Alice的口令
11、,并且这次她准备使用自己的通用口令字典。Alice的口令在Trudy的字典中的概率大约是1/4。假设对口令添加了salt值,而且再假设Alice的口令落在了Trudy的字典当中。那么,Trudy有望在对字典中所有口令字的一半执行完哈希运算后,即经过219次尝试就可以找到Alice的口令。对于Alice的口令不在字典中的另外3/4概率的情况,预计Trudy有望经过大约255次尝试可以找到正确的口令。综合这些不同的情况,可以给出Trudy的工作量如下式表示:这里得到的预计工作量几乎与情况I中的相同,那时Trudy并没有使用她的字典。不过,在实践中Trudy的做法会是对她的字典中的所有口令字进行尝试
12、,如果仍然没有找到Alice的口令,那就放弃了。这样,实际的工作量至多会是220,而其成功的概率则是1/4。如果没有对口令添加salt值,Trudy就可以预先对她字典中的所有220个口令字进行哈希计算。然后,这个相对开销比较小的一次性工作的结果就能够被Trudy重复利用,也就是说,攻击的次数越多,单次攻击的平均开销就越小。1454.619551322244情况情况III:在这种情况下,Trudy满足于破解口令哈希文件中所有1024个口令中的任何一个即可。这次Trudy又忘了她的口令字典。令y0,y1,.,y1023分别是这些口令的哈希值。假设文件中的所有210个口令各不相同。再令p0,p1,.
13、,是所有256个可能的口令的列表。在强力破解的情况下,Trudy需要执行255次不同的比较,才有望找到一个匹配。如果没有对口令添加salt值,Trudy可以计算h(p0)并将其与每一个yi进行比较,其中i=0,1,2,.,1023。接下来,再计算h(p1),并再次将其与所有的yi进行比较,依此类推。这里的关键是每执行一次哈希运算都需要Trudy执行210次比较。预计的最终开销是:255/210=245假定对口令添加了salt值。令si表示针对口令哈希值yi所添加的salt值。那么,Trudy要计算h(p0,s0)并将结果与y0进行对比。接下来,她还要计算h(p0,s1)并将结果与y1进行对比,
14、再计算h(p0,s2)并将结果与y2进行对比,如法炮制直至h(p0,s1023)。然后,Trudy必须将p0替换为p1,再重复执行上述整个过程,之后使用p2替换p1再执行该整个过程,依此类推。这种操作方式的基本特点是,每一次哈希运算仅产生一次对比,所以可预计的工作量是255,这和上面的情况I结果相同。这种情况说明了对口令添加salt值的好处。但是,Trudy这时并没有使用她的口令字典,实际上这是不可能的。15情况情况IV:假设Trudy还是满足于恢复出口令哈希文件中所有1024个口令中的任何一个即可,并且这次她要使用口令字典了。口令文件中的1024个口令中至少有一个出现在Trudy的口令字典中
15、的概率为即口令文件中的任何口令都不在Trudy的口令字典中。如果没有对口令添加salt值,Trudy可以直接对她的字典中的所有口令字执行哈希运算,再将这些结果与口令文件中所有的1024个哈希值进行比较。结果是,Trudy仅仅需要执行大约219次对比也就是她的口令字典大小的一半,就有望找到一个口令了。如同情况III一样,每一次哈希运算会产生210次比对,所以预期的工作量只有219/210=29。假设Trudy拥有一个通用口令字典,并且乐于能够从口令文件中恢复出任何的口令,并且口令文件中的口令都添加了salt值。则Trudy可预计的工作量大约是:即凭借着微不足道的工作量,Trudy就有望破解至少一
16、个口令。16102431147.3.6 其他的口令问题口令的安全性取决于安全性最低的应用场合。关于口令,社会工程学也是一个主要的隐患。对于基于口令的安全机制来说,击键记录软件以及与此类似的间谍软件也都是很严重的威胁。现实中有很多流行的口令破解工具,包括L0phtCrack(针对Windows操作系统)和John the Ripper(针对Unix操作系统)。这些口令破解工具都预先配备了口令字典,而且非常容易构造自定义的字典。这些都是攻击者可以利用的口令破解类工具中很好的实例。177.4 生物特征技术生物特征技术代表了基于“你是谁”的身份认证方法.有很多种各不相同的生物特征类型,包括像指纹这种已
17、经过长时间验证和应用的方法。近年来,基于语音识别、步态(即行走中的姿态)识别以及甚至数字狗(气味识别)技术的生物特征技术都获得了不错的发展。理想的生物特征技术应满足以下所有要素:通用性生物特征应该能够适用于现实中的每一个人。实际上,没有哪个生物特征能够应用于所有的人。例如,存在少部分比例的人并不具有可读取的指纹。可分辨性生物特征应该能够具有相当大的实际可区分度。在现实中,我们不可能期望100%的确定性,虽然在理论上,有些方法能够做到较高的区分度,错误率非常低。永久性理想情况下,这些可测量的物理特征应该是永久不变的。在实践中,如果这些特征能够在相当长一段时间内保持稳定就足够了。可采集性这些物理特
18、征应该是容易采集的,并且对认证的主体不会带来任何潜在的伤害。实际上,可采集性往往严重地依赖于主体是否愿意合作。可靠性、鲁棒性以及用户友好性对于实际的生物特征系统来说,这些仅仅是额外的一些现实考虑而已。确有一些生物特征技术在实验室环境中显示出较好的前景,但后来在实践中并未达到类似的功效。18生物特征系统的运行分为两个阶段。首先是注册阶段。在这个阶段中,待认证主体的生物特征信息被收集并输入到一个数据库中。第二个阶段是识别阶段。当将生物特征检测系统用于实践中以确定是否(对于认证问题来说)让用户通过认证,这时就是第二个阶段,即识别的阶段。这个阶段必须做到快速、简单和准确。对于身份鉴别问题,待认证主体不
19、愿意配合的情况倒是很常见。例子:拉斯维加斯的赌场就使用了一些身份鉴别的人脸识别系统,以便在某些已知的作弊者试图进入赌场时能够将其检测出来197.4.1 错误的分类在生物特征识别过程中,有可能发生两种类型的错误。错误接受率:假定Bob冒充是Alice,并且系统错误地将Bob认证为Alice。类似这种错误认证的情况发生的几率就是所谓的错误接受率。错误拒绝率:假设Alice尝试认证她自己,但是系统并没有给予她认证通过。类似这种错误情况的发生率就是所谓的错误拒绝率。对于任何生物特征系统,我们都能够降低其错误接受率,或是降低其错误拒绝率,代价就是牺牲这两者中的另一个。等错误率,就是指在错误接受率和错误拒
20、绝率相同情况下的错误率。也就是说,通过对系统参数进行调整,直到错误接受率和错误拒绝率能够达到一种恰好平衡的水平。对于比较各种不同生物特征系统的性能,这是个非常有用的测量指标。207.4.2 生物特征技术实例1.指纹识别指纹曾在古老的中国用作签名的一种形式。指纹作为身份鉴别用途的第一个现代应用出现在1858年的印度,当时William Hershel男爵使用掌纹和指纹作为在合同上签名的形式。1880年,Henry Faulds博士在Nature上发表了一篇文章,该文章讨论了用于身份鉴别目的的指纹应用。图7-1中显示了Galton的分类系统中不同类型的指纹细节特征的示例。对于前计算机时代的身份鉴别
21、问题,Galton的系统使得我们能够得到较为高效的解决方案。21如今,指纹识别技术很常规地应用于身份鉴别实践,特别是在刑侦实践中。有一点值得注意也很有意思,就是指纹识别中确定匹配的标准差异很大,名目繁多。指纹生物特征识别系统首先要捕获一幅指纹的图像,然后再使用各种图像处理技术来进行图像增强,接下来再识别出各个点位并将其从增强的图像中提取出来。生物特征系统所提取的特征点的比对方式类似于对指纹的人工分析辨识的方式。为了认证的目的,将提取的特征点与所声称的用户的预存信息进行比对。然后,基于一些预先设定的信任等级,系统可确定是否得出统计性的匹配。222.手形识别在手形识别系统中,手的形状要被仔细地测量
22、,包括手和手指的宽度和长度。人的手并不像指纹那样接近于独一无二,但是手形拓扑能够很容易且快速地被测量,同时对于许多的认证应用来说,又有足够的鲁棒性。但是,手形识别可能并不适合用于身份鉴别类应用,因为错误匹配数量可能会比较高。优势:运行很快,在注册阶段只需要花费不到一分钟的时间,在识别阶段仅需要不超过5秒钟时间。因为人手本身的对称性,如果在注册时用某一只手采集信息,在认证阶段将另一只手翻转过来就能够使用。弱点:不能够用于年轻人或老人,还有就是系统的等错误率相对而言比较高。233.虹膜扫描理论上,最适合认证应用的生物特征技术之一就是虹膜扫描。虹膜(眼睛中的有色部分)的生长发育比较混乱,这就意味着较
23、小的变化会导致很大的差异。遗传因素对于虹膜结构影响很小或者几乎是没有影响测量模式贯穿一生都是稳定的。虹膜扫描技术的发展相对而言比较晚。虹膜扫描系统需要复杂精密的设备和软件。首先,要有自动的虹膜扫描器来定位虹膜。然后,要获取一双眼睛的黑白图像。最后,再对得到的图像进行二维的小波变换,其结果就生成了256字节(也就是2048位二进制长的值)的虹膜码。两个虹膜基于虹膜码之间的汉明距离进行比对。令x是在识别阶段根据Alice的虹膜计算得到的虹膜码,而y是存储在扫描器数据库中的Alice的虹膜码。那么x和y的比对要通过计算它们之间的距离d(x,y)来实现,这个距离的定义如下式所示:24对于虹膜扫描,要针
24、对2048位的虹膜码计算d(x,y)。完美的匹配会生成d(x,y)=0,但是实践中我们不能指望出现完美匹配。例子:匹配的例子:将注册阶段获得的Alice的数据与她在扫描阶段获得的数据进行比对。不匹配的例子:将Alice在注册阶段的数据与Bob在扫描阶段获得的数据进行比对虹膜扫描常常被称为是针对认证应用的终极生物特征识别技术。图7-6所示的柱状图,就是基于2300万个比对的数据。25匹配的数据间的虹膜扫描所测量的距离是否有可能发起对虹膜扫描系统的攻击呢?为了预防基于照片的攻击,虹膜系统可以首先对着眼睛闪一下灯,以确认瞳孔收缩之后再继续进行虹膜扫描。267.4.3 生物特征技术的错误率图7-8给出
25、了几种比较流行的生物特征技术各自的等错误率。基于指纹的生物特征识别系统,等错误率可能看起来会高一些。不过,大部分的指纹生物特征系统都使用相对比较便宜的设备,而手形识别系统使用的相对而言都是比较昂贵和精密的设备,所以这类系统倒是有可能在实践中接近其理论能力水平。在理论上,虹膜扫描技术可以达到10-5的等错误率。但是想要获得如此超乎想象的效果,注册阶段的信息提取就必须极其精准。277.4.4 生物特征技术总结生物特征技术相对基于口令的技术来说显然具有许多潜在的优势。特别是,生物特征非常难以伪造,即便不是完全不可能。对于身份认证,也有许多潜在的基于软件的攻击。这些攻击应用到了大部分的身份认证系统,无
26、论这些系统是采用生物特征技术,还是基于口令的方式,或是利用其他的技术手段。虽然被破解的加密密钥或口令可以被撤销或者进行更换,但是目前还不清楚怎样撤销被破解的生物特征。作为口令的替代方案之一,生物特征技术具有非常大的潜力,但是生物特征识别并不能够做到万无一失。287.5 你具有的身份证明智能卡或其他相关的硬件令牌都可以用于身份认证。这种认证方式就是基于“你具有什么”原则。智能卡是一种信用卡大小的设备,其中包含一个小的存储器和计算资源,所以它能够储存加密密钥或者其他的秘密信息,并且还可以在卡里执行一些计算。该读卡器用于从卡里读取存储的密钥,然后该密钥可以用于认证用户。因为使用了密钥,并且密钥的选取
27、是随机的,所以就规避了口令猜测攻击。基于“你具有什么”进行身份认证的例子,包括便携式电脑(或者网卡的MAC地址)、ATM卡以及口令生成器等。口令生成器是很小的设备,其由用户持有并用于登录到系统。假设Alice有一个口令生成器,她想要向Bob认证她自己。Bob发送随机的challenge R值给Alice,然后Alice将其输入到口令生成器,并输入她自己的PIN码。于是口令生成器就生成response,Alice再将其传送给Bob。如果接收到的response是正确的,Bob就可以确信他确实正在和Alice通信,因为只有Alice才应该有该口令生成器得到的结果。297.6 双因素认证 事实上,图
28、7-10所示的口令生成器不仅需要“你具有什么”(即口令生成器),还需要“你知道什么”(即PIN码)。任何身份认证方法,如果需要三种“东西(如前文所述“你知道什么”、“你具有什么”和“你是谁”)”中的其中两种,就被称为是双因素认证。例子1:ATM卡,其中用户必须持有卡并且知道PIN码。例子2:信用卡附带手写签名、生物特征指纹系统配合口令字以及蜂窝电话附加PIN码等多种方式。307.7 单点登录和Web cookie单点登录 当在进行Web浏览时,Alice仅仅认证一次,然后无论她在Internet上再去往哪里,这个认证成功的结果都会一直“跟着”她。也就是说,初始的认证过程需要Alice的参与,但
29、是后续的认证将在各个场景的后台自动进行。Web cookie 当Alice在网上冲浪时,Web站点常常会为Alice的浏览器提供Web cookie。当Alice再去访问一个她已经持有其Web cookie的Web站点时,她的浏览器就会自动地将这个Web cookie传送给Web站点。通过这种方式,Web cookie维护了跨会话的状态信息。因为Web应用是基于HTTP协议的,而该协议是无状态协议,所以Web cookie也用于维护会话之内的状态信息。从某种意义上说,Web cookie可以作为Web站点应用实现单点登录的一种方法。也就是说,Web站点可以基于Alice持有的Web cookie来对她进行认证。317.8 小结本章内容回顾基于口令的认证就属于基于“你知道”的认证方法。基于口令的方式远远不是一种理想的认证方法,但是在可预见的未来这种方式很可能会持续流行,因为使用口令是成本最低的选择。基于“你是谁”的认证方式也就是生物特征技术。生物特征技术的潜在优势能够提供高得多的安全性。但是,生物特征技术成本较高,而且也不是完全没有问题。基于“你具有什么”的认证方法-双因素认证方式,即组合了前述三种方法中的两种的认证方式。单点登录和Web cookie32