如何安全的存储密码
保护密码最好的的方式就是使用带盐的密码hash(salted password hashing).对密码进行hash操作是一件很简单的事情,但是很多人都犯了错。接下来我希望可以详细的阐述如何恰当的对密码进行hash,以及为什么要这样做。
重要提醒
如果你打算自己写一段代码来进行密码hash,那么赶紧停下吧。这样太容易犯错了。这个提醒适用于每一个人,不要自己写密码的hash算法 !关于保存密码的问题已经有了成熟的方案,那就是使用phpass或者本文提供的源码。
什么是hash
hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hash("hbllo") = 58756879c05c68dfac9866712fad6a93f8146f337a69afe7dd238f3364946366
hash("waltz") = c0e81794384491161f1777c232bc6bd9ec38f616560b120fda8e90f383853542
Hash算法是一种单向的函数。它可以把任意数量的数据转换成固定长度的“指纹”,这个过程是不可逆的。而且只要输入发生改变,哪怕只有一个bit,输出的hash值也会有很大不同。这种特性恰好合适用来用来保存密码。因为我们希望使用一种不可逆的算法来加密保存的密码,同时又需要在用户登陆的时候验证密码是否正确。
在一个使用hash的账号系统中,用户注册和认证的大致流程如下:
1, 用户创建自己的账号
2, 用户密码经过hash操作之后存储在数据库中。没有任何明文的密码存储在服务器的硬盘上。
3, 用户登陆的时候,将用户输入的密码进行hash操作后与数据库里保存的密码hash值进行对比。
4, 如果hash值完全一样,则认为用户输入的密码是正确的。否则就认为用户输入了无效的密码。
5, 每次用户尝试登陆的时候就重复步骤3和步骤4。
在步骤4的时候不要告诉用户是账号还是密码错了。只需要显示一个通用的提示,比如账号或密码不正确就可以了。这样可以防止攻击者枚举有效的用户名。
还需要注意的是用来保护密码的hash函数跟数据结构课上见过的hash函数不完全一样。比如实现hash表的hash函数设计的目的是快速,但是不够安全。只有加密hash函数(cryptographic hash functions)可以用来进行密码的hash。这样的函数有SHA256, SHA512, RipeMD, WHIRLPOOL等。
一个常见的观念就是密码经过hash之后存储就安全了。这显然是不正确的。有很多方式可以快速的从hash恢复明文的密码。还记得那些md5破解网站吧,只需要提交一个hash,不到一秒钟就能知道结果。显然,单纯的对密码进行hash还是远远达不到我们的安全需求。下一部分先讨论一下破解密码hash,获取明文常见的手段。
如何破解hash
字典和暴力破解攻击(Dictionary and Brute Force Attacks)
最常见的破解hash手段就是猜测密码。然后对每一个可能的密码进行hash,对比需要破解的hash和猜测的密码hash值,如果两个值一样,那么之前猜测的密码就是正确的密码明文。猜测密码攻击常用的方式就是字典攻击和暴力攻击。
Dictionary Attack
Trying apple : failed
Trying blueberry : failed
Trying justinbeiber : failed
Trying letmein : failed
Trying s3cr3t : success!
字典攻击是将常用的密码,单词,短语和其他可能用来做密码的字符串放到一个文件中,然后对文件中的每一个词进行hash,将这些hash与需要破解的密码hash比较。这种方式的成功率取决于密码字典的大小以及字典的是否合适。
Brute Force Attack
Trying aaaa : failed
Trying aaab : failed
Trying aaac : failed
Trying acdb : failed
Trying acdc : success!
暴力攻击就是对于给定的密码长度,尝试每一种可能的字符组合。这种方式需要花费大量的计算机时间。但是理论上只要时间足够,最后密码一定能够破解出来。只是如果密码太长,破解花费的时间就会大到无法承受。
目前没有方式可以阻止字典攻击和暴力攻击。只能想办法让它们变的低效。如果你的密码hash系统设计的是安全的,那么破解hash唯一的方式就是进行字典或者暴力攻击了。
查表破解(Lookup Tables)
对于特定的hash类型,如果需要破解大量hash的话,查表是一种非常有效而且快速的方式。它的理念就是预先计算(pre-compute)出密码字典中每一个密码的hash。然后把hash和对应的密码保存在一个表里。一个设计良好的查询表结构,即使存储了数十亿个hash,每秒钟仍然可以查询成百上千个hash。
如果你想感受下查表破解hash的话可以尝试一下在CraskStation上破解下下面的sha256 hash。
c11083b4b0a7743af748c85d343dfee9fbb8b2576c05f3a7f0d632b0926aadfc
08eac03b80adc33dc7d8fbe44b7c7b05d3a2c511166bdb43fcb710b03ba919e7
e4ba5cbd251c98e6cd1c23f126a3b81d8d8328abc95387229850952b3ef9f904
5206b8b8a996cf5320cb12ca91c7b790fba9f030408efe83ebb83548dc3007bd
反向查表破解(Reverse Lookup Tables)
Searching for hash(apple) in users' hash list... : Matches [alice3, 0bob0, charles8]
Searching for hash(blueberry) in users' hash list... : Matches [usr10101, timmy, john91]
Searching for hash(letmein) in users' hash list... : Matches [wilson10, dragonslayerX, joe1984]
Searching for hash(s3cr3t) in users' hash list... : Matches [bruce19, knuth1337, john87]
Searching for hash(z@29hjja) in users' hash list... : No users used this password
这种方式可以让攻击者不预先计算一个查询表的情况下同时对大量hash进行字典和暴力破解攻击。
首先,攻击者会根据获取到的数据库数据制作一个用户名和对应的hash表。然后将常见的字典密码进行hash之后,跟这个表的hash进行对比,就可以知道用哪些用户使用了这个密码。这种攻击方式很有效果,因为通常情况下很多用户都会有使用相同的密码。
彩虹表 (Rainbow Tables)
彩虹表是一种使用空间换取时间的技术。跟查表破解很相似。只是它牺牲了一些破解时间来达到更小的存储空间的目的。因为彩虹表使用的存储空间更小,所以单位空间就可以存储更多的hash。彩虹表已经能够破解8位长度的任意md5hash。彩虹表具体的原理可以参考
下一章节我们会讨论一种叫做“盐”(salting)的技术。通过这种技术可以让查表和彩虹表的方式无法破解hash。
加盐(Adding Salt)
hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hash("hello" + "QxLUF1bgIAdeQX") = 9e209040c863f84a31e719795b2577523954739fe5ed3b58a75cff2127075ed1
hash("hello" + "bv5PehSMfV11Cd") = d1d3ec2e6f20fd420d50e2642992841d8338a314b8ea157c9e18477aaef226ab
hash("hello" + "YYLmfY6IehjZMQ") = a49670c3c18b9e079b9cfaf51634f563dc8ae3070db2c4a8544305df1b60f007
查表和彩虹表的方式之所以有效是因为每一个密码的都是通过同样的方式来进行hash的。如果两个用户使用了同样的密码,那么一定他们的密码hash也一定相同。我们可以通过让每一个hash随机化,同一个密码hash两次,得到的不同的hash来避免这种攻击。
具体的操作就是给密码加一个随即的前缀或者后缀,然后再进行hash。这个随即的后缀或者前缀成为“盐”。正如上面给出的例子一样,通过加盐,相同的密码每次hash都是完全不一样的字符串了。检查用户输入的密码是否正确的时候,我们也还需要这个盐,所以盐一般都是跟hash一起保存在数据库里,或者作为hash字符串的一部分。
盐不需要保密,只要盐是随机的话,查表,彩虹表都会失效。因为攻击者无法事先知道盐是什么,也就没有办法预先计算出查询表和彩虹表。如果每个用户都是使用了不同的盐,那么反向查表攻击也没法成功。
下一节,我们会介绍一些盐的常见的错误实现。
错误的方式:短的盐和盐的复用
最常见的错误实现就是一个盐在多个hash中使用或者使用的盐很短。
盐的复用(Salt Reuse)
不管是将盐硬编码在程序里还是随机一次生成的,在每一个密码hash里使用相同的盐会使这种防御方法失效。因为相同的密码hash两次得到的结果还是相同的。攻击者就可以使用反向查表的方式进行字典和暴力攻击。只要在对字典中每一个密码进行hash之前加上这个固定的盐就可以了。如果是流行的程序的使用了硬编码的盐,那么也可能出现针对这种程序的这个盐的查询表和彩虹表,从而实现快速破解hash。
用户每次创建或者修改密码一定要使用一个新的随机的盐
短的盐
如果盐的位数太短的话,攻击者也可以预先制作针对所有可能的盐的查询表。比如,3位ASCII字符的盐,一共有95x95x95 = 857,375种可能性。看起来好像很多。假如每一个盐制作一个1MB的包含常见密码的查询表,857,375个盐才是837GB。现在买个1TB的硬盘都只要几百块而已。
基于同样的理由,千万不要用用户名做为盐。虽然对于每一个用户来说用户名可能是不同的,但是用户名是可预测的,并不是完全随机的。攻击者完全可以用常见的用户名作为盐来制作查询表和彩虹表破解hash。
根据一些经验得出来的规则就是盐的大小要跟hash函数的输出一致。比如,SHA256的输出是256bits(32bytes),盐的长度也应该是32个字节的随机数据。
错误的方式:双重hash和古怪的hash函数
这一节讨论另外一个常见的hash密码的误解:古怪的hash算法组合。人们可能解决的将不同的hash函数组合在一起用可以让数据更安全。但实际上,这种方式带来的效果很微小。反而可能带来一些互通性的问题,甚至有时候会让hash更加的不安全。本文一开始就提到过,永远不要尝试自己写hash算法,要使用专家们设计的标准算法。有些人会觉得通过使用多个hash函数可以降低计算hash的速度,从而增加破解的难度。通过减慢hash计算速度来防御攻击有更好的方法,这个下文会详细介绍。
下面是一些网上找到的古怪的hash函数组合的样例。
md5(sha1(password))
md5(md5(salt) + md5(password))
sha1(sha1(password))
sha1(str_rot13(password + salt))
md5(sha1(md5(md5(password) + sha1(password)) + md5(password)))
不要使用他们!
注意:这部分的内容其实是存在争议的!我收到过大量邮件说组合hash函数是有意义的。因为如果攻击者不知道我们用了哪个函数,就不可能事先计算出彩虹表,并且组合hash函数需要更多的计算时间。
攻击者如果不知道hash算法的话自然是无法破解hash的。但是考虑到Kerckhoffs’s principle,攻击者通常都是能够接触到源码的(尤其是免费软件和开源软件)。通过一些目标系统的密码–hash对应关系来逆向出算法也不是非常困难。
如果你想使用一个标准的”古怪”的hash函数,比如HMAC,是可以的。但是如果你的目的是想减慢hash的计算速度,那么可以读一下后面讨论的慢速hash函数部分。基于上面讨论的因素,最好的做法是使用标准的经过严格测试的hash算法。
hash碰撞(Hash Collisions)
因为hash函数是将任意数量的数据映射成一个固定长度的字符串,所以一定存在不同的输入经过hash之后变成相同的字符串的情况。加密hash函数(Cryptographic hash function)在设计的时候希望使这种碰撞攻击实现起来成本难以置信的高。但时不时的就有密码学家发现快速实现hash碰撞的方法。最近的一个例子就是MD5,它的碰撞攻击已经实现了。
碰撞攻击是找到另外一个跟原密码不一样,但是具有相同hash的字符串。但是,即使在相对弱的hash算法,比如MD5,要实现碰撞攻击也需要大量的算力(computing power),所以在实际使用中偶然出现hash碰撞的情况几乎不太可能。一个使用加盐MD5的密码hash在实际使用中跟使用其他算法比如SHA256一样安全。不过如果可以的话,使用更安全的hash函数,比如SHA256, SHA512, RipeMD, WHIRLPOOL等是更好的选择。
正确的方式:如何恰当的进行hash
这部分会详细讨论如何恰当的进行密码hash。第一个章节是最基础的,这章节的内容是必须的。后面一个章节是阐述如何继续增强安全性,让hash破解变得异常困难。
基础:使用加盐hash
我们已经知道恶意黑客可以通过查表和彩虹表的方式快速的获得hash对应的明文密码,我们也知道了通过使用随机的盐可以解决这个问题。但是我们怎么生成盐,怎么在hash的过程中使用盐呢?
盐要使用密码学上可靠安全的伪随机数生成器(Cryptographically Secure Pseudo-Random Number Generator (CSPRNG))来产生。CSPRNG跟普通的伪随机数生成器比如C语言中的rand(),有很大不同。正如它的名字说明的那样,CSPRNG提供一个高标准的随机数,是完全无法预测的。我们不希望我们的盐能够被预测到,所以一定要使用CSPRNG。
怎么记住各种密码
互联网时代,成功人士银行卡多、网站账户多、邮箱密码多……几乎干什么事都离不开用户名和密码。把它们都设的一个样固然方便记忆,但也为安全带来隐患。所以个人的密码策略就显的尤为重要。接下来就说说怎样设计自己的密码。
1、帐号分级
这个已经众所周知了,不同重要程度的帐号应该使用不同级别的密码。例如我有一些不重要的网站的帐号,这些账户就算被盗也不会对我产生多大的影响,所以即使我把密码设置成“123abc”也没什么要紧。而且使用不同等级的密码可以防止重要的帐号被那些被盗帐号牵连。所以我建议大家首先对自己所有的帐号进行重要程度的评估,例如网络推广帐号可以列为不重要级别,一些包含个人信息的列为普通级别,涉及到资金的例如支付宝、网银列为重要级别,特别注意自己的安全邮箱,因为现在基本都是通过邮箱来重置密码,一旦邮箱被盗后果很严重。
2、使用不同的密码
这也成为共识了。由于我们第一步已经对自己的帐号进行评估了,所以我们可以对不同重要程度的帐号使用不同等级的密码。例如不重要的帐号我们可以使用简单的同一个密码(注意这仅限于那些帐号真的不重要),对于普通级别的帐号,我们就得花一些心思了,密码起码要8位及以上的,而且不能多账户使用同一个密码。而对于那些重要级别的账户,已经不能单单靠一个密码来保护了,最好额外使用其他的一些验证方式,例如安全证书、手机验证码、动态口令卡等等。
3、设定独有的密码
由于上面的两点已经说明了对于那些比较重要的帐号必须使用不同的密码,但是单凭自己的记忆力你能记住那几十个不同的密码吗?所以那些密码必须要符合一种算法,这样就算自己一时忘记了,也可以通过算法再计算出来。算法的话可以自己设计,也可以直接用别人的。
先说自己设计算法。我们可以用一个基本密码加特征码的方式来生成独一无二的密码。比如你可以使用“90blog”这个基本密码,然后根据不同的帐号添加不同的特征码,例如QQ号你可以使用腾讯在香港股市的股票代码“0700”,这样就产生了一个很特别的密码“90blog0700”,而谷歌在纳斯达克的股票代码是“GOOG”,那你的谷歌账户就可以使用“90blogGOOG”这个密码。如果你觉得这些密码还是有可能被攻克的话,我们可以再改良一下,比如我们可以把26个英文字母与0-25这26个数对应起来,把最后一位的数字变成字母,而字母变成数字。那QQ密码就变成了“90blog070a”,而谷歌账户的密码则变成了“90blogGOO6”,这样就算黑客盗取了你一个账户,他也比较困难倒推出你的加密算法。当然这个算法是我刚才花了几分钟想的,你也可以花一些时间来设计你自己的算法,比如可以对照元素周期表什么的。
接下来说说使用别人设计好的加密算法。比较出名的有KeePass,这个我没用过,大家可以自行搜索相应文章。还有的就是花密,花密的原理也是用一个记忆用密码和一个区分不同网站的特征码,通过一系列的计算最后得到一个16位MD5
hash,而且这个hash也不是标准MD5,可以防止MD5破解,避免攻克。而且花密有网页版,直接保存到自己电脑上无需联网就可以使用,而且用的是JS脚本加密,安全性还是很不错的。
4、其他保护密码的方式
定期更换密码,这个不用多说了,不可能一个密码用一辈子的,说不定哪天某个网站就被黑客拖库了,经常改密码是必须的。还有就是安装杀毒软件啊,不打开来路不明的网站啊,防止被钓鱼(千万不要相信QQ上的那个网站信任的图标,用这个钓鱼的不知道有多少),不在黑网吧登录帐号等等。
5、把密码藏在潜意识当中
你有没有想过,如果有一天一群歹徒为了获得数据而把你绑起来,逼你说出银行密码?这种恐惧不是完全没道理。斯坦福大学和西北大学的科学家们研究了一种新技术,通过这种技术你可能就不会担心忘记密码的问题了。
这一技术基于所谓的“程序记忆”,这种东西储存在你的大脑里,而你访问时是潜意识的。比如,你骑车或者弹吉他的时候是没有回忆使用方法的。这些记忆实际上存储在你大脑里很深的部位,负责处理动机控制和习惯形成。这与清晰记忆相对,它们存储在大脑前额叶。不过,如果有需要的话,你可以训练自己使用程序记忆。
使用程序记忆来保存不能被黑客窃取的密码只需要一点点工夫。斯坦福和西北大学的科学家设计了一种看起来像“吉他英雄”的游戏,或多或少地能训练你的大脑记住特定的敲击键盘的方式。经过一段时间,输入长密码就被存储成了肌肉记忆,几周后当参与者被再次要求参与游戏的时候,他们输入这一序列的准确性变得更好。你只需要一样东西:一台计算机,它需要能通过速度和准确性区分一个人是无意识地输入密码还是从来没看过密码。
也就是说,这还不能完全取代你的Facebook密码——至少不是现在。这比我们现在使用的直白的密码要多耗费一些时间,但是更安全。
如果有人揍你一顿想得到密码,他们可能完全没有收获,因为你根本不知道密码是什么,但是你能感觉到密码是什么。
如何安全保存密码
过去一段时间来,众多的网站遭遇用户密码数据库泄露事件,这甚至包括顶级的互联网企业–NASDQ上市的商务社交网络Linkedin,国内诸如CSDN一类的就更多了。
层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃。
那么在选择密码存储方案时,容易掉入哪些陷阱,以及如何避免这些陷阱?我们将在实践中的一些心得体会记录于此,与大家分享。
菜鸟方案:
直接存储用户密码的明文或者将密码加密存储。
曾经有一次我在某知名网站重置密码,结果邮件中居然直接包含以前设置过的密码。我和客服咨询为什么直接将密码发送给用户,客服答曰:“减少用户步骤,用户体验更好”;再问“管理员是否可以直接获知我的密码”, 客服振振有词:“我们用XXX算法加密过的,不会有问题的”。 殊不知,密码加密后一定能被解密获得原始密码,因此,该网站一旦数据库泄露,所有用户的密码本身就大白于天下。
以后看到这类网站,大家最好都绕道而走,因为一家“暴库”,全部遭殃。
入门方案:
将明文密码做单向哈希后存储。
单向哈希算法有一个特性,无法通过哈希后的摘要(digest)恢复原始数据,这也是“单向”二字的来源,这一点和所有的加密算法都不同。常用的单向哈希算法包括SHA-256,SHA-1,MD5等。例如,对密码“passwordhunter”进行SHA-256哈希后的摘要(digest)如下:
“bbed833d2c7805c4bf039b140bec7e7452125a04efa9e0b296395a9b95c2d44c”
可能是“单向”二字有误导性,也可能是上面那串数字唬人,不少人误以为这种方式很可靠, 其实不然。
单向哈希有两个特性:
1)从同一个密码进行单向哈希,得到的总是唯一确定的摘要
2)计算速度快。随着技术进步,尤其是显卡在高性能计算中的普及,一秒钟能够完成数十亿次单向哈希计算
结合上面两个特点,考虑到多数人所使用的密码为常见的组合,攻击者可以将所有密码的常见组合进行单向哈希,得到一个摘要组合,然后与数据库中的摘要进行比对即可获得对应的密码。这个摘要组合也被称为rainbow table。
更糟糕的是,一个攻击者只要建立上述的rainbow table,可以匹配所有的密码数据库。仍然等同于一家“暴库”,全部遭殃。以后要是有某家厂商宣布“我们的密码都是哈希后存储的,绝对安全”,大家对这个行为要特别警惕并表示不屑。有兴趣的朋友可以搜索下,看看哪家厂商躺着中枪了。
进阶方案:
将明文密码混入“随机因素”,然后进行单向哈希后存储,也就是所谓的“Salted Hash”。
这个方式相比上面的方案,最大的好处是针对每一个数据库中的密码,都需要建立一个完整的rainbow table进行匹配。 因为两个同样使用“passwordhunter”作为密码的账户,在数据库中存储的摘要完全不同。
10多年以前,因为计算和内存大小的限制,这个方案还是足够安全的,因为攻击者没有足够的资源建立这么多的rainbow table。 但是,在今日,因为显卡的恐怖的并行计算能力,这种攻击已经完全可行。
专家方案:
故意增加密码计算所需耗费的资源和时间,使得任何人都不可获得足够的资源建立所需的rainbow table。
这类方案有一个特点,算法中都有个因子,用于指明计算密码摘要所需要的资源和时间,也就是计算强度。计算强度越大,攻击者建立rainbow table越困难,以至于不可继续。
这类方案的常用算法有三种:
1)PBKDF2(Password-Based Key Derivation Function)
PBKDF2简单而言就是将salted hash进行多次重复计算,这个次数是可选择的。如果计算一次所需要的时间是1微秒,那么计算1百万次就需要1秒钟。假如攻击一个密码所需的rainbow table有1千万条,建立所对应的rainbow table所需要的时间就是115天。这个代价足以让大部分的攻击者忘而生畏。
美国政府机构已经将这个方法标准化,并且用于一些政府和军方的系统。 这个方案最大的优点是标准化,实现容易同时采用了久经考验的SHA算法。
2) bcrypt
bcrypt是专门为密码存储而设计的算法,基于Blowfish加密算法变形而来,由Niels Provos和David Mazières发表于1999年的USENIX。
bcrypt最大的好处是有一个参数(work factor),可用于调整计算强度,而且work factor是包括在输出的摘要中的。随着攻击者计算能力的提高,使用者可以逐步增大work factor,而且不会影响已有用户的登陆。
bcrypt经过了很多安全专家的仔细分析,使用在以安全著称的OpenBSD中,一般认为它比PBKDF2更能承受随着计算能力加强而带来的风险。bcrypt也有广泛的函数库支持,因此我们建议使用这种方式存储密码。
3) scrypt
scrypt是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的。
和上述两种方案不同,scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。但是,scrypt在算法层面只要没有破绽,它的安全性应该高于PBKDF2和bcrypt。
来源:坚果云投稿,坚果云是一款类似Dropbox的云存储服务,可以自动同步、备份文件。
黑客是怎么给自己家电脑设密码的?
不要靠字典中的单词:如果你的密码可以在单词书中找到,那就和没有一样。黑客们经常借助词典以及词汇的变体测试密码。如果你不属于这一类,他们通常就会放弃。
一个密码绝对不要使用两次:人们喜欢在不同的网站使用同一密码,这可让黑客有了可乘之机。如果你的LinkedIn账户遭泄露,可能没什么损失;但他们会利用该密码尝试你的电子邮箱、银行账户等一切存储资产及重要个人数据的地方。
设置密码短语。密码越长,破解的时间也越长。如果不想让黑客在24小时内能破解你的密码,密码长度应该超过14个字符。因为长密码难于记忆,可考虑用喜欢的电影台词、歌词或一首诗的首字母拼接在一起。
胡乱敲击键盘:对于敏感的账户,随机乱敲键盘,并间或敲击Shift和Alt键,然后将结果复制到一个文本,存入一个有密码保护的U盘。
安全存储你的密码。不要将密码放在收件箱或桌面。如果恶意软件感染电脑,你就完蛋了。将密码文件存入加密U盘,使用帐户时,他把这些密码复制粘贴过去。即便黑客利用键盘记录软件,同样无法捕捉到他的密码。科克先生则把密码提示保存一张纸上,把敏感的信息和互联网彻底隔离。
不要依赖密码管理器。密码保护软件可使用户将所有用户名和密码存储在同一区域。有些程序还能为你创建强大的密码,只要你输入主密码,就能帮你自动登录网站。如LastPass、SplashData和AgileBits等等。即使加密后,密码仍然留在计算机里。如果电脑遭到盗窃,等于丢失所有密码。而且密码管理器不一定靠谱。
安全问题最好答非所问。网站的验证问题经常问道“你最喜欢什么颜色?”“你在哪所中学就读?”,这些问题的答案局限性太大,很容易在互联网上找到。今年初,一名黑客利用米特·罗姆尼(MittRomney)最喜欢的宠物的名字破解其Hotmail和Dropbox帐户。比较安全的做法是密码提示和问题无关。如果安全问题问出生医院的名称,你的回答可以是最喜欢的歌词。
使用不同的浏览器。不同的网络活动要用不同的浏览器。选择一个浏览器做乱七八糟的事情,如浏览网上论坛、新闻网站、博客等不重要的事情。第二个浏览器用于登录网上银行或收发电子邮件。这样浏览器被攻击后,银行帐户就不一定会泄露。AccuvantLabs去年研究发现,在其所调查的火狐、谷歌Chrome及微软InternetExplorer浏览器中,Chrome最安全。
别乱分享你的信息,不要经常利用真实的E-mail地址注册网上帐户。很多“一次性”e-mail地址是最佳选择,如10minutemail.com提供的地址,用户注册、确认在线账户后,这些电子邮件地址会自我销毁。
帐号、密码保存在哪里最安全?
咱俩的希望太相似了,都希望自己有一个网页可以保存自己全部的密码,而且绝对安全!这样在任何电脑里都可以打开查阅,即方便又安全。我已经研究了很长时间了。我是这样保存的:用提示语的方式将所有的密码分别保存在两个QQ的记事本里。所谓提示语的方式就是指,在设置密码时,为了便于记忆,用一句话的声母做密码的一部分,这句话就是你的密码的提示语。这样做主要目的是防止QQ管理员和看你的记事本的朋友知道你的密码。这样就实现了“任何电脑里都可以打开查阅,即方便又安全”。当其中一个QQ被盗,马上再申请一个QQ,并把密码再存放在新的QQ记事本里。只要两个QQ不同时被盗,你的密码就永远不会丢失。顺便再提醒一下:为了防止别人看你的记事本,你可以为记事本设置密码,其实和QQ密码一样就行。用上述方法,只要记住QQ一个密码就可以了。
gGOO6”,这样就算黑客盗取了你一个账户,他也比较困难倒推出你的加密算法。当然这个算法是我刚才花了几分钟想的,你也可以花一些时间来设计你自己的算法,比如可以对照元素周期表什么的。接下来说说使用别人设计好的加密算法。比较出名的有KeePass,这个我没用过,大家可以自行搜索相应文章。还有的就是花
密码这也成为共识了。由于我们第一步已经对自己的帐号进行评估了,所以我们可以对不同重要程度的帐号使用不同等级的密码。例如不重要的帐号我们可以使用简单的同一个密码(注意这仅限于那些帐号真的不重要),对于普通级别的帐号,我们就得花一些心思了,
服务器的硬盘上。 3, 用户登陆的时候,将用户输入的密码进行hash操作后与数据库里保存的密码hash值进行对比。 4, 如果hash值完全一样,则认为用户输入的密码是正确的。否则就认为用户输入了无效的密码。 5, 每次用户尝试登陆的时候就重复步骤3和步骤4。在步骤4的时候不要告诉用户
.Trying acdb : failedTrying acdc : success!暴力攻击就是对于给定的密码长度,尝试每一种可能的字符组合。这种方式需要花费大量的计算机时间。但是理论上只要
离不开用户名和密码。把它们都设的一个样固然方便记忆,但也为安全带来隐患。所以个人的密码策略就显的尤为重要。接下来就说说怎样设计自己的密码。1、帐号分级这个已经众所周知了,不同重要程度的帐号应该使用不同级别的密码。例如我有一些不重要的网站的帐号,这些账户就算被盗也不会对我产生多大的影响,所以即