86 评论

如何防止黑客入侵[3]:如何构造安全的口令/密码

  在上一个帖子,俺介绍了攻击者,是如何攻破口令这道关口的。为了避免口令被轻易地破解,有必要了解构造安全密码的技巧。所以,今天就来介绍此话题。


★不要共用口令/密码


  俺发现有相当多的同学喜欢靠一个口令包打天下。这是相当相当危险的事情。同一个口令,用的场合越多,则泄密的危险越大。而一旦泄露,你的安全防线就会全面崩溃。
  所以,今天要讲的头一个要点,就是绝对不要在所有(大多数)场合,使用同一个口令。


★密码的分级机制


  由于共用口令存在很大的风险,比较稳妥的办法就是——每一个场合仅使用一个密码。但是很多人会抱怨说:这样会很繁琐,增加了很多的麻烦。那如何才能做到既安全,又不太麻烦捏?这就要引入密码的分级机制。
  根据安全圈内一个人所共知的常识:越安全的措施,通常也就越麻烦,成本也高;反之亦然。另外,根据二八原理,非常重要口令毕竟只占少数。所以,就像电影要有分级机制一样,你的密码/口令也要引入分级的概念。通过分级机制,对大多数不太重要的口令,可以采取简化的安全措施;而对少数重要的口令,采取高度安全的措施。
  下面,就来介绍一下,如何对不同的口令,进行分类。

◇第1级:不重要的口令


  所谓不重要的口令,就是说万一被盗了或者忘记了,对你没啥损失。
  比如,俺经常碰到一些土鳖的论坛,只允许注册会员从上面下载附件。因此俺就经常临时注册一个账号,然后登录上去下载东西。这类账号,基本上都属于一次性的(用完即扔),所以重要程度很低。
  对于那些不重要的口令,基本上不用考虑太多安全性的因素。随便设置一个即可。

◇第2级:重要但少用的口令


  对于重要的口令,还要根据其使用的频繁程度,再区别对待。有些口令虽然重要,但是使用的频度很低。由于这类口令很少使用,所以设置得麻烦一些,问题也不大。
  比如俺管理的一些研发的服务器(比如源代码服务器),其重要程度非常高,但是平常基本无需登录。

◇第3级:重要且频繁使用的口令


  最后这类口令,既重要,又经常用。所以,设置这类口令就比较讲究。要同时兼顾安全性和易用性。
  比如自己日常使用的操作系统用户密码,就属于此类。


★一些反面教材——脆弱的密码举例


  说完了分级机制。接下来俺先列举一些反面教材,让大伙儿看看,啥样的口令算是脆弱的?(顺便说一下:2011年底,国内各大网站纷纷被脱库,大量用户口令侧漏。俺专门写了一篇博文,分析国内用户的口令习惯)

◇口令和用户名一样


  无需多说,这种情形的口令,非常脆弱。

◇口令是一串简单数字


  在上一个帖子,俺举了RockYou 网站用户数据被盗的案例。在该网站3200万用户中,最受欢迎的十大弱智口令分别是:
1.  123456
2.  12345
3.  123456789
4.  password
5.  iloveyou
6.  princess
7.  rockyou
8.  1234567
9.  12345678
10. abc123

  从这个 TOP 10 可以看出,有一半是采用连续数字。所以,用连续的数字串(包括顺序和逆序)作密码,也是很愚昧滴。

◇口令太短


  如果你的口令小于6个字符,是很容易被暴力破解滴。毕竟,小于6个字符的所有组合,也没多少个。对专门穷举密码程序来说,那简直是小菜一碟。

◇用英文单词作口令


  用【单个的】英文单词作口令,也很容易被破解。毕竟,常用的英文单词,也就千把个;算上冷僻的,也就几万个。
  在许多年以前,就有黑客专门收集整理了英文单词的列表(称之为“口令字典”)。而且这个字典是根据单词的使用频度进行排序。有了这种密码破解字典,密码破解程序就可以轻易猜解出那些使用单个英文单词的密码。

◇用日期作口令


  有些同学希望用某个具有特殊意义的日期(比如:生日、结婚纪念日...)作为口令。要知道这种伎俩也是不灵滴。因为常见的日期,大都分布在最近100年的范围内。所以充其量,可能的个数也就大约是365*100个。即便把不同的日期表示格式考虑进去,也多不了几倍。在这个数量级上,对于暴力破解工具而言,还是小菜一碟。

