如果忘记密码管理器的主密码,那会发生什么?Scott Stein 在 cnet 上发表了一篇文章描述这种事:主密码忘记后,再也打不开密码管理器,结果存储的密码都丢失了。这种痛苦经历让人久久难忘。
相信不少人都深有体会,对于像微信这种平时都不需要输入密码的平台,久而久之就忘记密码了(记得自己微信密码的小伙伴可以点个赞,看看有多少)。密码管理器也是如此。如果用户习惯用指纹识别解锁,或者一段时间没有输入主密码,就很容易忘记。
一、为什么需要主密码
最早的第一代密码管理器,仅仅能够帮用户保存密码,以免遗忘,并不具备保护密码的能力。
直到大约 20 年前,PBKDF2(Password-Based Key Derivation Function 2)
被推荐为标准算法,它能将用户输入的密码转换成复杂随机的密钥,满足用户对数据加密的要求。
在这个技术的推动下,第二代和第三代密码管理器纷纷诞生,给密码存储带来了真正的保护。其原理都是先要求用户设置一个主密码,然后把主密码转换成密钥,再使用高强度加密算法(如 高级加密标准AES)来加密用户保存的密码。如下图所示,
使用主密码加密的技术原理
密码学中,
plaintext
表示要被加密的原始数据;
ciphertext
表示加密后的密文。
解密过程第一步是相同的,第二步则是调用加密算法的解密操作,得到原文plaintext
,如下图,
使用主密码解密的技术原理
具体技术原理在 密码管理器的进化史(上)中有详细讲解,这里不再展开。
本质而言,密码管理器加密数据,必须依赖于只有用户自己可以控制的秘密信息,以防止被黑客盗取。
我们的密码管理器——神锁离线版,不依赖主密码生成加密密钥,而是直接使用存储在安全芯片内部的密钥。即使加密数据被黑客偷取,也无法解密。技术原理在 密码管理器的进化史(下)一文中有详细讲解,这里也不展开。
注:现代智能手机的中高端机型都配备了安全芯片。Apple Pay、安卓手机的钱包应用(可以模拟银行卡、公交卡等 NFC 支付),都是基于安全芯片的安全能力。
除了使用安全芯片加密保护外,神锁离线版还为用户提供了额外一层主密码保护(用户可以自己选择是否使用)。如果用户选择再加一层主密码保护,那他们可能也会遇到 CNet 作者 Scott Stein 分享过的问题——忘记主密码导致丢失了所有保存的密码。我们团队认为,密码可用性与保密性是同等重要的,所以此问题必须要重视。
一些密码管理器服务商(比如谷歌),允许用户在忘记主密码时重置主密码,然后继续查看存储的数据。这说明用户设置的主密码实际上只是用来限制访问,并没有用于保护数据。
我们团队不会在安全性上作出妥协,因此也决不会采用这样的技术。既然不能够直接重置密码,那么在用户忘记主密码的时候,能不能找回密码呢?
二、找回密码的设计
(一)技术原理
一些社交服务允许用户,在忘记密码导致无法登录时,通过好友协助找回账号。其原理是,让用户利用社交关系,邀请好友完成一些操作,以确认用户的真实身份。
受此启发,我们有了一个简单的想法:请好友协助找回密码,然后依此出发,逐步完善。
1.好友代保存密码
一开始最容易想到的方法是:请好友帮忙保存密码;恢复时,找好友要回密码,就可以解锁了。这就好比在生活中,将家里的钥匙交给好友临时保管。
显然,把密码直接发给好友,并不安全。很多用户有重用密码的习惯,一个密码泄露,可能危及用户诸多账号的安全。
2.加密后请好友代保存
这是一个好主意,问题是加密密钥该如何选取,让用户再设置一个密码来生成密钥?那就变成无限套娃了。
如果不依赖其他秘密信息进行加密,就只能写死密钥,这是某些密码管理器曾经犯过的错误,我们不能重蹈覆辙。
3.使用安全芯片内部密钥加密密码,将密文发送给好友
如下图所示,
请好友保存密码文件
由好友保存密码文件
(ciphertext
),密钥key
保存在安全芯片内部。找回密码的时候,请好友将密码文件
发送回来,再通过安全芯片就可以将密码原文解密了。如下图所示:
找回主密码解锁 App
得到密码后,再按照前面的技术原理,解密用户保存的其他数据。为了进一步提升安全性,我们要求好友将密码文件
保存在神锁离线版中。神锁离线版会采用手机上的安全芯片加密保存的密码文件
,确保黑客无法偷取。这样,整体安全性就得到双倍提升,因为:
如果黑客偷了用户的手机,他需要先解锁手机(输入手机锁屏密码或者通过生物验证)。然后再输入主密码才能解锁 App。
如果黑客不知道主密码,他只能再偷取该用户好友的手机,并且破解好友手机上的神锁离线版,从中将密码文件
发送回来,才能解锁 App。
如果黑客只是偷取了好友保存的
密码文件
,他没有密钥,也无法解密出密码原文,更不能解密 App 数据。
完成这个技术方案的设计后,我们可以允许用户邀请不止一位好友协助找回密码。
(二)实操体验
说了这么多技术原理,可能还是太过抽象,下面结合图片做操作讲解。
1.进入找回主密码设置界面,输入好友名字,点击发送。如下图:
2.通过邮件或其他通信工具将密码文件
发送给好友。好友收到后,需要使用神锁离线版将它保存起来,防止黑客偷取。如下图:
3.解锁 App 时,用户如果忘记了主密码,可以查看持有密码文件
的好友列表。如下图:
4.请好友zhangsan
将密码文件发送回来,用神锁离线版打开,就可以解锁 App。出于安全考虑,要求用户立即修改解锁方式。如下图:
如果双方都使用 iOS 系统,可以直接使用 AirDrop 发送给对方,并使用神锁离线版直接打开,无需其他服务中转,更加安全。
(三)技术对比
1.社交服务好友协助找回账号
虽然我们借鉴了社交服务的思路,都是邀请好友协助,但是社交服务要求好友非常可信。否则,好友们可以串谋:假冒我忘记密码,一起按照社交服务的找回账号流程完成社交身份确认,然后入侵我的账号。
本技术方案降低了对好友信任度的要求,因为好友们都只有密文,即使一起合谋,也无法解密出原密码,更不可能破解数据。而且,用户如果忘记了密码,只要请一个好友把存储的 密码文件
发回来即可找回密码。
2.可以重置主密码的密码管理器
前面已经对这类密码管理器做过简单分析,二者共同之处是,在忘记密码后,都可以恢复用户保存的数据。但方法完全不同:
这类密码管理器可以重置主密码,只需要验证用户身份,即可重新授权用户访问存储的数据。所以用户存储的数据并不依赖于主密码加密(如果有加密的话),而是完全依赖于服务商的控制和保护。
本技术方案,不可以直接重置主密码,数据保护仍然依赖于该密码加密。
本技术方案还增加了备选方法,将主密码加密后,交给好友保存。好友协助时,也是先解密出原来的主密码,再使用主密码解密保存的数据。
3.不可重置主密码的密码管理器
这类密码管理器没有在数据保密性上作出妥协,因此不能够重置主密码。本文提出的技术方案在这点上是完全相同的。
不同之处在于,本技术方案还提供了一个备选方式找回密码。在不泄密的同时,提升了数据的可用性。对比技术原理图 3 和图 8,新技术方案在用户忘记主密码时,可以先从 密码文件
中解密出主密码,在解密得到主密码之后,接下来的技术原理完全相同。
(四)安全风险
本技术方案增加了用户找回密码的新选项,这也意味着增加了一个新的攻击面。
之前,黑客获取并破解手机后,还需要输入主密码,才能解密用户的数据。
现在,多了一个可能,黑客如果可以获得好友保存的密码文件
,也可以解密用户的数据。
为了降低这个风险,神锁离线版要求好友将密码文件
保存在神锁离线版 App 中,使用安全芯片保护。这样,黑客就不能简单地偷取密码文件
,而需要完全破解好友的神锁离线版 App。
另外,用户不应该把密码文件
保存在自己的手机上,就算要通过手机存储空间或者手机上其他 App 中转才能发给好友,也应该在好友接收后立即删除。如果手机上留有密码文件
备份,那么黑客破解手机后就可能直接使用密码文件
解锁 App。
三、总结
经过几轮的技术完善,最终方案实现了几个重要目标:
1.提高了数据可用性
数据可用性,是密码管理器的最重要的关键性能指标之一,与保密性同等重要。通过这个新方法,忘记主密码时,还可以找好友协助,找回密码,恢复数据。
2.没有在数据保密性上妥协
数据的保护仍然依赖于用户控制的秘密信息,不可直接重置。好友协助找回密码后,使用解密出来的原密码进行下一步解密,没有削弱保护能力。
黑客如果破解了用户的手机,还需要进一步破解好友的神锁离线版并取得密码文件
,才能破解用户保存的密码。相当于破解难度加倍。
3.不会泄露用户主密码
用户设置的主密码仍然保密。使用安全芯片内部的密钥加密主密码,得到密码文件
,交给好友保存,好友也无法破解。
同时,该技术方案在安全性上也对用户提出了要求:不能将密码文件
保存在自己的手机上,否则,就像把保险柜的钥匙挂在上面一样,失去了主密码这层保护作用。
评论