我想自己实现一个“密码管理器”

2014-12-26 13:18:56 +08:00
 gno23x
我想自己造个“密码管理器”的轮子,通过Web实现,不考虑类似LastPass的自动填充的功能,只用于存储密码。

我初步设想是这样的:

- 只需要记住一个密码,暂且称之为“last pass”好了。
- “last pass”通过PBKDF2函数生成一个key,这个key用于AES加密,这个key我们称之为“PBKDF2 key”
- “PBKDF2 key”用来加密(使用AES算法)另一个key,这个“另一个key”我们用来加密(也是使用AES算法)我们在各个网站的登录密码(或其它需要加密的密码),“另一个key”我们称为“password key”
- 需要一个密码(比如GitHub的登录密码)的时候,输入“last pass”,通过PBKDF2函数得到“PBKDF2 key”,然后用“PBKDF2 key”去解密加密后的“password key”,最后通过解密得到的“password key”去解密我们存储的密码
- 全站https

除了密码管理以外,还有一个想整合进去的功能,就是为每个网站生成一个唯一的用户名,增加社工的成本。

不知道这个设计有没有缺陷,想听下大家的看法。 :)
6325 次点击
所在节点    奇思妙想
46 条回复
4everLoveU
2014-12-26 13:31:41 +08:00
不太懂,唯一的疑问就是密码输入框输入的不都是暗文吗?你怎么知道用户输入的是“last pass”?
gno23x
2014-12-26 13:33:57 +08:00
@4everLoveU 存储的密码都是加密过的,用户输入了“last pass”后能解密得到需要的密码,用户输入的“last pass”就是正确的。具体的加解密流程看我的描述。
tojoevan
2014-12-26 13:44:28 +08:00
应该属于非对称加密方法吧,可以度娘下,有很多。
lsmgeb89
2014-12-26 13:51:46 +08:00
你不觉得很麻烦吗?LastPass 这种,都不需要输,直接快捷键或者自动输了。
nicai000
2014-12-26 13:54:12 +08:00
我一直在用自己的密码管理器
gno23x
2014-12-26 13:56:08 +08:00
@lsmgeb89 嗯嗯,可以理解为实现一个LastPass出来。用自己电脑的话,密码是可以通过浏览器记住的,并且很多网站登录态都可以维持一段时间,所以从“密码管理器”中复制一下密码也不算太费事。

就是不想用LastPass,没有原因。
gno23x
2014-12-26 13:56:33 +08:00
@nicai000 可以分享一下设计思路不?
9hills
2014-12-26 14:00:08 +08:00
不如用这个,每次动态计算。。也不用去存
http://flowerpassword.com/
gno23x
2014-12-26 14:18:31 +08:00
@9hills 貌似这个暴力破解的成本比较低?我知道你用的是“花密”,一般你用于qq密码的代号就极有可能是qq,“记忆密码”一般还是比较简单,比较容易穷举出来。(当然,这个容易是相对的,也不是特指穷举qq的密码)
tt7
2014-12-26 15:24:15 +08:00
@gno23x 如果把花密的算法改成使用者提供呢? 对于普通用户而言, 可以在后台提供多种算法, 选择加密算法的算法由用户提供, 提供的方式可以很简单, 比如回答一系列问题, 或者画一个自定义的图形。
wadezhao
2014-12-26 15:47:40 +08:00
keepass是开源的,直接用人家久经考验的算法不好么……………………


自己造个外观漂亮的界面就好。
wolfan
2014-12-26 15:50:58 +08:00
我觉得可以改造花密将记忆码设为一个固定值,区码改为自动获取DNS主域段。自动完成应该也不错。
KiseXu
2014-12-26 15:53:50 +08:00
@wolfan 花密的chrome扩展就是这样的
omegaga
2014-12-26 15:57:37 +08:00
@gno23x 看上去就是1password的思路,不过为什么要多一层password key呢?是为了使每一个密码都有独立的AES加密的密钥吗?这样的好处是什么?
gno23x
2014-12-26 16:00:58 +08:00
@tt7 如果是自己用的话,自己搞一套算法的话相对就没那么容易被暴力破解了。问题就是如果算法因为服务器入侵啥的被知道了,就和花密一样了。因为是自己用的,所以考虑得比较极端,哈哈。总的来说,你这个思路还是足够安全的。
gno23x
2014-12-26 16:04:12 +08:00
@wadezhao KeePass使用C#写的,你说的造个界面是GUI吗?可是它无法跨平台。
gno23x
2014-12-26 16:08:31 +08:00
@omegaga 如果只是用“PBKDF2 key”(“last pass”通过PBKDF2函数生成)去加密我们存储的密码的话,那如果你要修改“last pass”的话,就必须解密所有已存储的的密码,然后再用新的“PBKDF2 key”去加密。

有了“password key”后,我们修改“last pass”后,只需要用新的“PBKDF2 key”重新加密一下“password key”就行了。

:)
gno23x
2014-12-26 16:10:12 +08:00
@omegaga 上面还没说完,所有密码用的都是同一个“password key”,这个“password key”用“PBKDF2 key”加密。
zix
2014-12-26 17:29:53 +08:00
目前在Linux、Windows都是用keepassx,觉得还是挺不错的,看了下,keepassx也支持Mac os
zix
2014-12-26 17:30:47 +08:00
@zix 不过是本地存储来着……当然我用Dropbox在不同平台上同步

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/156853

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX