密码相信大家一定不会陌生,访问各种网站、很多手机App都需要密码,那么大家是怎么设置密码的呢?这样存储是否存在安全隐患呢?接下来我简单分析一下密码的安全等级,并介绍我在苹果操作系统上的免费密码管理方案,希望对大家有所帮助。

密码的分类

我这里对根据大家平时的密码使用习惯对密码进行分类,按破解密码的难易程度从低到高分别为:简单密码、相同密码、固定模式密码、随机密码。

简单密码

简单密码具体来说有以下几种形式:

  • 简单模式的数字组合:如123456、111111
  • 简单模式的字母组合:如ABCDEF、AAAAAA
  • 字母和数字的简单组合:如ABC123、AAA111
  • 有意义的单词、惯用语:如password、admin、helloworld

这种密码之所以说是破解的安全等级最低,是因为破解成本太低了,破解者甚至不需要依赖任何外部数据就可以轻松破解。

相同密码

现在需要账户和密码的场景太多了,如果每一处都需要设置不一样的账户和密码,这会对我们造成极大的心智负担。为了避免麻烦,相信不少人和之前我的作法一样,在不同的网站上都设置相同的用户名和密码,这样就可以一码走天下啦。

不过这种作法比简单密码安全不到哪里去,如果你注册的某一个网站存在安全漏洞,就有被拖库的风险。那么黑客只要拿着从这个网站上你的用户名和密码去其他的网站上去尝试,如果你恰好也注册过黑客就可以轻松入侵,这种攻击方式叫做撞库。你可能觉得这种攻击可以通过每个网站的用户名来化解,关于如何让每个用户名不一样你可能想到了和下文中固定模式密码相同的方式:使用特殊的规则。然而这样也是不安全的,黑客不见得总会拿着完全相同的用户名和密码去另外一个网站上去尝试,他们手中持有的密码库和完全穷举所有的数字、字母及符号的组合比起来完全不在一个数量级,他们即便是整个试一遍成本也不高。还有一点就是,用户名是限定范围内公开甚至是完全公开的,对黑客来说获取某个网站的用户名比获取密码轻松太多了。

在网络犯罪盛行的今天你注册过的网站里有一部分很可能已经被入侵了。如果一个网站提醒你密码不安全需要重新设置,要么是他们已经发现自己被入侵过;要么是他们通过一些渠道获取了被黑客攻击下载的密码库,发现你的账户名密码不幸位列其中。这个时候最好是按照提示重新设置密码。

如果设置了新的密码,那么你就需要记住两个密码:部分网站还在使用的旧密码,以及重置过的新密码。当然黑客的攻击不会停止,如果什么时候使用新密码的网站也提示你需要重新设置密码的时候,则可能需要再记住第三个密码……不光如此,当你登录一个不太常用网站的账户系统时,你还需要知道这个网站对应的是第几个密码,当然还有兜底方案:所有的密码都试一次。可万一密码多了哪个密码记错了呢?这时只好扣着脑袋搜刮记忆了。可见这种密码管理方式时间久了对我们的心智负担也不低。

固定模式密码

固定模式密码是不少人秘而不宣的”独家“密码管理方式。这种管理方式是通过网站域名、公司名等结合对自己有特殊意义的前后缀组合而成的。举一个简单的例子,我可以对百度设置"baidu123"的密码,然后对网易设置"wangyi123"的密码,这样对我们来说只需要记住要登录什么网站,只要在网站名后面加上"123"就是登录密码了。

听完之后你是不是也很想试试?先别着急,这种管理方式也是有风险的。如果你的生成规则(前后缀、取词根的方式)如果不小心说漏嘴,那么任谁都可以去你的私人领地免费畅游。当然说漏嘴的情况只可能限于熟人,所以这也是大家对这种密码管理方式秘而不宣的原因,最多也只是神秘且得意地告诉你:我的密码是通过特殊规则生成的,每个网站密码都不一样。

那么口风紧了就可以完事大吉了吗?我们刚才提到了黑客对于多个网站使用相同账户和密码的攻击方式:拖库和撞库。如果密码不一样黑客就完全没辙了吗?这样就太低估黑客的智商了,只要是固定的规则,就可以通过代码来表达这种规则。

不过这样的攻击成本就会变高。试想遍历拖库所得的密码库,检测出可能的密码生成规则,然后在登录其他网站的时候应用该规则取尝试是否正确。这样比简单的匹配单一的密码计算成本上可要高很多了。

此外,如果想让自己的规则更不容易被识别和破解,可以再应用一点编码规则。在该小节开始处我们举例怎么添加简单的后缀,如果在这个基础上于密码开始处添加网站名的长度,就会变成"5baidu123"和"6wangyi123”。不过有这些额外的规则,就意味在回忆密码时需要做一些额外的思考,这则会增加我们的心智负担。

随机密码

既然上面说到的几种密码管理方式都存在问题,那么有没有更安全的方案呢?答案就是随机密码。通过机器生成一串随机数字、字母和符号的组合,这样就“毫无规律”可言。而且再加上每一个网站都采用不同的密码,就“无懈可击”了。不过你也可以看到这种方案最大的缺点就是,如果每个网站的密码都要记而且毫无规律可言对心智负担太大了。

那么有了随机密码就不会被破解吗?随机数也不一定没有规律可言,这些随机数是通过随机数生成器生成的,而随机数生成器也不见得生成的是真正没有规律的随机数,而是通过一个种子(seed)产生的伪随机数。关于真伪随机数相关概念就不在这里展开讲了,这里有一篇不错的科普文章感兴趣的同学可以点过去看。不过,即便是真随机密码,通过穷举法暴力破解上也是可行的。