◇其它的烂口令


  上述列举的这几种情况,大伙儿一定要避免。另外,你还可以去围观一下某老外整理的一个滥口令大全(这老外真有耐心)。提醒一下:这个列表是根据欧美用户统计的,未必适合中国的国情。


★如何构造复杂的密码?


  前面已经说了:口令太简单,容易被破解。但是太复杂的话,万一自己也忘了,那可就完蛋了。所以,很多网友都纠结于口令到底该复杂到什么程度。俺的经验是:口令要做到对自己简单,对别人复杂。
  下面就来介绍俺在这方面的经验。

◇用多个单词构成词组


  前面提到,如果用【单个】英文单词作密码,容易遭受字典攻击。为了避免字典攻击,可以考虑由2-5个英文单词构成密码。如果你英语不灵光或你比较习惯中文,也可以考虑用2-5个汉字的拼音来构成密码。

  优点
  由于能显著增加密码长度,可以抗击暴力破解。
  缺点
  有可能需要改变你记忆密码的习惯。
  口令中仅包含字母,复杂度不够高。

◇插入特殊字符


  刚才提到了用多个单词或汉字拼音构造密码。为了让密码的强度再好一些,还可以在单词或汉字拼音之间,插入一些特殊字符。
  最常见的是插入空格。当然,你也可以考虑插入其它字符(比如:下划线、减号、斜杠、井号、星号、等)。
  通常进行暴力破解时,为了加快破解进度,都只针对字母和数字进行暴力破解。如果你的口令中含有特殊字符,会大大提高攻击者的难度。

  优点
  由于口令包含较多特殊符号,复杂度大大提高。
  缺点
  很多特殊字符的输入,要依赖于 SHIFT 键辅助。对于键盘指法不流畅的同学,可能会影响你输入密码时的击键速度,给偷窥者留下可乘之机。

◇字符变换


  所谓的字符变换,就是用形状类似的字母和数字进行相互替换,通过这种变换,可以规避前面提到的基于口令字典的攻击。
  常见的变换有如下几种:
字母o 和 数字0
字母l 和 数字1
字母z 和 数字2
字母s 和 符号$
字母g 和 数字9
字母q 和 数字9
字母a 和 符号@
字母b 和 数字6
字母x 和 符号*

  假设俺想用单词 program 作为口令,那么经过上述的变换之后,就成为 pr09r@m  很明显,变换之后的口令同时具有字母、数字、符号。强度相当好 :)
  如果你有兴趣,还可以对俺给出的这几个变换,进行扩展,以满足自己的习惯和喜好。

  优点
  不用改变你原先的记忆习惯。
  由于口令包含较多特殊符号,复杂度大大提高。
  缺点
  如果你想好的口令中,恰巧所有字母都没有对应的变换,那就比较不爽啦。

◇键位平移


  这个招数也比较简单,就是在进行键盘输入时,把手【向右】平移一个键位。通常咱们在盲打时,两只手的食指分别对着字母 F 和字母 J。平移之后,则食指对着 G 和 K。
  假设俺想用单词 program 作为口令,那么经过上述的变换之后,就成为 [tphts, 经过这种输入法,口令已经面目全非。但是对你自己来说,并不难记。

  优点
  不用改变你原先的记忆习惯。
  口令看起来完全没规律。
  缺点
  依赖于 QWERT 的键盘布局。万一哪天你想在非 QWERT 键盘(比如某些手机键盘)上输入口令,那你就歇菜了。

◇藏头诗


  在某些古代小说的情节中,经常可以看见藏头诗的桥段。藏头诗的点子,也可以借用来构造安全口令。
  为了用此招数,你先要想好一句令你印象深刻的话。这话可以是中文,也可以是英文、法文、火星文......反正只要是你熟悉的语言既可。最好这句话的字数(单词数)在6-20之间。然后你把这句话每一个单词的头一个字母取出来,组合成一个口令。如果是中文的话,就把每一个字的拼音的声母取出,组合成口令。
  假设俺想好的话是:“只有偏执狂才能生存”。那么用拼音的声母表示就成为:zypzkcnsc

  优点
  不用改变你原先的记忆习惯。
  口令看起来完全没规律。
  缺点
  口令中仅包含字母,复杂度不够高。
  如果句子中的字数(单词数)不够多,效果就不够好。
  对于港台的同学,由于没学过汉语拼音,只好用英文的藏头诗了。好在港台的英语教育通常比大陆好,应该关系不大 :-)

