密码本可以说是一个非常常见的需求了。
但是想找一个简单好用的密码本却不是什么容易的事,常见的要么是在线服务,需要收费,还时不时传出个密码大规模泄露的问题,就算服务一直稳如老狗,密码一直存在别人机器里总有点不舒服。至于免费的软件,需要费很多功夫搭工具链,搞密码文件多地同步。还得安装软件,还说不定只有桌面端没有手机端,还有 UI 方面,高情商的说是"显得不那么现代"。
说实话,我很烦。
我的密码也不是什么值钱玩意,几张卡里加起来也没几十块钱。还有什么公司邮箱,公司 vpn 这种几百年不见一次的密码,我的要求不高,就是想找个地方能存一下,需要的时候能找到,甚至都不强求一定要够安全。只要不是写到别人脸上那种我都可以。
但是事与愿违,我真没找到,那还说什么,自己动手呗。所以这个项目诞生了:
HoPGoldy/cube-password: 一个简单扁平的桌面 / 移动端密码本。 (github.com)
长啥样?
应用对桌面端和移动端都进行了适配,用起来也算是方便:
创建密码时不仅支持生成随机密码,还可以随机生成用户名,我非常喜欢这个功能,特别是注册那种无关紧要的网站时必须要填用户名的时候。
怎么用?
很简单,首先你得有一台装好了 docker 的服务器,然后敲一下命令:
bash
docker run -d -p 3701:3700 -v ~/cube-password-storage:/app hopgoldy/cube-password
可以了,之后应用就会运行在 3701 端口上,并把数据保存在 ~/cube-password-storage
。啥配置都不用,跑起来内存占用也就四五十M,非常令人舒爽。
如果你想直接放在互联网上用,可以,这东西自带加密让你即使裸跑在 HTTP 上也能保证不被别人扒裤子。但是毕竟是 web 应用,中间人 js 注入之类的问题确实不好防,如果可以的话非常推荐上个 HTTPS,安全感一下子就起来了。
cube-password 本身不支持 https 传输,推荐用前置 nginx 来实现这个需求,模板 nginx 配置文件。
之后直接访问即可,首次打开会让你设置一个主密码,千万别忘了!最好写个纸条塞到你钱包里。然后就可以用了,登录后半小时过期,直接关页面也过期。桌面端移动端通用,功能没啥特别的大家摸索一下就会。
安全么?
虽然我对安全的要求并不高,但是既然开源出来的,咱的标准还是要高一点的,这个项目都用到了哪些安全相关的技术呢:
- sha512、sha256、aes、128 位 nanoid、加盐
- 挑战码鉴权
- 全局登录重试限制
- 防重放攻击检查
- 异地登陆 / ip 地址检查
- totp 二步验证
- 分组加密
- ...
完整的安全说明可以看 这里。
说实话,我的密码学研究的也一般,搜肠刮肚也就能拿出来这些个方案。不过我觉得也是够用了,起码你让我来攻破一下这个应用我还真做不到。别的不说,密码你得记牢一点,忘了之后数据说找不回来那是真找不回来。
当然你要说 ddos 淹一下我也没辙。但是咱往日无怨近日无仇的,nginx 搞个复杂点的路径别人都扫不到这个网站对吧,犯不着担心这个。
用的什么技术栈?
项目采用了 nodejs 全栈,前端 react + antd,后端 koa + sqlit,完全由 ts 开发。后端用函数式实现了一个简单的依赖注入框架。注释也算比较全,想要上手 node 全栈的同学也可以去瞅瞅,大家相互交流。