部分重写密码软件

不知道是左脚站在右脚上, 还是右脚站在左脚上, 我们只知道他站在自己的脚趾上.

自上次初学 Python 写一个自己用的密码管理软件 pgman 已经有一年半了, 存在 的问题有:

  • 交互程序, 不方便其它程序使用.

    比如, 有一个脚本, 初始化所有加密分区. 需要在问密码时, 切到这个程序, 调出密码到剪贴板, 再切过来, 粘贴密码.

  • 密码明文存在内存里, 没有锁住, 容易被交换到磁盘, 造成泄漏.

    这个问题, 其实在目前的是没法严格解决的. 不说密码管理软件, 单使用密码 中, 流程太长, 就如浏览器等, 未必在释放内存前清空密码. 但, 在密码管理 软件中, 少一层不必要的泄漏, 总好一层.

  • 访问安全问题.

    人走时, 未必记得退出此程序, 为方便, 也总是常开着. 虽然设有密码遗忘时 间. 但在别人可访问电脑时, 用 GDB 或 其它内存分析工具可完全获得所有密 码.

五一短假, 本来想用还没学会的 ErLang 练手写一个, 但 ErLang 上手不易, 以 上的问题还是无从下牙. 最后, 还是用 C 写了个.

设计上是, 使用会话加密. 会话私钥不加密地放在 U 盘里, 会话公钥放机器上. 有一个服务程序, 加载原来 pgman 的文件, 这个需要询问永久存储的私钥密码, 用会话公钥加密敏感信息, 保留结构, 存在内存里. 另有一个客户端(现在主要功 能是 BASH 脚本写的), 自动检查并挂载 U 盘, 查询信息, 解密. 服务端返回的 信息, 除状态码外, 都是加密的. RSA 块加密有一个好处是加密信息可以自然串 联起来, 而不必解密.

目前只实现读, 还没有实现写. 写需要在服务端做解密, 写用得不多, 移时再 说.

关于 RSA 加密, 测试显示, OpenSSL 的实现, 4096 位的密码操作时间是 512 位 的 120 倍, 与我所理解的 8 log(8) = 24 倍差太多了, 可能的原因是加密 的主要是短字符串, 4096 位浪费的较多.

下次等熟悉后, 考虑买一个 USB-KEY 吧, 不这样山寨了.