我们平时需要设置很多密码,比如系统登陆密码,银行卡密码,网站密码等,这些密码直接关联我们系统的安全,那么什么密码才是安全的,怎么安全密码那?就是本篇要聊的,如果你想知道如何设置一个复杂而又容易记的密码可以直接参考最后一部分内容。
一 规则判断
制定一系列规则,用这些规则来判断我们的密码是否安全,常用的规则有:
1. 密码长度是否够长
一般来说密码长的相对于短密码来说,肯定是更为安全。
2. 密码是否包含多种字符
破解密码很多是靠机器猜的,可以按照特定组合猜,也可以根据字典猜,密码中包含的字符种类越多,相对越安全,比如我们可以包含大写字符,小写字母,特殊字符,如果都包含了而且长度够长,显然会安全的多,以包含数字,大写字母,小写字母来说,如果是8位密码,没有规律的话,需要猜测的次数为:(10 * 26*26)8。
3.密码是否存储回文或重复
比如密码是不是形如"123abccba321",这种密码存在回文,或"123abc123abc"这种密码存在着重复,也不是安全的。
4. 密码是否存在递增的数字或字符
密码中存在有规律的递增的数字和字符也不安全,比如刚才说的"123abc123abc"密码,除了存在重复,还存在着123 这种数据的递增和"abc"这种字符串递增的情况。
这些都可以通过写代码来进行判断。
二 字典判断
有的密码虽然可能满足上面的要求,但是存在一些特殊的规律,在进行暴力破解的时候,往往会用这些常用的密码去猜测,举个例子"1qaz2wsx" 这个密码8位,包含6个字母,按道理密码强度还可以,但是因为在键盘上是斜着下去的两排,所以也可能被猜中,这是普遍的规律;还有针对于不同的人的,也有不同的规律,比如类似于个人的生日啊,身份证号码了,结婚纪念日之类的。
2.1 cracklib 安装和使用
linux中采用pam pam_cracklib module来实现对密码强度的检测,可以通过配置让linux系统自动检测用户的密码是否为弱密码。
也可以通过一些命令来判断密码是否为弱密码:
$rpm -qa|grep cracklib
cracklib-2.9.0-11.el7.x86_64
cracklib-dicts-2.9.0-11.el7.x86_64
如果没有安装,在centos上可以通过以下命令安装:
yum install cracklib
#ubuntu上可以用以下命令
apt-get install libcrack2
#如果需要依赖此库做开发的话需要安装这个
yum install cracklib-devel
可以通过以下命令来判断密码的强弱性:
[root@localhost ~]# echo "password" | cracklib-check
password: it is based on a dictionary word
[root@localhost ~]# echo "12345abc" | cracklib-check
12345abc: it is too simplistic/systematic
[root@localhost ~]# echo "12345abAB&*c" | cracklib-check
12345abAB&*c: it is too simplistic/systematic
[root@localhost ~]# echo "12345abABDGOK&*c" | cracklib-check
12345abABDGOK&*c: OK
打印OK的是说明密码强度是够的,其他的会给出判断为弱密码的原因。
如果你是个系统管理员,希望用户的密码强度设置的更强些,在linux可以通过配置,调用cracklib进行相关检查:
在centos上配置文件为:/etc/pam.d/system-auth
# pam_cracklib模块和设置的几个模块参数
password required pam_cracklib.so retry=3 minlen=6 difok=3
#pam_unix模块,MD5表示采用MD5做hash
password required pam_unix.so md5 use_authtok
如果还需要控制新密码和老密码必须有多少位不相同,需要保存老密码,通过下面命令:
touch /etc/security/opasswd
chown root:root /etc/security/opasswd
chmod 600 /etc/security/opasswd
#编辑刚才的pam文件 remember= 12 你想记录12个旧密码
password required pam_unix.so md5 remember=12 use_authtok
参数说明:
pam_cracklib 主要参数说明:
tretry=N 重试多少次后返回密码修改错误
difok=N 新密码必需与旧密码不同的位数
dcredit=N N >= 0密码中最多有多少个数字;N < 0密码中最少有多少个数字
lcredit=N N >= 0密码中最多有多少个小写字母;N < 0密码中最少有多少个小写字母
ucredit=N N >= 0密码中最多有多少个大写字母;N < 0密码中最少有多少个大写字母
credit=N N >= 0密码中最多有多少个特殊字符;N < 0密码中最少有多少个特殊字符
minclass=N 密码组成(大/小字母,数字,特殊字符)
minlen=N 新密码最短长度
windows下可以搜索密码策略,通过密码策略来控制密码的强度要求。
2.2 判断密码的强度得分
如果你想判断密码强度可以在linux上安装另外一个软件来判断密码强度:
yum install libpwquality
通过以下命令来判断密码的强度:
[root@localhost ~]# echo "password" | pwscore
Password quality check failed:
The password fails the dictionary check - it is based on a dictionary word
[root@localhost ~]# echo "passworD3&*d" | pwscore
72
[root@localhost ~]# echo "passworD3ab3ioijij" | pwscore
100
2.3 更安全点判断密码是否安全
以上方法虽然可以检测密码是否安全,但是会在shell的历史记录中,有可能会被泄露出去,这就需要另外一个命令:
#会进入交互模式,输入密码给出判断结果
#退出按Ctrl+D
[root@localhost ~]# cat|cracklib-check
abce
abce: it is too short
1218a&aABIJIOJO)
1218a&aABIJIOJO): OK
2.4 密码生成
如果讲究随机性,可以通过以下命令来生成密码,不过这个密码生成的只是随机性好,安全性也一般。
#!/bin/sh
genpasswd() {
local l=$1
[ "$l" == "" ] && l=16
tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}
genpasswd
专业一点的,在不同的linux系统中都有不同的密码生成器,比如mkpasswd
[root@localhost ~]# mkpasswd
gSPhb6;o1
[root@localhost ~]# mkpasswd -l 16
kcs^H4dmkp9neUng
如果有密码生成的需求,调用这个来实现也是挺方便的。
三 普通人设置密码
3.1 根据熟悉诗词设置密码
对于普通人来说,如何设置一个合理的密码那,有些比较有意思的技巧,比如你可以用一首你喜欢的唐诗的信息来设置密码,作者名大写,每句诗句的第一个字母小写,再加上字数,加上标点符号就是强度很高,而且容易记的密码了。
比如:
咏鹅
作者:[骆宾王]
鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。
我们得到的密码: WBWeqbz18,.,. 如果觉得强度不够再加些自己喜欢的特殊字符。
3.2 根据app或网站名设置密码
比如我们需要在各个网站上设置密码,为了保证安全最好设置不同的密码,但是不同的密码又不容易记录,怎么办?我们可以结合网站的名字来设置账号名和密码。
比如在新浪上注册我们可以设置密码为:sina+我们常用的密码,在网易上可以设置163+我们常用密码,不过这样也有一定规律性,可以稍微再变化下,只要总规律不变,就再也不用担心记不住密码了。
另外注册的用户名和网站或APP名相关,也有个好处,就是下次信息被泄露的时候,可以知道哪个网站注册的信息。
四 auth plain 用户和密码加密
其实也不能叫加密,只是用base64编码处理了下,如下:
echo -en "testmail" | openssl base64
dGVzdG1haWw=
#auth plain密码
echo -en "\000testmail\000testmail" | openssl base64
AHRlc3RtYWlsAHRlc3RtYWls
#或者
>>> import base64
>>> b="testmail"
>>> c=chr(0)
>>> print base64.encodestring(c+b+c+b)
AHRlc3RtYWlsAHRlc3RtYWls
网友评论