密码管理的初步实现

之前写了一版密码管理,主要针对的是对于发送密码方面的安全考虑,今天说的这个是对于密码的统一管理。 

我们的很多密码管理其实是混乱的,很难有规范或者标准,这样就会导致一些很严重的问题,密码这么重要的资源最后受到的重视度很低,对于很多人而言,密码就是一长串字符,没有任何意义,但是它存在的价值就足以压倒一切,如果一个核心业务的root密码我们泄露了,那么问题就是很严重的,或者说,我们把服务器的密码都弄丢了,这个代价就是很高的。 

而且我们有时候密码管理的渠道很多,有些是放在keypass里面,有些是放在记事本里,有些是放在不同的文本文件中,密码的意义是什么,只有指定密码的人才知道,而难点就在于,对于环境的描述和密码有时候是脱节的,也就导致这个环境的密码只有你知道在哪个特定的文件中,通过某种特定的方式去查看,否则没有人知道密码的信息。 

    所以我和同事做了一个简单的密码管理模块,这个模块看起来实在是太简单了,简单到好像就是一些简单的信息维护,除此之外,好像没有亮点,恰恰相反。我们来逐个看一下。

首先密码的存储一定是加密的,也就意味着在数据库中存储的密码应该是加密后的。 我们可以有很多加密的算法,这个可以定制。 

最终我们看到的就是一个基本的密码信息管理界面。 

密码管理的初步实现

在这里我们对安全升级,我们可以有md5等加密方式,但是我们可以指定一个更加动态的方式,比如我们可以为每一个密码生成一个随机字符串,然后以这个随机字符串作为种子来继续加密,这样一来,种子是随机的,得到的随机串就很难**。 所以密码管理界面是看不到真正的密码的。比如上面只显示了随机密码,加密后的密码也不显示。

还有几点,比如对于修改的方面,我们可以修改一些描述和基本配置信息,在这里密码是不可见的,比如都是*********这样的形式。如果要修改密码,可以重新制定,后台会重新根据随机密码来计算得到新的密码。

密码管理的初步实现

如果要删除密码信息,我们可以保守一些,即保持数据不删除原则,我们对于数据维护一个状态,即有效和无效。无效的信息不可见,但是还是在数据库中。在这里密码信息也是不可见的,而且也不可维护。 

密码管理的初步实现

主要的功能就在于我们可以通过一个额外的功能来得到明文密码,也是经过了运算得到。 

密码管理的初步实现

这样做的好处是什么呢,其实如果有1000套环境,我们按照这种方式来映射,就可以通过后台跑批量任务来校验密码信息是否正确,然后我们可以基于这个做密码的维护和更新,统一管理起来。 

如果不出意外,原来的这种工作可能至少得花费你一摊,现在分分钟就可以搞定。