P-vault 离线硬件密码保管箱 基础架构

  1. 1. 安全白皮书
    1. 1.1. 整体安全架构
    2. 1.2. 密钥结构
    3. 1.3. 最坏的情况

安全白皮书

整体安全架构

  所有的信息都应该被加密,采用对称加密的方式,保证存在库中、同步到服务器中的密码都被妥善加密,即使加密文本被黑客非法获取,也无法在固定的时间内被破解。参考1password等密码保管库的设计架构后,针对离线密码存储的特点,设计如下的加密模式。

  加密算法,因为所有的密码信息均在受限环境(密码硬件保管箱)生成,它的计算能力并没有X86架构的计算机那么强,所以计算中不使用非对称加密算法,同时密钥派生也不能用基于内存的算法,所以针对这些限制,选择了libhydrogen这个库,使用这个库可以避免在加密算法上被攻击,他的作者编写过libsodium,而libhydrogen这个库是用在嵌入式环境中的加解密算法的子集,该库中的代码同样被各路密码研究专家审计过,较为安全,同时,这个库中的算法选择比较单一,该对称加密算法已经接受过全世界的审计,确保没有比较明显的安全漏洞,当然,为了合规要求,未来也会提供SM算法集,用来支持国家安全标准。

  明文信息分为两部分:一为索引,用来对保存的所有信息进行快速搜索,这样对于存储大量密码的用户无需解密所有的信息就可以搜索到需要的信息。二为以不同ITEM存储的密码详细信息,这两个信息在存储中没有安全级别的差距,都采用Gimli轮换加密。区别在于,在用户提供主密码时,将索引数据解密并传送给计算机用以索引(或不传送给计算机,在硬件内索引),而加密的密码除非用户明确要求传输,否则仅在用户确认后,将密码解密,通过虚拟键盘发送到计算机。

密钥结构

  • 主密钥master_key:使用随机生成的32字节的密钥,用来对所有密码信息进行加密,除非用户明确要求,否则该密钥不轮换。
  • 主密码:用户提供的密码,密码使用password-hash生成一个高熵的32字节密码密钥password_key。
  • 数据库密钥database_key:初始化数据库时随机生成的16字符的密钥,使用password-hash生成高熵的32字节密钥,与密码秘钥共同生成加密秘钥,该16字符密钥仅在创建密码库时出现一次,由这16字符生成的32字节密钥存储在硬件的rom中,永不出硬件。
  • 加密密钥:由密码秘钥与数据库秘钥共同生成的32字节密钥,该密钥用来加密主密钥并将加密后的主密钥保存在存储中,加密后的主密钥可以被上传至服务器。
  • 同步主密钥哈希:由于同步使用PC/手机,这些环境下不需要考虑性能,使用bcrypt对主密码进行哈希并存入服务器。

最坏的情况

  同步服务器被攻击的情况:黑客可以获取到你被主密钥加密后的其他密码信息、被加密密钥加密的主密钥信息以及同步主密钥哈希。但黑客想获取密码的明文,有几个选择:

  1. 暴力破解主密钥,这被认为是不可能的。
  2. 暴力破解加密密钥,加密密钥的强度与主密钥相同,这被认为是不可能的。
  3. 暴力破解主密码,同时暴力破解数据库密钥,由于bcrypt的存在,暴力破解主密码较困难,但不排除用户设置简单密码的可能,为了防止这种事情发生,黑客除了破解主密码外,还需要暴力破解一个16字符的数据库密钥,这在可以接受的时间范围内。

  用户的电脑遭受远程控制攻击:黑客有可能在用户的电脑中植入病毒或木马,用户的所有输入均变得不可信,且与计算机交互的所有输出信息均可以被轻易偷窃,为了应对这种状况,硬件保存密码的优势如下:

  1. 密码不会被一锅端,即使用户的主密码泄露:由于密码存在于硬件且任何出去的信息均需要用户按键确认,即使黑客模拟用户要求硬件交出密码,但用户发现操作非本人,则可以拒绝提供密码并发现潜在的入侵行为。
  2. 同步模式、键盘输入模式、单一密码、批量导出等行为采用不同颜色的灯及不同的闪烁频率来让用户确认是否为用户本人的操作,由于批量导出及同步功能使用较少,故用户在看到该行为时可以有效的发现潜在的入侵行为。

  硬件key丢失:硬件key丢失意味着加密后的主密钥、数据库密钥字符、加密后的数据丢失,即便读取这些信息比较困难,拾取到硬件的黑客需要如下方式破解用户信息:

  1. 破解加密密钥或主密钥:32字节的加密密钥破解被认为是不可能的。
  2. 破解用户密码:持有硬件key的情况下,唯一依赖用户的主密码,便可将其他密码进行完全的导出,一个使用强策略的主密码能很好的缓解这种攻击,同时为了安全,我们也会尽量提高password-hash的计算轮次,极大拖延被破解的时间。由于硬件的丢失,用户可以尽早察觉到问题并对保存在内的密码进行修改。