云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云服务器_魔道祖师番外百度云_免费领

小七 141 0

开发人员怎么会把密码安全性搞得如此错误

无论是在我们的现实生活中,还是在网络上,我们都需要证明自己——我们需要确认自己是谁。这可以通过以下三种方式实现:一些你知道的事情你有的东西你就是这样密码就是你所知道的东西的一个例子;它们是在1961年为麻省理工学院的一台分时计算机的计算机认证而引入的。不久之后,一位博士研究人员突破了这个系统(只需下载一份未加密密码的列表),并利用计算机上分配给其他人的时间。随着时间的推移,开发人员继续不安全地存储密码,用户也继续设置密码。尽管如此,还没有一个可行的替代方案来实现密码安全。到目前为止,还没有一个系统能够保留密码的所有优点,因为研究人员很少考虑现实世界的限制[1]。例如,当使用指纹进行身份验证时,工程师常常忘记有相当大比例的人没有可用的指纹或硬件升级成本。破解密码在20世纪70年代,人们开始考虑如何更好地存储密码,加密哈希开始出现。加密哈希的工作原理类似于陷门;虽然散列密码很容易,但要将"散列"转换回原始输出(或者对于理想的哈希算法来说,在计算上很困难)。它们在很多方面都有应用,从加快文件搜索速度到银行的一次性密码生成器。理想情况下,密码应该使用专门的哈希函数,如Argon2、BCrypt或PBKDF2,它们经过修改以防止彩虹表攻击。如果使用SHA-1哈希算法散列密码p4$$w0rd,那么输出将是6c067b3288c1b5c791afa04e12fb013ed2e84d10。每次运行算法时,输出都是相同的。因此,攻击者能够创建包含常见密码哈希值的彩虹表,然后使用此信息来破坏密码哈希值(密码和哈希值列在彩虹表中)。像BCrypt这样的算法本质上是在使用随机字符串散列密码之前对密码进行盐处理。此随机字符串与密码哈希一起存储,用于通过使输出唯一,使密码更难破解。哈希过程重复多次(由难度变量定义),每次将随机盐添加到哈希的输出中,然后重新运行哈希计算。例如,BCrypt散列$2a$10$n9qo8uloickkgx2zmrzomyeijzagcfl7p92ldgxad68ljzdl17lwy以$2a$10$开头,这表示使用的算法是BCrypt,并包含N9qo8uLOickgx2ZMRZoMye的随机盐和生成的ijzagcfl7p92ldgxad68ljzdl17lwy。存储salt允许在输入已知时以相同的方式重新生成密码哈希。不幸的是,加盐已经不够了,使用现代的gpu(专门反复做同样的任务)可以越来越快地破解密码。当一个站点出现安全漏洞时,用户的密码可以在数据库转储中脱机,以便离线破解。此外,未能对登录请求进行评级或使用验证码的网站可能会受到暴力攻击的挑战。对于给定的用户,攻击者会反复尝试不同的(但通用的)密码,直到他们获得对给定用户帐户的访问权限。有时网站会在几次失败的登录尝试后将用户锁定在外,而攻击的目标可能是在尝试了最常见的一组密码后迅速转移到新帐户。可以尝试使用以下列表(在某些情况下,有很多很多密码)来破坏帐户:业界试图通过要求密码组合规则来解决这一问题;要求用户在设置密码之前遵守复杂的规则(要求最少数量的数字或标点符号)。研究表明,这项工作并没有帮助解决密码重用、弱密码或用户将个人信息放入密码的问题。凭证填充虽然这似乎只是一个糟糕的迹象,网站存储密码弱,凭证填充使这个问题更严重。用户在不同站点之间重复使用密码是很常见的,这意味着来自受损网站的用户名和密码可能被用来破坏更重要的信息,如网上银行网关或政府登录。当一个密码被重用时,只要有一个网站被攻破,就可以访问其他用户有资格访问的网站。这不好-笔尖修改密码要解决这个问题,基本上需要做三件事:良好的用户体验可以改善用户决策改进开发人员教育消除被破坏密码的重复使用我如何保护自己(或我的用户)?在讨论我们正在做的事情之前,我想简单地谈谈你现在能做些什么来保护自己。对于大多数用户来说,有三个步骤可以立即帮助自己。使用密码管理器(如1Password或LastPass)为每个站点设置随机、唯一的密码。此外,尽可能启用双因素身份验证;除了您知道的密码外,这将使用您拥有的东西来验证您。这意味着,除了你的密码,你必须输入一个短时间的密码,从一个设备,如你的手机,才能登录到任何网站。世界上许多最流行的社交媒体、银行和购物网站都支持双因素身份验证。你可以在turnon2的热门网站上找到如何启用它fa.com网站. 如果您是开发人员,您应该努力确保您支持双因素身份验证。为您的密码管理器设置一个安全的可记住的密码;是的,为它启用双因素身份验证(并确保备份代码的安全)。你可以在我的博客文章:简单网络安全提示中找到其他安全提示(包括如何创建安全主密码的提示)。开发人员应该考虑废除不好的实践组合规则(并尽可能简化它们)。密码过期策略弊大于利,所以要设法废除它们。有关更多信息,请参阅英国国家网络安全中心的博客文章:强制定期密码过期的问题。最后,特洛伊·亨特(Troy Hunt)有一篇关于用户和开发人员密码的优秀博客文章:密码进化:现代认证指南改进开发人员教育开发人员应该在他们工作的组织中建立一种安全文化;试着讨论安全性,讨论挑战恶意登录请求的好处,以及简单地讨论密码哈希。如果您正在处理一个处理身份验证的开源项目,请公开简单的密码哈希API—例如,现代PHP版本中的password_hash、password_uneeds_2;rehash和password_verify函数。消除密码重复使用我们知道,复杂的密码组合规则在很大程度上是无效的,最近的指导也紧随其后。一个更好的替代组合规则的方法是阻止用户使用已知已被破坏的密码注册。根据最近的NIST指导,在存储或更新密码时,要求确保密码不包含常用、预期或泄露的值[2]。这说起来容易做起来难,特洛伊·亨特的Pwned密码数据库的最新版本包含超过5亿个密码(超过30gb的未压缩)。虽然开发人员可以使用API服务来检查密码是否被重用,但这需要发送原始密码,或者以未添加哈希的形式发送密码。当多个服务处理一个业务中的身份验证,并且每个服务都必须存储大量的密码时,这一问题尤其严重。这是我最近开始研究的一个问题;作为我们对特洛伊·亨特密码数据库的贡献的一部分,我设计了一个范围搜索API,允许开发人员检查密码是否被重用,而不需要共享密码(即使是散列格式),而只需要发送所使用的加密哈希的一小段。你可以在这篇文章中找到更多关于这个贡献的信息:用k-匿名验证泄露的密码。Pwned密码的第2版现在已经发布了——你可以在特洛伊·亨特的博客文章"我刚刚发布了Pwned密码,版本2"上找到更多关于它如何工作的信息。Bonneau,J.,Herley,C.,Van Oorschot,P.C.和Stajano,F.,2012年5月。寻找替换密码:一个比较评估web认证方案的框架。安全与隐私(SP),2012年IEEE研讨会(第553-567页)。IEEE。↩︎Grassi,P.A.,Fenton,J.L.,Newton,E.M.,Perlner,R.A.,Regenscheid,A.R.,Burr,W.E.,Richer,J.P.,Lefkovitz,N.B.,Danker,J.M.,Choong,Y.-Y.,Greene,K.K.,和Theofanos,M.F.(2017年)。NIST特别出版物800-63B数字身份指南,认证和生命周期管理一章。美国商务部国家标准与技术研究所。↩︎