Linux操作系统
一、口令文件
用户:基础口令文件--/etc/password 用户信息,仅指明口令存放位置,即shadow中
口令文件-----/etc/shadow 实际存储了密码,只有root可读,影子文件
二、口令文件格式
1、password格式
每一行代表一个用户记录,不同字段间用:隔开,7个字段:
注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序
2、shadow格式
用户名:加密后的口令字符串:口令最后修改时间距1970.1.1的天数:口令能被修改之前的天数(防止修改口令,回到老口令):口令必须被修改之后的天数:口令期满之后的天数:保留
三、安全机制
由密码域&id&salt&encrypted中id指明,常见id=1,即MD5加密.
另id=5是SHA256,id=6是SHA512.详细流程总结如下:
1、crypt_make_salt的子函数gensalt(salt_len)生成固定长度随机可见字符串salt
2、salt带入crypt函数中生成密码
相关参考:http://linfengdu.blog.163.com/blog/static/1177107320119209614584/
Windows操作系统
一、口令文件
%systemroot%\system32\config\sam
二、口令文件格式
NT系统打开之后是加密后的乱码,注册表中的 HKEY_LOCAL_MACHINESAMSAM HKEY_LOCAL_MACHINESECURITYSAM 保存了SAM文件的内容,
在正常设置下仅对system是可读写的。
SAM保存了两个不同口令信息:LANManager(LM)口令散列算法和加密NT版
三、安全机制
LM对口令的处理方法是:如果口令不足14位,就用0把口令补足14位,并把所有的字母转成大写字母。之后将处理后的口令分成两组数字,每组是7位。
然后由这两个7位的数字分别生成8位的DES KEY,每一个8位的DES KEY都使用一个魔法数字(将0x4B47532140232425用全是1的一个KEY进行加密获
得的)再进行一次加密,将两组加密完后的字符串连在一起,这就是最终的口令散列。
正式的口令(加密NT版)是将用户的口令转换成unicode编码,然后使用MD4算法将口令加密,相比之下用这种方法就要安全得多了。
之所以保留两种不同版本的口令是由于历史原因造成的,在一个纯NT的环境中应该将LAN Manager口令关闭。因为LAN Manager口令使用了较弱的DES
密钥和算法,比较容易破解。相比较之下,使用较强加密算法的NT正式口令要安全些。
相关参考:http://tech.sina.com.cn/c/4306.html