看到这里你可能都已近泄气了,到底世界上有没有“绝对安全”的密码呢?关于这个问题我觉得没有必要回答,因为事实上我们只要“足够安全”就可以了。那么怎么理解足够安全呢?如果破解一个密码所需要花费的成本高于破解后所取得的价值时,这个密码就是足够安全的。举个例子来说,如果你的银行账户里有10000块钱,而黑客破解你的账号拿到钱的成本是20000块钱,那么这个账号就是足够安全的。而事实上目前即便是伪随机密码,破解的成本也足够大,所以到这种程度也就可以啦。

分类的题外话

以上的密码管理方式都是简单假设这些密码记在我们自己脑中而不借助任何媒介的,因为如果涉及媒介的话那就会引申出来媒介的安全性的话题。

在对各分类做分析时,我主要从个人的心智负担和被破解成本两个方面两个方面做考量。考虑心智负担原因很简单,我们都很懒而且生活如此美好如果为了密码的事情而心烦意乱就太不划算了。至于考虑破解成本,则是为了能够达到足够安全。

目前很多网站本身就有一些个人账户的安全保护策略,有部分策略是需要我们来配合的,如:密码存在有效期,过期后尽量按提示重新设置密码;如果支持2FA尽量设置。这些安全策略对我们的账户安全很有帮助。

文中总是拿“网站”说事儿,手机App、电脑上存在账户系统的客户端等都是同样的情况,之所以只说网站是因为觉得大家会更容易理解。

我不是黑客没有真正破解过别人的密码,也不是密码学专家。这里只是按自己的理解对密码管理做一些分析,如果我哪里写的有问题还希望大家能够积批评指正,如果有什么疑问也希望能够写在留言区,我看到后会第一时间回答。

我的解决方案

从上面的分析能够看到随机密码在所有的分类中是最高的,而维护成本大的问题则可以交给软件来帮我们管理,这样就能够有一个破解成本高并且对我们心智负担不中的解决方案啦。

最近两年我都是用苹果的笔记本和手机,在苹果生态中最有名的当属1password了,不过目前已经改成按月付费了价格为每个月5$。像我这样没有赶在买断制之前上车的人觉得目前的价格还是有点贵,接下来分享一下我的免费方案吧。

Mac OS

在Mac上我使用一款Github上的开源软件:MacPass

MacPass软件界面截图

从上面的截图可看出,MacPass可以分目录组织,存储项不仅包括用户名、密码,还可以存储Url、文本、甚至文件,这样已经足够我们日常使用啦。如果嫌麻烦不愿意自己折腾编译的话,可以到官网下载。

如果你和我一样也是Alfred的重度用户,还可以去下载一个和MacPass相关的Workflow,这样就可以在Alfred里输入关键词"kp"来搜索自己所有的用户名及密码了。下图是针对上面新建的用户名密码搜索的截图:

Alfred搜索截图

需要注意的是按照这个Workflow需要额外再按照一个MacPass的插件,这个插件可以让Alfred和MacPass通过HTTP协议通信,通信安全通过对称加密算法保证。另外,我们通过MacPass拷贝密码之后会有一个过期时间(默认30秒),过期之后会自动从我们电脑的剪切板中删除,但如果使用Alfred这种工具会有记录剪切板历史的,可以根据自己的情况尽量设置一个较短的剪切板存储历史的时间。

有人可能觉得加密的开源软件意味着如何加密的逻辑也是公开的,这样会不安全。然而事实上并非如此,Bruce Schneier在《应用密码学》一书中提到过,通过保密加密算法以期望达到保密的方式都是不安全的,而目前公开加密标准能够保证足够安全了,所以使用这些公开加密标准的开源软件也是足够安全的。

MacPass会将所有的密码存储在一个文件中,文件格式和KeePass是通用的,这也就意味着这个文件也可以在Window系统上使用。我自己把这个文件放在icloud里,然后就可以在IOS系统上共享密码啦。

IOS

在AppStore里有不少免费的KeePass客户端,我这里也使用了一款Github上的开源软件:StrongBox

StrongBox的整体界面 进入新建的加密项

可以看到我这里导入了通过icloud同步过来的KeePass文件,就可以使用刚才新建的加密项了。我们可以通过双击来拷贝指定项的用户名,而长按则可以拷贝密码。和MacPass类似,这款软件也存在剪切板过期时间(默认1分钟),过期后也会清除当前剪切板的内容,如果觉得自己的手速不够快可以自行到设置中调整。

限于篇幅和精力,其他系统上的密码管理软件我就不一一分享了,大家可以自己google,关键词:操作系统名,KeePass客户端。

一些题外话

除了上文提到的以单独软件形式存在的密码管理软件之外,操作系统、浏览器上、部分笔记本软件(如印象笔记)也都会有类似的密码管理功能,他们都可以被称作“钥匙串”管理方式。这种管理方式优点是只需要记住一个密码(即主密码)甚至不需要额外的密码,就可以按关键字查询到想要的密码。缺点是如果密码库文件被窃取而且能够得到对应的主密码时,则意味着密码库中所有的密码都泄露了。

不过形如MacPass这种需要主密码的软件,主要采用了对称加密算法对存储于其中的用户名和密码进行加密,如果能够妥善保管好主密码保证不被窃取就已经足够安全了,毕竟绝对安全的一次性密码本成本太高了。

密码管理中也没有银弹,密码管理软件可以帮我们节省很多精力去记各种密码,但我不建议去管理一些和钱直接相关的账户。在日常生活中的密码我觉得可以按多个方式分类管理:

  • 银行账号因为涉及到资产,而且只有六位数密码可以记在脑袋里;
  • 数字货币等通过纸钱包放在保险箱内;
  • 其余不直接涉及资产的都可以通过密码管理软件来管理。

今天的分享就到这里,希望能够对你有所帮助。