




免费预览已结束,剩余14页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Honeywords : Making Password-Cracking Detectable作者:Ari Juels,RSA实验室;Ronald L. Rivest,MIT CSAIL。摘要:我们提出一个提高散列密码的简单方法:为每一个账号关联额外的“honeywords”(伪密码)。一个盗取了散列密码文件并反转了散列函数的攻击者不能区分密码和honeyword。试图使用honeyword登录会触发一个警报。一个辅助的服务器(honeychecker)可以在登录环节识别密码和honeyword,并且当honeyword试图登录时它可以发出警报。关键字:密码、密码散列、密码破解、honeywords、伪密码、登录、认证1. 介绍众所周知,密码是一种较弱的认证机制。用户通常会选择较为简单的密码。一个盗取了密码散列文件的攻击者往往可以通过暴力破解的方式获取到用户的密码p,它的散列值H(p)等于密码散列文件中存放的值,从而攻击者就可以冒充用户登录。Mandiant最近的一个报道阐述了在当前的环境威胁下散列密码破解的重要意义。密码破解是仪器化的,例如,在最近的一个反对纽约时报的网络间谍活动中。在过去的时间里可以看到很多备受关注的用户密码文件的泄露事件。Evernote的5000万用户密码暴露,同时这些用户还是Yahoo, LinkedIn,以及eHarmony等的用户。一种解决当前状况的方法是使密码散列变得更加复杂和耗时。这其实就是“Password Hashing Competition”背后所代表的方法。这个方法是有效的,但是同时它也减慢了合法用户的认证进程,并且我们也不能容易的检测到密码破解。有时系统管理员会设置一些虚假账号(叫做honeypot accounts),一个盗取了用户密码散列文件的攻击者使用这些账号进行登录时便会激发一个警报,系统便会检查到密码破解。由于这些账户并不是真正合法的用户,所以攻击者的试图登录便会被检测到。然而,攻击者可能会区分真实密码和诱捕密码,从而避免被检测到。我们推荐的方法是将诱捕数据扩充到每一个账号(包括合法的用户),通过让每个账户拥有多个可能的密码,但其中只有一个是真正的密码,其他的就被叫做honeywords。一个honeyword的试图登录就会被检测为敌对攻击,同时发出警报。这种方法并不特别深,但是却是非常有效的,因为它使得一个使用通过盗取密码散列文件并暴力破解而获取到的用户密码的每一次登录都面临着被检测到的风险。因此,honeyword提供了一种有效的层次防御。在其他文献中也出现过一些相似的理念。我们所知道的与本论文最相关的一项研究是Bojinov等人的Kamouflage系统。我们认为,honeyword最早是出现那项研究中。另外一个和我们的研究非常相近的是一个叫虚假密码文件的系统设计(honeyfiles),它们监视所有被认为是信号入侵的密码提交。最后,一项由Rao申请的专利描述了对系统每一个账户设计一些叫做“failwords”的诱捕密码,通过这些诱捕密码使得攻击者认为他已经登录成功,但实际上却被检测到了。我们会在本文第8节给出相关工作的概述。总之,我们的期望是通过这篇文章能够鼓励大家更多的使用honeyword。2. 技术描述我们假定一个拥有n个用户u1,u2,un的电脑系统,这里的ui是指第i个用户的用户名。所谓的电脑系统(或者简称为系统)指的是用户提供了正确的用户名和密码之后就能够登录的系统;这就包含了多用户电脑系统,网站,智能手机,应用程序等等。我们用pi来表示用户ui的密码。这个指的是正确的、合法的用户密码;是用户用来登录系统的密码。在当前的实验中,系统使用了一个加密的散列函数H并且存储用户密码的散列值而不是原生的密码。也就是说,系统维护着一个由用户名/密码散列值键值对组成的文件F,也就是(ui,H(pi)),其中i取值1到n。在Unix系统中,这个F文件可能存放在/etc/passwd或者/etc/shadow目录中。因为系统存储密码的散列值而不是原生的密码,所以当攻击者获取到F文件后并不能直接获取到用户密码;他需要反转散列函数从而获得用户真正的密码。散列函数H的计算可以(应该)包含特定系统或者特定用户的一些参数(salts);这些细节在本文不做详细介绍。当一个用户尝试登录系统时,登录操作就会根据用户提供的密码散列后到F文件中去查找。2.1:攻击情景对于密码的攻击情景有很多,大致可以分为以下6项:A 密码散列文件被偷取:一个攻击者通过特定的方法偷取到了密码散列文件,并且通过在线暴力计算的方式获取到一些真实密码。通常攻击者会盗取多个系统上的密码散列文件或者在不同的时期盗取同一系统上的密码散列文件。B 容易猜到的密码:用户所选的密码的实质部分非常简单以至于攻击者通过使用常用的密码登录就能成功的冒充系统真实的用户。Schecter等人建议要求用户选择不常用的密码来解决这个威胁。C 可见的密码:当攻击者可以看到用户密码的登录(如肩窥)或者攻击者在一个监视器上可以看到密码时,用户的密码就会被盗。一个类似于RSA的安全码的实时密码生成器能够有效地防御这种威胁。D 多个系统或服务使用相同的密码:一个用户可能在多个系统中使用相同的密码,以至于这个密码在一个系统上被破解,它同样也在其他系统中被破解。E 从用户处偷取密码:攻击者可能通过终端设备,比如手机或者手提电脑,使用恶意软件或者钓鱼攻击来获取用户的密码。F 密码修改盗用:这种机制会允许用户通过改变密码来恢复其安全性,但在修改密码的过程中,攻击者可以获取到用户密码或者将密码改成自己知道的一个值。我们主要针对第一种攻击情景,也就是说攻击者已经获取到了用户名和密码散列文件的副本,并且他也成功获得salt或者其它用于计算散列值的参数值。在这种情境下,攻击者可以通过暴力破解的方式来找出可能的密码,具体是对每个测试密码进行散列求值直到获取到一个或者多个用户的密码为止。如果密码是系统的唯一验证机制,攻击者便能够在不被检测到的方式下正常的登录系统。在本文中,我们认为攻击者能够通过反转散列文件F得到大部分的密码。我们假定攻击者不能持续的盗用系统密码,不能直接观察或者计算到用户新建的密码和honeywords。(当然,当攻击者试图使用一个破解密码,也就是一个honeyword来首次登录系统时会有被检测到的风险;在那之后,系统检测使用破解密码尝试登录的能力就会下降,如果攻击者有能力修改登录或者密码修改环节以及其检测方式的话)。尽管我们的方法直接适用于第一种攻击情景,我们的一些方法(如take-a-tail方法)在密码强化方面也有有益效果,因此也可以帮助抵制其他几种的攻击。2.2:Honeychecker(honeyword检测器)我们假定这个系统需要包含一个辅助的叫做honeychecker的安全服务器来协助honeywords的使用。我们假定电脑系统较易受到密码散列文件F被盗取的攻击,并且需要假定攻击者同时能够偷取salts和散列参数。因此,可以认为电脑系统中没有一处地方能够安全的存储额外的安全信息来抵制攻击者。Honeychecker就是这样一个用来存储隐私信息的分离的硬电脑系统。我们假定用户在登录系统或者修改密码时电脑系统能够和honeychecker进行交互。我们同时假定这个交互是建立在一个专用线路上或者交互需要加密和验证。Honeychecker需要拥有多种方式来检测各种各样的异常情况。我们同时假定honeychecker在检测到非法操作时能够发送警报信息。这个警报信息可以发送给系统管理员或者电脑系统中的其他部分。根据不同的策略,当一个登录操作进行时honeychecker可以选择是否给予电脑系统回应。当它检测到登录操作存在一定的问题时,它能够向电脑系统发出信号以拒绝登录的继续。另一方面,它也可以只是发出一个叫做“无声的警报”的信号给管理员,并且让登录操作在电脑系统上继续执行。在后一种情况下,我们可能更多的叫它为“登录监控器”而不是honeychecker。我们的honeychecker为每个用户ci维护一个简单的数据值c(i);这个数值是从1到k的较小的整数,其中k是一个整形参数(如k=20)。Honeychecker仅仅只接收两种类型的命令:A Set:i,j 把c(i)设置为j。B Check:i,j 检查c(i)的值是否为j。可能会返回检查的结果给需要的系统,也可能在失败的时候发出警报。关键安全和设计原则。电脑系统和honeychecker共同组成了一个分布式安全的结构。一个分布式系统目的在于当攻击者侵犯了系统或软件时能够保护隐私。把电脑系统的资源分散存储举个例子说,把电脑系统和honeychecker放在分离的管理员域名下或者把软件运行在不同的操作系统中使它作为一个整个系统而变得更加难以被攻破。我们所设计的原则是honeychecker数据库本身是不会允许一个攻击者来冒充一个合法用户。实际上,honeychecker仅仅存储随机选择的整数(每个用户ui的索引c(i))。事实上,我们的一个设计原则是即使honeychecker数据库被盗取也只是相当于把安全水平降低到不使用honeyword和honeychecker之前的水平。这种情况下密码散列文件F的泄露意味着攻击者不会再被honeyword所欺骗;他只需要破解用户真实的密码即可,因为这种情况下他已经知道哪些是真实密码的散列值了。我们同时把honeychecker的接口设计的十分简单,以至于构建一个独立的honeychecker是可以实现的。Honeychecker可能并不需要与电脑系统进行交互。如果我们设置为发送“无声警报”给管理员或者促发类似于我们第2.4节所说的那种防御策略的话,它甚至不需要对用户验证的决定作出干预。另外,honeychecker可以被设置去管理仅仅一小部分的隐私状态。与每一个用户对应的索引值,比如,可以存放在一张表中,这张表是加密的或者需要honeychecker中存储的键值来验证。在第8节中我们会讨论其他用于密码保护的分布式策略也是可行的。分布式加密策略,比如,可以避免电脑系统密码或者密码散列文件的被破译。与这些模式不同的是,honeyword可以通过较小的系统变化以及小开销的计算与交互成功的植入现存的密码系统中。Honeychecker可以成为一种使用标准接口的产品。honeychecker可以服务许多的系统。2.3:方法建立本节将以最简单的方式描述honeyword的工作机制。对每一个用户而言,我们用多个不同的词组成的列表Wi来表示honeyword(又叫潜在密码或者更加简洁的叫做sweetword),其中Wi = (wi,1,wi,2,.,wi,k)。这里的k是一个比较小的整数,比如这里我们推荐的20。虽然k的值可以根据不同的用户而有所不同,比如对某些系统管理员而言可设置k=200,但是为了简单起见,我们假定k是一个固定的系统参数。在特定的环境下,k=2或者k=1000都是可能的或者说是合理的。当然,这些sweetword中的一个值,比如wi,j等于用户ui的真正密码pi。我们用c(i)来表示用户真实密码在Wi中的索引值,所以wi,c(i) =pi。尽管我们把wi,j叫做“潜在密码”,但他们也可以是一些其他的词组;一个潜在的密码可以是一个“潜在的通行码”或者一个“sweetphrase”。正确的密码也被叫做“sugarword”。其他(k-1)个词就被叫做“honeyword”,“chaff”,“decoys”,或者直接是“错误密码”。因此,sweetwords的集合Wi包含一个sugarword(正确的密码)和(k-1)个honeyword(非密码)。我们同样也允许一个sweetword是一个“though nut”一个非常强的密码散列以至于攻击者无法反转散列函数获得其真实的值。我们使用符号来表示一个though nut。一个honeyword或者密码本身,都可能是一个though nut。散列文件F的定义因此就变成了对每个用户而言包含一个扩展的条目,格式如下:(ui,Hi),其中(ui,Hi)是用户的第j个sweetword的散列值,那么Hi =(vi,1,vi,2,.,vi,k)就是这些散列值的列表。F文件现在会随着k值得变大而变大。快速的存储消耗并不会对常规的电脑系统产生问题,尽管k的值取到我们所推荐的20。一些系统还会为每个用户存放十个或者更多的旧密码从而限制用户对旧密码的重用。对于用户而言,她像以前一样只需要记住自己的密码;她不需要知道honeywords的值,甚至不需要知道他们的存在。我们用Gen(k)来表示为每个用户生成长度为k的sweetwords列表的程序,它同时还能产生真实密码在这个honeywords里面的索引c(i),(Wi,c(i) =Gen(k)。这里的Gen应该是随机的并且必须包含和用户的交互(否则用户不能创建或者知道这个密码)。我们可以在用户提供密码给Gen程序时允许附加的参数来作为与用户的交互,因此,Gen(k;pi)确保了pi是Wi中的真实密码;也就是pi =wi,c(i)。索引表c应该用一种安全的方式来维护;在本文的建议中它应该存放在honeychecker中。Salt:我们在之前的讨论中遗漏了对于每个系统或者每个用户而言的slats或者其他的用在散列函数计算中的参数。我们十分提倡对于每个用户salts的使用。我们也推荐wi,j的散列同时也把j作为一个额外的参数。这种不同的对每个sweetword进行加盐的操作使得攻击者猜测到一个密码后不能使用相同的方式猜测到其他用户的密码。2.4:方法登录系统的登录环节需要确定用户提供的密码g是否是用户在本系统的真实密码。如果g不是用户的真实密码,登录环节需要继续判定g是不是一个honeyword。如果一个用户或者可能是攻击者提交了正确的密码,那么登录环节将会像往常一样继续下去。如果一个攻击者输入了用户的honeyword,比如说来自密码散列文件F的暴力破解码,然后便会促发一个适当的方法(根据策略选择的不同而有所不同),比如:A 发起一个警报或者通知系统管理员,B 让登录进程像往常一样进行,C 让登录继续,但是是在一个诱捕系统,D 小心地跟踪登录的源头,E 开启额外的日志记录用户的行为,F 关闭该用户的账号直至用户重新建立一个新的密码(或者与系统管理员交互),G 关闭整个电脑系统并且要求所有用户建立新密码。登录环节怎么决定用户输入的g是否等于密码pi呢(输入的密码等于真实的密码)?如果用户输入的密码散列值没有落在密码散列文件中,那么这个g既不是用户真实的密码,也不是用户的honeyword,所以登录操作被拒绝。否则,登录环节需要进一步确认g到底是用户的密码还是仅仅只是用户的一个honeyword。登录环节能够确定输入密码在sweetword中的序号,但是他不能知道这个序号是否就是真实密码所在的位置,所以单独靠登录环节不能确定用户输入的密码是否为真实密码。用户密码的索引值存放在一个独立的安全honeychecker服务器中。电脑系统发送给honeychecker一个如下格式的信息:Check:i, j,表示:“某人请求用ui来进行登录并且提供了第j个sweetword作为登录密码。请检查j是否等于c(i),并且按照策略采取相应的操作。”Honeychecker判定j是否等于c(i);如果不等于,它会发出一个警报并采取相应措施。Honeychecker可能会返回一个包含是否允许登录的信号的信息给电脑系统。(就像之前提到的,一些策略使得honeychecker并不会向电脑系统返回信息,而是允许登录并且使用特殊的监视设备或者诱捕系统)。即使用户提供的密码g并不在sweetwords的列表中,有时也需要向honeychecker发送Check信息;在这种情况下check信息中的j认定为0。在这种策略中用户的每一个登录尝试都会通知honeychecker,并且能够检测到密码猜测攻击。Check信息也可以被设计成包含一些额外的信息来使得它更加有用,比如可以包含用户登录的IP地址。这本文中对这种策略不做进一步探讨。很多系统会怀疑5次或者更多不成功的登录的账户。在我们的方法中,这个限制很容易就能够达到,如果我们认为攻击者进入sweetword列表算作不成功登录的话:对于一个20个sweetword的列表而言,用户密码没有出现在前5个随机sweetword中的概率是75%。然而,当一个系统监测到由honeywords输入导致的失败尝试而不是任意的非sweetword尝试时,我们也许需要适当降低促发账号冻结或者额外调查的限制。2.5:方法修改密码当用户ui修改密码或者账户初始化时新建密码时,系统需要做:A. 使用Gen(k)程序获得k个sweetword列表Wi,生成它们的散列值集合Hi,并且获得正确密码pi在Wi中的索引位置c(i)。B. 安全的通知honeychecker新的索引值c(i)。C. 更新电脑系统上的密码散列文件F(ui,Hi)。我们强调honeychecker并不知道用户的密码以及honeyword。它所获得的只是正确密码在用户密码散列文件散列值中的位置。为了实现这一方式,电脑系统需要发送给honeychecker这样的信息格式:Set:i, j;表示:“用户ui修改了或者初始化了她的密码;新的索引值c(i)现在等于j”。(这个信息理所当然应该在电脑系统中被认证后才能发送给honeychecker)。3. 安全定义我们通过一个用算法或者思维测验的方式模拟攻击者能力的对抗性游戏来定义honeyword生成算法Gen的安全性。为简单起见,我们考虑一个honeyword生成机制Gen(ki;pi),其中pi为用户ui的密码。(这种定义安全的方式也适用其他形式的Gen程序)游戏按照以下步骤进行:A 从一个满足特定密码组成策略的概率分布集合中选择一个密码,再根据该密码调用Gen(k,pi)程序。Gen(k,pi)程序的输出是多个sweetwords的列表以及真实密码在这个列表中的索引位置。B 将Wi告知攻击者,这里我们排除Gen(k,pi)程序随机生成的rough nuts;这些honeywords在用户看来只是一个特定的符号并且不是潜在的honeyword。C 攻击者必须在“pass”(拒绝继续猜测下去)和随机提交一个整数作为对c(i)的猜测两种操作中选择一个。游戏的结果只有以下三种可能:A. 攻击者赢得了比赛:他猜到了正确的c(i)。B. 攻击者被检测到:攻击者猜测的结果是一个honeyword。C. 攻击者pass:攻击者放弃本轮尝试。Flatness:假定攻击者没有pass游戏,则用z表示攻击者期望赢得比赛的可能性。这个可能性受到用户选择的密码pi,sweetword生成程序Gen(k,pi)以及攻击者每次用来猜测的随机值的选取等多个因素的影响。显然z=1/k,因为即使攻击者随机猜测答案,也最少有1/k的可能性会赢。如果所有的攻击者赢得比赛的最大可能性z等于的话,我们就称这个honeyword生成程序是-flat的。如果生成程序是足够flat的(比如1/k-flat),那么我们称之为“完全flat”(对于一个给定的分布集U)。如果它是-flat并且的值并不比1/k大很多的话,我们称之为“基本flat”。我们推荐的k的值为20,这意味着如果我们使用的生成程序Gen是完美flat的话,那么一个获取了用户密码散列文件F并且成功反转散列函数从而得到所有的20个sweetwords的攻击者最多拥有5%的可能找到正确的密码。在这个理想的状态下,=1/20。如果一个生成程序是-flat的,那么一个攻击者就会最少有(1- )的可能性会获取到一个honeyword,从而会被检测到并且系统发出警报。所以一个完美flat的生成程序确保了攻击者最少有(k 1)/ k的可能性被检测到。在某些情况下,即使很小的捕获攻击者的概率,如1/4(25%的可能性检测到sweetword猜测),对于盗取了密码散列文件的攻击者而言都会有较为有效的检测结果并且可能阻止一个攻击者对系统的攻击。所以,如果Gen设计得好,即使它并不是很flat也同样有效。4. Honeyword生成本节提出多个flat(或者大致flat)的honeywords生成程序Gen,用来生成sweetwords列表Wi并且确定实际密码在Wi中的序号c(i)。这些程序根据用户接口(UI)是否会对用户密码有所改变而分成两类(登录进程一直都是不变的),分别如下:A. 带有传统UI的程序,这种UI不会改变用户密码。一般来说这是更加重要的方式。我们提出两种常规UI程序:chaffingby-tweaking(包含chaffing-by-tail-tweaking和chaffing-by-tweaking-digits两种),以及chaffing-with-a-password-model方法。B. 带有修改的UI程序,UI允许被修改以获得更好的密码/honeyword生成。我们提出一个叫做take-a-tail的修改UI方法。在take-a-tail中,UI改变的方式非常简单:用户的密码会被修改成用户提供的密码加上系统随机选择的3位数的整数值。否则,take-a-tail将和chaffing-by-tail-tweaking一样。我们将在4.1节中解释传统UI的场景和关联的方法,并且在4.2节中介绍修改UI的场景和take-a-tail方法。还有一些其他的方法是可用的,并且我们认为通过了解更多攻击者的知识以及用户密码选择的行为能够设计出更加有效的方法,这将是一个有趣的事。4.1:传统UI密码修改使用传统UI的方法,密码更改程序会向用户要求新密码(也许让她重打一遍以确认)。用户界面不会告诉用户对honeywords的使用,也不与她互动从而影响她的密码选择。传统UI方法的一个好的方面是,人们可以改变honeyword生成过程而无需通知任何人或更改UI的。我们开始于用户ui提供的密码pi。然后,该系统生成一组k-1个honeywords“相似于”模式的密码pi,或者至少似是而非的合法口令,这样,对手将难以在确定pi在所有sweetwords用户界面的列表中的位置。Chaffing:密码pi被拾取,然后在honeyword生成程序Gen(K; Pi)或“chaff过程“产生一组k-1个附加的不同的honeywords(chaff)。注意,honeywords可取决于密码pi。密码和honeywords被按照随机顺序放置到一个列表Wi中。C(i)的值设定等于密码在该列表中的索引。Chaff过程的成功取决于chaff生成器的质量;如果一个攻击者可以从honeywords中容易地区分出密码则说明这个方法是失败的。我们提出了两种基本方法用来chaff(还有一个方法用来优化chaff)。他们在一定程度上是有点启发式的;chaffing方法一般来说无可置疑是一种flat的honeywords生成程序。如果用户以一种可辨识的方式选择了她的密码则更是如此。我们注意到(但不进一步讨论)一个明显的事实,如果在语法或密码选择上有限制的话,honeywords也应该满足遵循的限制。4.1.1:Chaffing by tweaking我们的第一个方法是“调整”密码的选中的字符位置获得honeywords。令t表示调整所需的位置数量(比如t等于2或者3)。例如,chaffing-by-tail-tweaking方法选择密码的最后t个位置来变换。Honeywords随后就会被通过变换选定的t个位置的字符来获得:在一个选定的位置上的每个字符被替换为相同类型的一个随机选择的字符:数字就用数字来替代,字母就用字母来替代,特殊字符(出字母和数字之外的其他字符)使用特殊字符来替代。例如,如果用户提供的密码是“BG+7y45”,那么Wi列表可能是(对于tail-tweaking方法,参数t=3并且k=4):BG+7q03, BG+7m55, BG+7y45, BG+7o92。我们把密码选中的尾部成为“sugar”,同时把honeyword的尾部称为“honey”。其它的调整方案也可以使用,如选择最后一个数字位置和最后特殊字符的位置等。“chaffing-by-tweaking-digits”方法就是选择最后的t个数字的位置。(如果在密码中没有t个数字位,那么非数字位也同样可以被选择,作为替代)。下面有一个t=2的chaffing-by-tweaking-digits方法获得的honeywords:42*flavors, 57*flavors, 18*flavors。Chaffing-by-tweaking-digits是一种典型的从用户旧密码获取用户新密码的方法;这些详情可以看Zhang的论文密码变换的扩展讨论以及当用户改变他们的密码时所遵循的一个模型。要进行调整的位置应是选择密码中满足某些字符类型的位置,而不是密码中的特定字符,否则密码可能很容易被认定为在给定列表Wi 中的唯一的sweetword。对于chaffing- by- tail- tweaking方法而言,我们认为每一个wij都是由头部hij再加上t个字符长度的尾部tij组成。例如,“Hungry3741”就是由头部“Hungry3”和尾部“741”组成。t的值不应该所有用户都一样。头部和尾部之间不需要任何分隔符;密码解析成密码头部和密码尾部不必是显而易见的。如果用户选择了她密码的最后三个字符随机,那么尾部的调整是不可能进行反向工程的,攻击者不能从它的扭捏版本获得原生密码,因为所有的尾部是随机的。然而,攻击者可能能够从honeywords获知真实密码,比如在下面的列表中,哪一个最可能是用户密码?57*flavors, 57*flavrbn, 57*flavctz。下一节的take-a-tail的方法修复了不良选择的密码尾部问题,要求新密码必须具有系统选择的随机密码尾部。Chaffing-by-tweaking方法作为一个传统UI的honeyword生成方法表现的非常好:它不要求用户按照任何密码的语法要求选择密码,而不是规定密码中的多个字符。我们现在给变换另一个视图来观察。让T(P)表示通过调整p的选定字符位置获得的sweetwords集合。显然p是在T(P)中,由于随机选择的字符是可以与原来相同的p总是在T(P)。注意T()应该具有这样的特点tweaks并不能改变密码的类别:对所有pT(p),T(p)=T(p)。类T(P)形成的集合中的所有密码为不相交的“类似”密码分区的集合。然后,我们定义Gen程序开始于单元素集合P,并多次添加从T(P)中随机选择的元素,直到k个不同的元素被选中(当然,T(P)必须包含至少k个元素)。列表W是随机安排顺序的一组元素,c(i)为p在这个列表中的位置。一个调整是完全平坦的,当T(P)中每个词都可能被用户选择作为密码也就是在被选择作为密码的情况下,U(P *)对每个在T(P)中的p*而言是恒定的。在实际应用中,用户更加倾向于其中一些字符串(例如,在相关论文中观察到,对于密码中选择一个数字,用户选择1的概率大约达到一半)。这样完美的flat可能是难以实现的,并且它可能会有所帮助地从T(P)朝向那些最有可能被用户选择的honeywords的偏置选择。4.1.2:Chaffing-with-a-password-model我们的第二个方法是使用真实密码的概率模型生成honeywords;这个模型可能是基于数千或数百万的密码的列表加上其他参数总结得到(需要注意的是仅从公布名单L产生honeywords,总的来说并不是个好主意:这样的列表也可能被攻击者获得,他可以使用它来帮助识别honeywords)。不同于以往的chaffing方法,该方法不一定需要用户密码来生成honeywords,它可以产生广泛变化的具有一定强度的honeywords。下面是一个简单生成19 个honeywords列表的模型(详见附录):注意上述列表中存在一个“tough nut”,一个很难的(长度为40字符)密码以至于攻击者无法破解。Weir等人进行演示的一个有趣的密码替代模型是基于概率上下文无关文法的。建模语法:Bojinov等人为chaffing-with-a-password-model提出一个有趣的方法,那就是使用与用户密码相同的语法构建(注意这种方法与上面所说的不同,本方法中honeywords不再依赖用户密码)。在他们的方案中,密码被解析为一序列“符号”,每个都代表一个独特的语法元素,一个词、数字或一组特殊的字符序列。例如,mice3blind这个密码可能被分解成标记序列W4|D1|W5,这意味着一个4个字母的单词,紧接着1位数字和一个5个字母的单词。然后,通过相匹配的令牌,随机选择值来替换令牌进而生成Honeywords。例如W4选择“gold”,D1选择“5”,W5选择“rings”,那么就组成了honeyword“gold5rings”。替代字令牌从作为输入提供给生成算法的字典中选择。更多的细节可以阅读参考文献。4.1.3:Chaffing with “tough nuts”人们也许还想要一些honeywords是比一般的更难破解,甚至他们可能永远不会被对手破解(这些“honeywords”可能就是真实密码;这些“honeywords”的散列值可能超过256位长,按照一个随机的序列排序)。所以,对手不会直接(就像我们一直假设)面临sweetwords完全破解后的列表,而是只有部分破解信息的列表。这些未破解的散列值中可能就存在着用户真实的密码。例如,攻击者获得如下列表的时候应该怎么办呢?有一些“tough nuts”在honeywords中可能给对手更多的理由在他们试图使用一个破解的密码登录之前暂停操作。“tough nuts” 可能表示正确的密码,其真实性对手无法评估。因此,“tough nuts”的存在使得攻击者不能充分评估在登录过程中被发现的可能性,即使攻击者已破解所有其他的sweetwords。为了确保不能暗示攻击者密码本身是否位于 “tough nuts”中,我们设定无论是位置和数量“tough nuts”在honeywords中的位置应该是随机的。4.2:修改的UI密码修改我们现在提出另外一种方法,“take-a-tail”,它采用修改的用户界面来进行密码修改;密码更改用户界面只是标准模式中的一只轻微变种。take-a-tail方法与chaffing-by-tailtweaking方法是相同的,不同之处在于新的密码的尾部 现在由系统随机选择的,并且需要用户输入的新密码。也就是说,密码改变的UI从Enter a new password: 变成了。因此,如果用户提供的密码是“RedEye2”,那么他的新密码就是“RedEye2413”。 这是一个非常简单的UI变化,并且不应该需要任何用户培训。所需的尾巴(在本例中的“413”)是在新近的密码会话中随机生成的。它甚至可以是偶然的,同样也可以是用户旧密码的尾巴。(登录程序通常防止用户试图使用自己的旧密码作为他的新密码;系统在这种情况下可能会产生一个新的、不同的尾巴)。一旦密码被确定后,系统便能使用chaffing-by-tailtweaking以同样的方式产生honeywords。用take-a-tail方法,密码的头部由用户选择,从而增加了记忆性,而密码尾部随机挑选,以确保密码和honeyword产生过程是完全flat的。用户可能会试图反复重置其密码,以获得最佳的尾巴,进而破坏方法的flatness。然而,大多数系统中禁止频繁更改密码(防止用户通过密码重置而绕过旧密码不可重用政策)。4.3:方法的比较我们提出的生成honeywords的方法有不同的优点和缺点。混合的方法将会在第5.5小节进行描述。5. 变体和扩展我们现在考虑产生honeywords和一些实际部署方面是否有一些其他方式。5.1:“随机选取”honeyword生成我们现在介绍一种完美flat的修改的UI程序。在一个较高的水平,产生密码和honeywords的一个好方法是先以一种任意的方式产生k个不同的sweetwords组成的列表(其中包括与用户交互),然后均匀随机地选择这个列表中的一个元素作为新密码;其他的元素就作为honeywords。作为用户参与的一个例子,我们仅仅要求用户提供k个潜在的密码。C(i)的值被设置为用户密码(随机选择)在列表中的位置。例如,用户可能提供以下6个sweetwords,4Tniners、all41&14all、i8apickle、sin(pi/2) 、1,2,3 、AB12:YZ90,并且系统随机的选择一个作为用户的密码(比如选择最后一个,那么c(i)=6)。“随机选择”的方法是完全flat的,无论sweetwords列表是如何生成的,因为给定的程序相当于从1,2,.,k均匀随机地选择c(i),这个随机索引是独立于实际sweetwords的;因此在Wi中没有帮助决定索引c(i)值得信息。它可能是一个坏主意,因为它要求用户记住k个sweetwords。用户需要记得这些honeywords,这不仅对用户而言是繁重的,而且用户很可能输入一个honeyword。相反,“随机选择”的方法可能是更好的,它通过一个算法的密码生成器从而获得k个sweetwords的输出。5.2:拼写安全性我们也希望一个合法用户通过意外输入一个honeyword从而促发报警是一件罕见的事。错别字是此类事故的一个可能的原因,特别是对于tweaking方法。在tail-tweaking方法中,如果分别来自不同的honeyword的尾部是完全不同的,这可能是非常有益的,这样一个打字错误便不会把密码变成honeyword(每个honeyword的尾部也应该彼此完全不同的,但是密码却不能是所有sweetword中最不同的,即不能鹤立鸡群)。人们可以使用一个错误检测码以检测错别字(就像ISBN书码一样)。让q表示比10大的一个素数,比如q=13。考虑以三个数字作为密码尾部的情况,我们让tij来表示wij的尾部。然后我们只需要确保任意两个sweetword之间的尾部差异(tij tij)是q的整数倍即可。这个属性很容易安排,即使(最多)词汇之一是由用户任意选择的。这个属性可以检查任何一个sweetword与其他sweetword在尾部上是否是临近的值。5.3:管理旧密码许多密码系统,尤其是在政府和行业用户系统中,用户的旧密码通常会保存最近10个的散列值。当用户更改她的密码,她是不能重用存储在系统中的这些旧密码的。我们强烈地建议,一个系统不应存放旧密码或他们的哈希值。本文强调哈希值对密码而言经常保护不力;散列函数可以反转一些弱口令,大多数密码都相当薄弱。此外,用户决定改变其密码的可能原因是:她认为它的密码是弱的,或者她在其他几个系统中也使用这个密码。如果系统保存她的旧密码,那么便会把她在其他系统的账户同样置于危险境地。更好的选择是不存储每个用户旧密码,而是针对整个用户群记录以前所使用的全部密码。一个与此列表中的任何密码冲突的新创建密码都应该被拒绝。该列表不应包括明确的散列密码,而应该在一个更紧凑,高效率被辨认的数据结构,例如一个布隆过滤器,那样便不会直接暴漏用户密码。相关提议是由Schechter、Herley和Mitzenmacher提出的,依赖于一个相似的叫做“count-minsketch”的数据结构,允许拒绝一个已经在普遍使用的用户群体内的新建密码。然而,当必须要存储旧密码时,我们建议将它们存储在计算机系统中受保护的模块,或者在一个与计算机系统分离的特殊的服务器中。一个比较弱的替代选择是,为了实现传统的兼容性可能会仍然存储在计算机系统本身。在这种情况下,对于用户的旧密码集合Oi应该被加密,并且在访问时需要提供用户特定的键值。当然,关键键值ki不应该被存储在计算机系统自身中,而是可能被存储在honeychecker中,只有当前密码pi通过用户认证后才会将ki发送到计算机系统。当读取并且更新Oi后,电脑系统必须重新对Oi进行加密并且立刻释放ki。当然,将旧密码和honeywords放在一起存放也是一种选择。5.4:存储优化一些honeyword生成方法,如tweaking和take-a-tail方法,可以被优化以减少其存储消耗直至只比单一密码散列多一点。考虑选取尾部t个数字的tail-tweaking方法。假定T(pi)是一个合理大小的集合例如,当t=2时,T(pi)共有100个元素。假定k=|T(p)|,Wi =T(pi)=wi,1,.,wi,k,Wi按照字典顺序排序。我们随机选择T(Pi)中的一个元素wi,r并且把它的散列值存储在电脑系统中(我们选择这个元素完全随机)。为了验证用户提供的密码g,电脑系统首先计算出T(g)中的每个sweetword的散列值;如果发现其中的一个散列值与电脑系统中存放的一致,便能够确定这个值在序列中的序号j。Honeychecker的操作还是和以前一样:电脑系统发送序号j给honeychecker,并且检查j是否等于c(i)。我们同时也可以处理k|T(pi)|的情况。在这种情况下,我们限制sweetword列表Wi是T(pi)的一个k个元素的子集。假定T(pi)是按照字典顺序排列的。然后我们就可以选择Wi =wi,1,.,wi,k作为存储在计算机系统上的信息(当然T(pi)应该包含正确的密码)。随机的从1,.,k中选取一个数字作为正确密码的索引。此时计算机系统么可以存放这个索引值,以便它能够知道真实密码在T(pi)中的位置。5.5:混合生成方法可以通过将不同的生成方法组合成“混合”模式,这样便可以综合不同honeyword生成策略的好处。作为演示,我们展示了如何结合chaffing-by-tweaking-digits和chaffing-with-a-password-model方法以形成一个混合的传统UI生成模式。我们假设采用密码组成中至少需要一个数字的政策,以使数字变换始终是可实现的。下面就是一种简单的混合模式:A. 根据用户提供的密码使用chaffing-with-a-password-model方法生成一个长度为a的sweetword集合W,其中一个是真实的密码。一些sweetword可能是“tough nuts”。B. 对每个由第一步生成的sweetwords使用chaffing-by-tweaking-digits方法生成b个变换(包含变换前的那个sweetword)。这样我们就获得了一个大小为ab的sweetwords集合W。C. 随机变换W中元素的位置。并且让c(i)表示真实密码在W中的位置。注意第一步和第二步的执行顺序。顺序的不同可能会导致攻击者很容易的从结果集中推测出真实密码。比如,假定a =3,b =4,并且k=12。Wi可能如下所示:一种较为方便的参数值选择时让a = b = k。我们假设在描述混合方案的属性时选择了这种选择。具体点,a = b = 10就是一个可能的选择。为了在这种模式下抵制DoS(拒绝服务)攻击,我们可能忽视T(p)中honeyword的提交,而只是对其他的k b个honeywords的提交促发警报。这样的话,DoS攻击可能就不太容易成功。一个偷取了F文件的攻击者猜测了一个honeyword,他仍然有1 1/a的可能性会被捕获(对于a = b = 10而言,这个概率是90%)。存储优化处理可以使用第5.4节描述的方法,仅仅存储一个散列值。因为混合方法是传统UI的,它能够在特定的条件下获得完美的flatness,并且能够提供对DoS攻击的防御,它是我们推荐的honeyword生成方法。6. 策略选择6.1:密码合格性一些密码是没有资格作为用户密码的,因为它们违反了一个或多个有关资格的政策,比如:A. 密码语法:一个密码可能需要有一个最小长度、字母的最小数目、数字的最小数量,以及特殊字符的最小数目等的限制。首字母也可能有所限制。关于密码语法的详细信息可以阅读参考文献25。Cheswick称这种方法为“eye-of-newt”规则,因为它们似乎拥有神奇的性能而被发布。我们一致认为在今天看来,这样的规则的价值似乎没有它们带来的麻烦多。B. 字典词汇:一个密码不应该是一个字典中的词语,或者是它的简单变体。C. 密码重用:一个密码应该被要求与该用户最后使用的r个密码都不相同,这个r是一个政策性的参数(比如r = 10)。D. 最常见的密码:一个密码可能无法选择,当它出现在普遍使用的500个最常用的密码列表上(防止在线猜测攻击)。E. 流行的密码:如果在整个用户群体中有m或更多的其他用户正在使用这个密码时,这个密码不应该被选择。6.2:故障恢复计算机系统可以设计成具有一个“故障恢复”模式,以便登录环节中honeychecker失败或不可达时仍然可以进行更多或者像往常一样的操作。在故障恢复模式中,honeywords暂时被认为是可以接受的密码;这样就能够避免honeychecker或者honeychecker与计算机系统交互的过程被攻击的DoS攻击。这种情况在密码可猜测力上增加的成本是很小的。临时通信故障可以通过由honeychecker缓冲在计算机系统上的消息以便以后传送到加工处理。6.3:每个用户的策略我们可以根据每一个用户设置相应的策略;这些目前还没有普遍使用:A. 诱捕账号:在文章简介中提到的诱捕账号的使用,是对honeywords的一个有用的补充。这样的账号可以帮助鉴定F文件的泄露以及DoS攻击。只有honeychecker才知道哪些账号是诱捕账号。B. 有选择性的警报:如果有honeyword击中了管理员的账号或者其他较为敏感的账号后促发一个警报是非常有用的,即使可能这只是一次对于DoS攻击的敏感反应。策略不应该(或者可能不应该)对于整个用户群体都是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政审考试题库及答案解析
- 矿山电子高级考试题库及答案
- 征信考试题库及答案
- 商业合作市场调研分析报告合同
- 企业合同管理模板及风险提示
- 2025年新疆农作物制种质量保障合同
- 2025年贵州公需科目之乡村振兴试题(含答案)
- 祁阳历史中考试卷及答案
- 技校政治考试题目及答案
- 唐山单招十类考试题及答案
- 带储热的液态空气储能系统性能的多维度剖析与优化策略
- 水体环境完整版本
- 新北师大版四年级数学上册第二单元(线与角)课后练习题及答案1
- DB1311T 091-2025 旧水泥混凝土路面多锤头碎石化施工技术规范
- 共用检验设备协议书
- 采砂作业合同协议
- 排他协议合同协议
- 经济数学微积分 杨慧卿 第4版 教案 第1-3章 函数、极限与连续;一元函数微积分;一元函数积分学
- 脑卒中护理新进展
- 《2025年CSCO宫颈癌诊疗指南》更新要点解读
- 2024慢性鼻窦炎诊断和治疗指南解读课件
评论
0/150
提交评论