定阅RSS 繁体中文 设为首页 加入收藏
站内搜索
黑客文章 黑客下载
您所在的位置: 广西安全网络 >> 黑客文讯 >> 工具详解 >> 正文
红客眼中的OpenSSL:强大的密码工具
作者:佚名 来源:不详 更新:2008-4-8 4:23:38  点击:

2008-4-8  

 

快速整洁的加密

尽管这不是OpenSSL的强项,但它也能加密文件,灵活的OpenSSL做这件事要比GnuPG复杂一些。

OpenSSL默认选项比较少,因此要使用更多的选项,也有许多算法可供选择,一些算法如DES和RC4-40,只是为了向后兼容,现在不应该再拿来使用了,你应该使用强壮的算法如bf(它是Blowfilsh算法的简称)和-aes-128-cbc(它是美国NIST高级加密标准—AES,运行在CBS模式下使用128位密钥)。

这里有一个例子:
$Content$nbsp;openssl enc -aes-128-cbc < filename > filename.aes-128-cbc
enter aes-128-cbc encryption password:
Verifying - enter aes-128-cbc encryption password:
与GnuPG一样,OpenSSL要求提供2次密语,并且不会回显到屏幕上。

解密也比GnuPG更复杂一点:
$Content$nbsp;openssl enc -d -aes-128-cbc -in filename.aes-128-cbc > filename
enter aes-128-cbc decryption password:
注意例子中的-d参数,它意味着解密。

OpenSSL与GnuPG不一样,不能自动检查文件的类型或者使用了什么算法也不知道、也不清楚加密文件使用的密钥的长度和模式。你需要自己保存一个跟踪记录,在我的例子中,我将这些信息放在文件扩展名里了,OpenSSL不能为你管理文件和文件扩展名,你不得不指出输出数据写入的位置。

如果你没有指定正确的算法,OpenSSL可能输出一堆垃圾信息也可能产生一个看不懂的数字,无论怎样,没有正确的给出选项,你的数据就不能正确地解密。

密语

在我们更进一步之前,我们应该先讨论一下密语的重要性,在大多数加密系统中,密语是保存了其他机密的秘密,它通常是最薄弱的点,因此,创建一个强壮的密语是很重要的,但是这也很困难,除非你有好用的工具,使用OpenSSL你就能快速地创建一个强壮的密语。

一个对密语简单的指导就是长度与优势的比较表,8个字符不够长(表1),目标是创建一个保密性强的而且你又能记住的其他人又不知道的密语,不能靠猜或最后偶尔发现。
表1 密码和密语被破解的估计时间强度比较,注意:破解时间是比较粗糙的。 

产生一个密语

OpenSSL能创建非常强壮的随机密语:
$Content$nbsp;openssl rand 15 -base64
wGcwstkb8Er0g6w1+Dm+

如果你运行了这个例子,你的输出将与这里的输出不同,因为密语是随机产生的。
第一个参数15是产生的二进制字节数,第二个参数-base64指出那些二进制字节应该用基于64位字符编码,对于15字节而言,输出总是20个字符,加上一个新行字符。

基于64位字符设定了只由大写和小写的字母A-Z,数字1-9和3个标点字符:加号、斜线号和等号。这是一个有意的字符限制设置,更复杂的字符设置不是必需的,仅仅增加一个额外的字符使得安全变得不同,例如:一个8位字符完全可打印的ASCII密码大约与一个9位字符基于64位字符编码的密码强度相当。

尽管可以使用openssl rand快速生成密语,但是专业的密语生成器生成强壮的并容易记忆的密语,我强烈推荐使用它。

加密密码

还有一些事情是GnuPg不能做的,OpenSSL内置了一个命令用来创建加密的linux密码,就象/bin/passwd一样。

