西西河

主题:【原创】也说一下关于密码的问题 -- yhz

共:💬34 🌺46
全看分页树展 · 主题
家园 【原创】也说一下关于密码的问题

最近,不知道为什么,河里有不少人开始关注自己的密码问题了。也许是经济不好,所以更要好好的看好自己的钱包?呵呵。

但是什么是好的密码?这个问题看上去简单,但是其实并不简单。当然,从哲学上来说,总有一个放之四海而皆准的标准答案,就是:密码的好坏没有一个统一的标准。嗯,显然,这个标准答案在这个问题上再次成立。那么,要怎么弄,能得到一个好的密码呢?

在回答这个问题之前,就必须先明确一点:设计安全的密码,不是我们的目的。我们的目的是保护我们的隐私或者重要资料不外泄,而密码仅仅是达到这个目的手段之一。木桶能装的水,取决于最短的木板的道理,大家应该都知道了。在安全体系中也一样,所以,追求单纯的密码安全,其实有时候是没有太大的必要的。

首先,要看看你准备把这个密码用在什么地方。例如说在银行中用的密码?还是计算机系统密码或者网站的登陆密码?

这点区别的意义是什么呢?首先,大多数人都可以回答出来:银行中用的密码一般只能有6位10进制数,而网站上用的是英文字符加大小写加特殊符号。这个答案答对了一半,如果打分,就只能打40分。因为最重要的另一半,是我们对密码设计的重点,是有所不同的。如果是银行的6位10进制数,那么,我们的密码设计中,防范的重点应该是对密码的猜测上。而如果是计算机系统或者网络某个登陆密码,则重点防范的则是暴力破解。这点的区别,似乎很多人忽略了。

具体来说,银行的密码,大多数是6为10进制数(有不同的,自己类推一下,结论肯定是类似的)。那么它们的组合一共有多少呢?很简单,10^6种,也就是一百万种?多吗?一点都不多:一个一百万的码本,占用的空间,顶多就是几十兆一百兆字节,而遍历这个码本(一百万次匹配),对于对于现代计算机的运算能力而言,再差的算法,也绝对能在一分钟内完成。所以,这种密码体制,对于暴力破解而言,是极其脆弱的,甚至可以认为是不设防的。所以,我们对防范暴力破解的希望,就只能在银行提供的服务上了:银行既要防止对同一个账号连续测试,也要通过内部安全措施,防止银行职员越权获得密文等等。在这点上,我们无能为力,只能相信银行,相信它提供的安全机制,能够防范来自内部和外部的暴力破解。所以,我们设计出来的密码,需要防范的重点,是防止有人利用我们的某些公开信息,不经过暴力破解,或者仅经过少量测试,猜测出密码来。

而对计算机系统或者网站登陆密码而言,大多数情况下,只要是键盘上能打出来的,就是可接受的。所以,密码的组合就可以呈现出一个近乎天文数字的结果。这使得单纯的枚举式暴力破解,几乎是不可能的。而且,由于大部分这些系统,都采用了现代成熟的商用密码安全算法,例如说哈希算法:MD5/SHA1,也有些网站用对称算法例如:DES/AES/IDEA等等,以保留一个反向获取密码的能力(虽然用对称算法的密文保存密码的安全性稍低,但是反向获取密码的最大作用,是当大家忘记密码时,它可以发送密码到先前设置的安全邮箱中)。对于这些安全体系而言,对于普通的破译者的技术水平来说,纯密文的安全性是可以得到保证的(如果NSA、CIA、FBI盯上了你,算我没说)。所以,通常用的方法,就是字典式的暴力破解。所以,对于这种体系,我们的密码设计的重点,就是防止这种字典攻击,简而言之,就是构造出一个在绝大多数破译者使用的字典中都不存在的密码组合。

其次,使用的便捷性。其实在密码学上,有一个很基本的通则,就是越是好的密码,或者安全措施,基本上给使用者带来的不便就越大。而当一些不便大到一定程度的时候,使用者就会用各种偷懒的手段去绕开这些安全措施或者原则。例如说,河里已经有不少的大牛,根据自己的经验或者实际使用的情况,给出了很多生成密码的方法和方式,甚至是需要演算叠加而得来的。这种方法当然是好的,但是,如果一个非常安全的密码,为了算出来,你需要在电脑边上拿纸和笔算上三分钟,或者站在ATM机旁边心算十分钟才能算出来的话,那么我敢打赌,99%的人在使用不超过十次的时候,就会开始用各种偷懒的方法了。例如说偷偷的把演算结果写在某个地方,或者干脆改密码等等。所以,千万不要高估自己的耐心。当然,这种耐心,还有心算能力,是每个人都不同的:陈景润苏步青十秒钟心算出来的东西,我们可能十分钟也未必算出来--算出来的,还不一定是对的。所以,这个要因人而异,自己掌握。

再次,就是密码的使用--也就是有人提到的分级的概念。一般而言,对你很重要的密码,例如说银行密码,一定不要用在一些对你而言无关紧要的地方。因为多一个地方用这个密码,就多一重泄露的可能性。所以,理论上说,每个不同的地方,就使用不同的密码,显然是最佳选择。但是考虑到上面所说的便捷性,除非自己使用密码的地方很少(在现代社会这点似乎不太可能),不然,就需要做出一定的权衡。密码的分级处理策略,是比较简单可行的。密码分级的核心原则就是,分出不同级别的使用场合,同一级别内,用同一个密码,或者同一个算法生成的密码。不同级别的场合,绝不混用密码。所以,我们还要看看密码在什么地方使用的。例如上面说的,如果一个网站提供了忘记密码找回的功能,那么,他肯定用了一些可逆的算法来保存你的密码(也就是说可从密文直接恢复出明文的算法)。这类算法,无论是对称算法还是非对称算法,他们的安全性完全在密钥上面。也就是说如果一但这个网站的加密解密用的密钥被获取,那么这些密文,对于破译者来说,就毫无安全性可言了。所以,如果碰到这些网站,如果是大公司,或者你认为信得过他们的安全技术人员和内部的安全规章和措施,并且能认真执行的话,可以用一些级别比较高的密码。不然的话,就不要过于相信这些网站。以免一但一个被泄露,就一连串的遭殃。比较好的做法是,为这些网站,单独划定一个级别,一但出问题,也不至于全军覆没。

最后,谨记一个原则:对于非安全相关专业人士(一句老话:如果不知道你是不是专业人士,那么说明你不是)而言,你所设计的密码或者算法,都是业余级的,永远不要指望能抵挡专业人员或者机构的破解和攻击。简而言之,就是防君子不防小人的。谁是小人?呵呵,看多点美剧或者好莱坞的大片,大家都应该猜到的。

开始准备就说两句的,结果越说越多。俗话说说得越多,错得越多。我觉得在藏龙卧虎高人无数的河里,更是如此。先躲起来,看看有没有人觉得班门弄斧糊弄大众?大家有西红柿和鸡蛋尽管丢,不过力气小一点,不要砸破了--现在经济不好,我今天的晚饭,就指着西红柿炒鸡蛋了。

关键词(Tags): #密码(landlord)

本帖一共被 2 帖 引用 (帖内工具实现)
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河