◇巧用SHIFT键


  在构造口令的时候,适当地组合一下 SHIFT 键,有时也可以达到不错的效果。假如你的口令中,有部分字符是数字,那当你输入口令时,按住SHIFT键会让这些数字字符变为特殊符号。

  优点
  不用改变你原先的记忆习惯。
  由于口令包含较多特殊符号,复杂度大大提高。
  缺点
  万一你原先的口令仅有字母,没有数字,则密码的强度会稍微打折扣。
  由于要依赖于SHIFT键进行切换,会影响你输入密码的击键速度。这会给偷窥者留下可乘之机。

◇运用数学等式


  还有一种又好记,看起来又复杂的密码构造方式——运用数学等式。
  比如,俺的密码可以设计成:7+8=15
  虽然只有6个字符,但是由于包含了符号,已经有一定的强度。如果你觉得6字符太少,还可以很容易增加,比如改为:110+9=119
  如果你觉得还不够复杂,还可以搞得再变态一点——把某个数用英文表示。比如:two+7=nine

  优点
  密码同时包含了字母、数字、符号。标准的高复杂度!
  缺点
  需要改变你记忆密码的习惯。
  一旦你的口令被别人看到,别人很容易就可以发现你构造口令的规律。

◇利用散列值(哈希函数)


  最后,来说一种俺的看家本领——利用散列值构造口令。
  不熟悉IT技术的同学,可能不了解“散列值”是啥玩意儿。俺不想多浪费口水解释,好奇的同学请看俺的另一篇博文《扫盲文件完整性校验——关于散列值和数字签名》。
  要构造基于散列值的密码,有好几种散列算法可供选择。对于不太懂技术的网友,俺建议用 CRC32 散列算法。为啥用它捏?因为这玩意儿操作起来比较方便。比如,假设俺想得到某个文件的 CRC32 散列值,只要用 7-Zip、WinRAR 之类的压缩工具,把它压缩成 zip 格式的文件,然后就可以看到该文件的 CRC32 值了(因为 zip 格式用 CRC32 散列算法作为文件的校验码)。不信你随便拿手头一个 zip 格式的文件打开来看看就明白鸟。
  因为 CRC32 生成的散列值比较短,对于懂技术并且安全要求较高的网友,可以用高级的散列算法(比如 MD5、SHA1、SHA256)。
  现在,详细说一下基于散列值的密码如何构造(以 CRC32 为例,其它散列算法依样画葫芦)
  首先,你先想好一个字符串,作为计算散列的种子。这个字符串不需要很复杂,也不需要很长。比方说你叫张三,那你可以拿张三的拼音声母 zs 作为种子串(此处是举例,实际情况中,你完全可以用更长的字符串作为种子)。
  接下来,假设你有一个 hotmal 的邮箱,需要设置口令。你可以先用 notepad 生成一个 txt 文件。里面先写上种子串 sz 再写上 hotmail,存盘。然后把这个 txt 文件用工具压缩成 zip 格式,看一下它的 CRC32 校验码(9C9041C0),然后就拿它作为密码。
  如果你再有一个 gmail 邮箱需要设置口令,只要同样地,新建一个 txt 文件并写入 zsgmail,同样计算 CRC32,就可以得到另外一个值(03B2F77D)。大伙注意到没有?这两个值看起来没有任何关联性,而且从这两个口令,也看不出和种子串 zs 有啥关系。

  优点
  密码同时包含了字母、数字,但是没有特殊符号。复杂度属于中高!
  由于散列值具有随机性。也就是说,你看到的绝大多数散列值都没啥规律。
  由于散列值具有不可逆性。也就是说,即便有一个密码暴露了,攻击者也看不出规律。
  即使有一个密码暴露,别人完全看不出规律。
  缺点
  这种密码是完全随机的,不是常人所能记住滴。所以,在密码分级机制中,它仅适合第二级的密码。第三类密码没法这么玩。

  此招数的进阶:
  1. 你可以把 CRC 算法换成其它散列算法(比如 MD5 或 SHA-1),就可以轻易构造出【超长的】密码或口令(32个字符,甚至更长)。
  2. 如果你自己会写点小程序或小脚本,你可以进行 N 次散列(N 可以是几千或几万)。这样一来,别人拿到你的某个密码后,更加难逆向分析出你的“种子串”。因此也就无法分析出由种子串构造出来的其它密码。


