从破解公司HP Web Jetadmin 的管理员密码想到的加密密钥

HP如我在英文博客How to get back the default admin access to HP Web Jetadmin 所写的那样,由于HP惠普公司在它的 Web JetAdmin 中存储认证密码的特殊性,通过用自己熟知的密码来覆盖它加密的管理员密码,从而十分容易就取得这个软件的管理员的权限。其实,除了稍微嘲笑一下HP的可笑之外,这也不是什么大不了的。第一,没人在乎取得 HP Web Jebadmin 的管理权;第二,我说的方法毕竟要先有登录到安装该软件的服务器的权限。只是想通过这件事来提醒一下必须运用加密运算的程序员。

先说一下怎么回事吧。今天下午,一个同事过来问我有没有办法帮她找回她遗忘的HP Web Jetadmin (一个网络打印机管理界面)管理员密码。我登录到装有 HP Web JetAdmin 的服务器,进到安装目录 C:/program files/HP Web Jetadmin,发现有个子目录叫 auth,里面有个文件叫 local.user 。用文本编辑器 WordPad 打开一看,果然是登陆的用户名和密码信息。不过,那些密码都是加密的。显示的格式是这样的:

Admin:$6–G7:6a206d14000a7c2bc3cd3358153cffb5
admin:$6–G7:6a206d14000a7c2bc3cd3358153cffb5
User1:$x–F8:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
User1:$x–F8:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


由于我的同事知道那个User1的密码,所以一个简单地将User1:后面所有的字符复制再粘帖到Admin:后面的行为就解决这个问题了。

那么怎么可以提高安全性从而防止此类事发生。其实这就应从密码加密所用的Key说起。众所皆知,一个完善的加密技术(encryption),一般涉及两个方面:1)加密运算方式(algorithm);2)加密用的Key。一般认为只要算法到位,能做到不可逆算(decryption)就可以了,不管是Hash 还是 Blowfish。而在运算使用的Key上面就没有那么在意了,至少上述的那个例子里的HP Web Jetadmin就没有好好利用。

来点具体的例子:比方HP用的是MD5算法,然后用Jetadmin这个固定字符为加密运算的key,这样可能一个简单的 abc 字符加密后成一个奇怪的字符 6789Rxsdj。而且每次HP Web Jetadmin在验证用户时,都是将用户输入的普通字符再通过同样的算法和同样的key进行加密运算,将算出的字符与原存的加密字符比较就可以决定密码输入是否准确。所以,就算原来我们忘记的admin用户名的密码本是def,但我们将它所存的加密字符换成我们知道意思的6789Rxsdj字符。到时在输入密码时我们的 abc 肯定会变成 6789Rxsdj,这样就会成功地达到破解不知道的密码的目的。

但是,想像一下,如果在上述密码加密中将密钥换成变动的而不是固定的,就会有不同的效果。我推荐的做法就会用用户名来做运算的Key,同样的 abc 字符、同样的MD5算法,但由于用不同的Key,产生的加密字符每次就会不同。这时,就算将另一个用户加密后的密码替换到admin上,但是由于使用的密钥不同(上次用的Key是user,这次是admin),一样输入的abc到admin这个用户名上就不会产生6789Rxsdj了。

虽然说,HP这事最根本的问题不是密码的算法,而是用户名和密码的存储方式。但我们作为程序员在设计加密时,还是应多考虑考虑一下使用变动的Key为好。

5 Responses to “从破解公司HP Web Jetadmin 的管理员密码想到的加密密钥”

  1. Gia Keckler

    Great post. I was checking continuously this blog and I am inspired! Extremely helpful info specifically the closing part I maintain such info a lot. I was seeking this certain information for a long time. Thanks and best of luck.

    [Reply]

Leave a Reply

Your email address will not be published. Required fields are marked *