跳过这个段落避免陷入钻牛角尖的密码术,尽管通常叫做加密,linux密码实际上使用的是MD5或旧的UNIX密码打乱机制(基于DES加密算法),这就允许linux不知道你的密码,即使你提供了正确的密码让它知道了。当你设置你的密码时,linux打乱你的密码并保存在/etc/shadow中,当你登陆时,linux提取你输入的密码并再打乱一次,再与保存在/etc/shadow中的进行比较,如果匹配你提供的就是正确的密码,你就能登陆,如果不匹配,你也不清楚密码是好多了,因为存储的是打乱后的数据,计算机也不会知道你的密码是好多,反正你是不能登陆进去的。

这就是为什么打乱你自己的密码有用了,假设你在另一个计算机上需要一个新密码,或许它是一个新账号或你忘记了旧的密码让管理员给你重设密码,如果你能亲自告诉管理员,那么没有问题,但是如果管理员不在怎么办呢?或许你从来都没有和管理员见过面,你怎么传输你的新密码?电子邮件是不安全的,电话可能要好一点,邮寄一封信可能要好几天(可能会有其他安全问题),传真机,文本消息和大多数纸张上的东西是不安全的。

更糟糕的是,你可能不信任那个管理员,当然,管理员通常就是root,但是其他人可能知道你的密码,或许你象在其他机器上使用相同的密码,并且你也不信任那些机器的管理员。
因此,使用下面的方法:

$Content$nbsp;openssl passwd -1
Password:
Verifying - Password:
$1$zmUy5lry$aG45DkcaJwM/GNlpBLTDy0

输入2次密码,它不会回显的,如果你有多个帐户,就运行多次上面的命令,输出的内容就是密码加密后的结果,由于采用的是随机加密,每次运行结果都是不一样的,即使密码是相同的。

在我的例子中,密码打乱后是这样的:
$1$zmUy5lry$aG45DkcaJwM/GNlpBLTDy0
你的密码打乱后可能与这里完全不同,除了开头的$1$。

打乱后的密码【译者注:实际上通常我们叫做hash值】就能用于电子邮件、传真、文本消息甚至通过电话交谈传输给管理员了,管理员据此可以重新设置你的密码hash值。

在管理员收到你的密码hash值后,它可以手动修改/etc/shadow或使用chpasswd命令,后面需要一个临时的新文件,叫做newpassword,你的登陆Id和密码hash值象这样:

LoginidHere:$1$ywrU2ttf$yjm9OXTIBnoKJLQK2Fw5c/
这个文件可以包括多行,为其他帐户提供类似的功能。

然后,管理员作为root登陆运行:
chpasswd --encrypted < newpassword

现在,新密码已经设置好了,一旦你登陆后立即修改你的密码是个好主意,除非你使用的是一个强壮的密语,这是因为密码hash值,一旦暴露,就成为离线强制破解的对象,除非这个密码是真的很长。

这个设置密码的方法是相当安全的,例如:使用这个技术,某个人能获取到密码hash值,创建一个账号,并知道登陆id和主机名,但是只有原先创建这个用户的人才知道密码,即使这个账号的密码hash值发布在杂志上也不用担心。

顺便说一下,那个hash值对应的密码是完全随机的基于64位字符编码的28位长,因此要破解它是非常困难的,但是请注意,不要用那些密码已经公布出来的hash值创建账号,如:
HXzNnCTo8k44k8v7iz4ZkR/QWkM2

密码和hash值象下面这样创建:
$Content$nbsp;openssl rand 21 -base64
HXzNnCTo8k44k8v7iz4ZkR/QWkM2
$Content$nbsp;openssl passwd -1 HXzNnCTo8k44k8v7iz4ZkR/QWkM2

这些例子使用MD5密码hash值,目前通用的linux系统都是这样,如果你需要使用旧的UNIX系统hash值,只需要去掉-1参数,例如:
$Content$nbsp;openssl passwd
Password:
Verifying - Password:
xcx7DofWC0LpQ
最后这个密码hash值的密码是:TheLinux

上一页  [1] [2] [3] 下一页

上一页  [1] [2] [3] 下一页


转截请注明:来自 广西安全网络 Http://www.gxfa.com

数据载入中,请稍后……