★结尾


  今天又花了不少篇幅,总算把俺平生积累的,关于如何构造复杂密码的经验,都讲完了。如果哪个网友还有其它独到的经验,希望来信和俺分享。如果俺觉得实用,也会补充到本文中。
  本系列的下一个帖子,会说说安全漏洞的基本防范


回到本系列的目录
版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想和本文原始地址:
https://program-think.blogspot.com/2010/06/howto-prevent-hacker-attack-3.html

86 条评论

  1. 破了就破了吧 反正没什么东西
    顶多网上银行少放钱
    我就是被破一次 换一个账户

    回复删除
  2. 博主知识真丰富啊,可惜我才发现你的博客,来晚了哦

    回复删除
    回复
    1. 我来的更晚,哎。。。

      删除
    2. 我来的更更晚,诶

      删除
    3. 还有比我晚的么。。 哎。。。

      删除
    4. 我来的更^2晚

      删除
    5. 我才发现这里,恨晚啊

      删除
    6. 我来得还晚些!好可惜,不过我年龄还不大,相对来说来的不晚了。

      删除
    7. 楼上的人真逗~

      删除
    8. 还有比我更晚的。比如楼下的楼下。。。。

      删除
    9. 我来的比你晚了好几年,不过我的楼下比我还晚。

      删除
    10. 嗯,我果然比你晚,但是我比楼下早

      删除
    11. 地狱鬼奥义之队形破坏大法��

      删除
    12. 还有比我更晚的吗

      删除
    13. 有,但是我肯定不是最晚的

      删除
    14. 我上周才发现这个博客,相逢恨晚,慢慢补知识

      删除
  3. 希望还有类似系列的文章

    回复删除
  4. 比较关心关于木马的内容,记得随想说过要专门写篇文章的,期待啊.经常怀疑自己机器里有木马,心里不踏实,能介绍点检查的方法就好了.

    回复删除
  5. 在下小白,弱弱的问一个问题,那个Gmail的密码咋改捏,俺找不到,愁死鸟

    回复删除
  6. 楼上的同学:
    在Gmail界面的右上角有个“设置”的超链,点击进入Gmail的设置界面。
    设置界面中有一个“帐户”的标签页。进入该标签页,在底下可以看到“修改帐户设置”。
    然后就可以进入帐户修改的界面。

    回复删除
  7. 小白这里谢过!嘻嘻

    回复删除
  8. 设个密码还真是大学问,又被盲了,下次拿7h@nky0u当密码,呵呵

    回复删除
  9. 我10年下半年使用过的开机密码:
    {R*f'&5Q
    s$2j8sH>
    全随机生成,无任何规律,一次有急事让同事用我的ERP帐号无奈手机发送给她被她说成是乱码无法输入………………

    所有每季度更换一次,每个季度记下9个类似的各种场合的密码并且飞快输入,其实也不难。

    回复删除
  10. 好文章!解决了许多问题,谢谢!

    回复删除
  11. 非常感谢,非常不错,谢谢博主

    回复删除
  12. 楼主说的最后一点现在像是也不那么安全的,好像有一个数据库可以把两者对应起来,有个网站专门提供这个收费服务,100块钱破100个。

    回复删除
    回复
    1. 这是两度哈希,推不出来。 那些网站都是解一些很简单才行。 文章中说最后一个, 是对一个密码进行哈希,再用得到哈希字符串作为密码,把这个密码放到网站后,网站再作一次哈希。 32位的密码,完全没有规律,好反推不?

      删除
  13. to 楼上的网友:
    能说得具体点吗?

    回复删除
  14. 楼主的经验非常好,很有收获!

    我用passwordsafe (pws) 之类的密码管理软件,具体方法是记住pws的核心密码,考它随机生成各种账户的密码,并保存。登录某账户的时候打开pws查询密码。此方法的缺点第一是由于要查询所以麻烦;第二是只能在一个电脑上登录各种账户。为了解决第二个问题,我把pws的数据库文件(用核心密码加密后的)放到网上。在另外一个地方的另外一个电脑上登录时,我下载数据库文件,通过pws打开。

    不知道楼主觉得这种方式好不好?

    回复删除
  15. to 楼上的同学
    密码管理软件也是办法之一。前提是,该软件一定要靠谱,不能有后门,尽量用国外的开源软件。

    你提到说:
    “把pws的数据库文件(用核心密码加密后的)放到网上”

    这个地方要特别注意。一旦此步骤不严谨,将导致你所有密码的泄漏。
    请问你用何种方式加密数据库文件?

    回复删除
    回复
    1. 我使用PGP10.0.2,最後一個漢化版的,之後被賽門鐵收購了,沒有免費的了。看到這篇帖子,才發現我的電腦基本上是沒有防禦的。請問一下博主,PGP加密自己的密碼數據怎麽樣?謝謝先。

      删除
    2. TO Ys Yb
      PGP 加密,安全性是不错的。
      前提是你的系统没有被植入木马。

      不过俺个人建议用 TrueCrypt,开源的。有中文界面支持。
      俺博客上有专门的 TrueCrypt 扫盲教程

      删除
  16. 我的gmail的密码包括字母大小写数字标点13位而且需要手机验证才能登陆,
    我一直都是把密码直接保存在gmail,不知道这样好不好~
    最近在果壳看到一种办法,
    \自己编制一个无理数。例如π的e次方开二次根号,自己只要记住这个无理数的产生方法就可以了。然后密码就从无理数里面截取。可以准备一个小本子,把自己的全部密码都记下来,当然形式是“第n为到第m位”\
    我按照这样的办法设置了普通账号密码,一般是网站允许最长密码,都是12位以上纯数字,请问这样的密码强度够吗?还是需要添加一些字母和特服吗?

    回复删除
    回复
    1. 手机木有太大的用处的,先不说运营商能控制你的短信,只要你使用智能机(对Android比较了解,所以用Android举例),无需root权限的应用即可拦截你的短信内容,或者利用你的手机发送短信。即使你安装时会看权限,只要你电脑中了木马,木马还可以利用adb静默安装,root完的手机甚至可以通过adb安装到system/app目录下,成为系统应用(前提是你打开USB调试功能,不过只要使用过豌豆荚之类的人,我相信大部分都会一直开着)。

      删除
  17. to xg不期速成
    把其它密码保存到Gmail,就得保证Gmail的安全性够好。
    从你的描述来看,貌似你Gmail的安全性还行 :)

    取无理数的若干位作为口令,优点是数字没有规律;缺点是仅包含数字。
    如果要避免此缺点,可以参考俺在博文中提到的“◇字符变换”。

    回复删除
    回复
    1. 請問一下愽主,現在gmail要用手機驗證了,不知道會不會用這個號碼定位用戶?以前我申請時,是不需要手機號的。

      删除
    2. TO Ys Yb
      可以找一些在线短信服务,据说可以用来接收短信验证码的。
      这样就可以不填写真实的手机号。

      删除
  18. 好的,我已经弄了一套自己的字符变换规则了,,
    谢谢~

    回复删除
  19. 好的,我已经弄了一套自己的字符变换规则了,,
    谢谢~

    回复删除
  20. 数学等式法构造密码不错,不过我觉得还有更大的提升空间。如果你是循规蹈矩运用等式,即使你数字换成其他鸟语,还是有可能被破解,所以我就来个更变态点的,就是运用不等式。。
    举个例子,25^2=sqrt(81) ,注明,sqrt是开根号的意思,^是平方的意思。 这个密码可谓是数字,字母,特殊符号的大杂烩,这样的好处我个人觉得就是即便别人知道你平时用数学等式的方式,也很难构造等式。不过缺点就是容易搞错,除非你清楚个人的构造习惯。。。
    不知博主认为这个方式怎么样。。。

    回复删除
    回复
    1. TO Curtis Wilbur
      用“不等式”来构造,确实难破解。
      另外,引入函数(比如 sqrt, abs, 等等),也是增加难度的好办法。

      删除
  21. 长知识了,要把自己最重要的密码用CRC32或者SHA-1来处理,其他的都是些不重要的网站账户

    回复删除
  22. 好文章!感谢博主!

    回复删除
  23. 受益匪浅,谢谢博主!

    回复删除
  24. 我想请教一下楼主,我用Goagent翻墙时,网络盖世太保能够追踪到我的IP或者信息吗?请科普一下,不想被查水表,

    回复删除
    回复
    1. 能,不过不值得。你又不是什么重要人物,何必追踪你?

      删除
    2. TO 歧路灯
      要防范朝廷的跨省追捕,请看俺博客的[url=http://program-think.blogspot.com/2010/04/howto-cover-your-tracks-0.html]《如何隐藏你的踪迹,避免跨省追捕》系列[/url]
      里面有详细介绍

      删除
  25. 用lastpass.com网站保存密码,怕木马可以用多因素认证,一次一密。担心网站不安全还可以用开源的本地密码保存系统。请大家多研究

    回复删除
    回复
    1. lastpass 是基于云端的密码管理,俺觉得不爽。
      万一它自己被黑了,就惨了。
      而且 lastpass 是商业公司——俺对商业公司抱有天生的不信任

      俺觉得 KeePass 更好一些。
      开源的,而且密码的存储都在本地。

      删除
  26. 很丰富的密码方案,但就怕键盘记录木马,否则再复杂的密码只要是通过键盘出入的都会失密~

    回复删除
    回复
    1. TO Nanchun Jian
      同意你说的——防止中木马是前提。
      中了木马,再强的口令也是白搭。

      本系列的其它几篇介绍的方法,有助于降低中木马的概率。

      删除
    2. 墙外也不赖

      就怕键盘记录木马,否则再复杂的密码只要是通过键盘出入的都会失密

      键盘记录木马如何查杀和防控?

      删除
    3. 博主已经写了个系列《如何防止黑客入侵》http://program-think.blogspot.com/2010/06/howto-prevent-hacker-attack-0.html讲这方面的问题了
      还有就是装个国外的好的杀软,养成好的上网习惯,如别乱点别人给的链接和不明网页和邮件,所有下载文件都先杀毒,别下载乱七八糟的软件,等等。

      删除
  27. 博主,能不能推荐几个中文的密码管理器,和密码生成器啊?


    Tomm留帖_下次好找

    回复删除
    回复
    1. TO Tomm
      关于密码管理器,如下两款名气较大
      [url=https://zh.wikipedia.org/wiki/KeePass]KeePass[/url] (开源)
      [url=https://zh.wikipedia.org/wiki/LastPass]LastPass[/url] (不开源)

      删除
    2. 我刚还想问你LastPass的可信度怎么样呢。它的本地缓存可靠性高么?因为它毕竟是加密储存不是散列储存啊,况且现在散列储存的密码有些情况下也不是很安全。比如Windows的sam,现在能买到的彩虹表实在是很…… 虽然很贵。

      删除
    3. TO Keith
      本地的密码管理工具,显然得用【加密】的方式存储,而不能单纯用【散列】的方式存储。
      因为散列方式【不可逆】,而密码管理工具的存储需要具有【可逆性】,才能还原出你存储在其中的密码原文。

      删除
  28. 理由CRC32构建密码还是有可乘之机滴……虽然看上去有数字有字母,但是一旦被人发现它实际是十六进制数就太好猜了。组合前面的shift方法和替换方法又会导致密码太难记,毕竟直接用散列的话忘记密码就再算一次也无妨,但是忘记了替换规律就歇菜了。而对于黑客来说呢?现在很多暴力破解软件都能够进行字符替换,把常用的替换规律计算进去就好了。

    回复删除
    回复
    1. TO Keith
      当初介绍用 CRC32 做散列算法是因为 CRC32 无需专门的软件,用 WinRAR或7Zip 就可以得到某个文件的 CRC32 值。
      所以 CRC32 比较适合技术菜鸟。
      如果是稍微懂技术的网友,可以用更复杂的散列算法,以得到更长的散列串。

      删除
  29. 从刘晓波的维基百科就到你的博客这边了,看了好多好东西,好像看见一个金光闪闪的大宝藏,好惊喜好开心

    回复删除
    回复
    1. TO 30楼的网友
      多谢捧场 :)
      俺只是个普通的网友,本博客也算不上“宝藏”。
      俺还有很多地方需要继续提高和改善。

      删除
  30. 楼主现在在国外吗?

    回复删除
  31. Share a method that I use: existing modern barcode scanners are mostly designed to emulate a keyboard, which types a series of scanned characters into computer and (optionally but also mostly by default) appends an Enter. Observing that some encoding format like CODE-128 allow the use of nearly arbitrary chars to be encoded(case sensitive A-Z, numbers, special characters, etc.), I now print a sheet of random passwords in length ranging from 14 - 20 bytes. The printing should be however taken great care of, and a private printer is desired. Then I prepare a small notebook and, for each use case, I paste a cut of password to a new page. Marking all pages with dates, so that I will able to update new passwords regularly. Apparently no passwords are used twice, and thank to the nature of barcode scanner I can input 20-char complex password very quickly(within 1 second). This method is also compatible with BIOS passwords. And so long as the notebook is kept secret, with is relatively simple -- I have inserted my bus card into the cover so I will not forget to take it together, it is very secure. At emergency cases it should also be possible to destroy the recorded barcode, by destroying the paper physically. But I have not got a good idea.

    回复删除
  32. 貌似wikipedia说可以在键盘上画画(不去记打的什么字符,而是那些按键连起来之后的形状)

    回复删除
  33. 好像应该回帖在这里合适:)
    博主我推荐个软件,自己一直在用,如果你觉得不错可以推荐给大家
    http://masterpasswordapp.com/
    我感觉这比云端的那些软件更安全,你怎么看?

    回复删除
  34. 博主我推荐个软件,也是本地存储的,可以安装在手机上。主控密码是用Hash存储,其他是用AES加密的。还可以导出备份,生成密码。这样就不用自己用Hash函数算了。
    http://codeonly.github.io/onepass/indexcn.html。

    回复删除
  35. 以上各种方法用过之后都不太满意,现在在用的是 PasswordMaker https://www.passwordmaker.org/
    优点是只需要记住一个主密码,各个密码通过算法得出、从而不需要保存密码数据库
    原理大概是 是只需要记住一个 主密码(如 123456),然后加上一个区别字符(网址之类的如 gmail.com)通过特定的算法(如 HAMC-MD5 SHA-256)得到一个包含大小写字母、数字、符号的字符串,作为该网站(gmail)的密码。下次登陆的时候只需要输入 123456+gmail.com 就可以算出密码。

    现在我有个疑问就是,这样得出来的密码安全性如何?还有应该选择哪种算法比较好?

    回复删除
  36. 楼主,你这个密码编写分享很不错,对于我这种懒人很受用。另外,我之前看过贵网站一篇文章,好像是说失意的年轻人以及某个美国作家研究希特勒的文章,不知道是哪一篇,我想了解一下那位作家的作品。麻烦有链接贴一下,谢谢!

    回复删除
  37. 楼主好厉害什么都知道的样子,哈哈

    回复删除
  38. 学习了,博主说的几个方法确实没想过

    回复删除
  39. 像类似truecrypt、winRAR之类的密码,如果数据和密码一块儿泄漏,就算重设密码,也不能确保数据私密。
    这类密码,必须在数据泄漏前就重设才有用;而且,密码修改次数越多,风险未必会降低。(尤其是数据本身就存储在云端的密码,一旦泄漏,几乎无法挽回损失)

    有些密码靠邮箱就可以重设,这类密码比较舒服。因为只要确保邮箱没事,就可以任意强度、任意取舍。复杂密码可以用TrueCrypt或者密码管理器保存,而不必担心忘记密码管理器的密码。

    有些密码要用手机重设,这类密码如果重设是免费的,那就可以每次登录都重设密码。如果收费,那还是慎用。有时候不仅仅是费用问题,你的实名身份是跟随着手机号一块儿泄漏给网站方的。

    回复删除
  40. 看来大家都挺无聊....蒽,其实我也蛮无聊的,大半夜不睡觉。

    回复删除
  41. 我似乎发现了一个宝库

    回复删除
  42. 分享一下我個人產生 Hash 的方式, 跟編成隨想的最後一個方式大同小異.
    好的演算法不怕攤在陽光下, 這邊給大家參考.


    ## Shell script (把這隻 script 存進 ~/.bashrc 或 ~/.bash_profile, 用類 Unix 的人都懂的) :

    ##################################################
    #asKansweR script in ~/.bashrc 或 ~/.bash_profile.
    asKansweR () {
    read answeR
    echo -n "$answeR" | sha512sum | sed -n 's/^\(.*\) -$/\1/p' | tr -d '\n' | xxd -r -p | base64 | tr -d '\n' | sed -n 's/^\(.*\)/\1\n/p'
    }
    ##################################################

    這個 script 我相信 windows 10 以上也可以跑, 因為 windows 10 現在好像可以支援 Ubuntu 的 bash 的樣子, 不須安裝額外東西, 大家可以玩玩看.

    sha512 計算出來的 hash 值會再用 base64 編碼轉換一次, 這樣訊息密度比較大 (相同長度產生的組合可能性比較高, 因為 base64 的合法字元從 a ~ z, A ~ Z, 還有少數幾個符號).
    你要把以上存在 shell script 也可以, 那就把 asKansweR 函式名稱拿掉.


    ## Python :

    ##################################################
    #asKansweR.py
    import base64
    import hashlib

    w = None

    while w != "exit":
    w = input("")
    if w == "exit" or w == "quit":
    break
    ## Generate sha512 hash (message digest) (in binary format?) from original message.
    x = hashlib.sha512(str.encode(w)).digest()
    y = base64.b64encode(x)
    print(y.decode("utf-8"))
    ##################################################

    Python 版的執行方式像這樣 : "python3 asKansweR.py", 然後一樣開始打字, 打完按 Enter, 輸入 "exit" 或 "quit" Enter 跳出.
    這個 script我自己也是有放在手機上, 外出時如果需要輸入密碼我可以把手機掏出來當場 "算" 出密碼, 不過 andriod 的系統會不會側錄我是另外一回事 ...


    ## 或是使用線上免費網站轉換器 :

    可搜尋 "sha512 online converter", "base64 online converter" ... 之類的, 很好找, 比如這 2 個 :
    http://hash.online-convert.com/sha512-generator
    http://en.1mu.info/tools/hexbase64.html

    這邊注意一下, 這裡的目的只是要實驗或證明這些函式的算法得到的結果是可靠和一致的, 因為把明文資料送給這些網頁工具沒有安全性可言, 你在計算之前已經把明文送給這些伺服器了.
    而且也是要證明這些密碼雜湊函式是開放標準, 隨隨便便都可以取得, 你不用擔心找不到或算不出來.


    ## 密碼產生實際過程 :

    舉例來說, 我的 Message 如果是 :
    apple
    會產生 Message Digest :
    hE2HeRA7lMGPSqTMDDtEdAWFgKmR+6hdPKaYoLyeUsWUD+t6ZaOikOF+ayPulD7MT3PnSQMnJFtP5dXvtZD+sg==

    我的 Message 如果是 :
    apple2
    會產生 Message Digest :
    30dgOP4El5SqOpr+WdmEjIFZppXby4Ul3wG9nCZNrERPynMqDBUFYH4ZWypuXGennNkH34ESa+mmxDC9Xa86Gw==

    Message 你要打多長都隨你, 要打什麼符號也可.
    但最後的密碼長度我通常只會取大概 15 位數, 不含 / 和 + 符號, 如果我的祕密字串 (Message) 是 "apple2", 那我對應的密碼 (Message Digest) 就是 "30dgOP4El5SqOpr".
    (Base 64 的目地只是要讓相同長度的密碼產生的組合可能性比較高, 除此之外沒有其他意義. Base64 的合法字元除了 a ~ z, A ~ Z, 還有 / 和 + 2 個符號, 這 2 個符號我個人習慣是不會用的.)

    只不過沒有試過編成隨想說的不斷遞迴幾千次的計算, 我曾經考慮過 pbkdf2 而不是 sha512 做遞迴計算, 但想想我其實不需要這麼安全, 因為安全的瓶頸在網站資料庫本身.

    回复删除
    回复
    1. 哎呀, 每行開頭的空白縮排被 Blogspot 去掉了.
      Shell Script 沒關係, Python 代碼裡面的 "while" 和 "if" 內沒有縮排會沒辦法跑的. 不過自己捕上去就 ok.

      删除