忘记密码管理器的主密码怎么办?

2020 年 7 月 01 日

忘记密码管理器的主密码怎么办?

如果忘记密码管理器的主密码,那会发生什么?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. 不会泄露用户主密码

用户设置的主密码仍然保密。使用安全芯片内部的密钥加密主密码,得到密码文件,交给好友保存,好友也无法破解。

同时,该技术方案在安全性上也对用户提出了要求:不能将密码文件保存在自己的手机上,否则,就像把保险柜的钥匙挂在上面一样,失去了主密码这层保护作用。

2020 年 7 月 01 日 14:18 709

评论

发布
暂无评论
发现更多内容

架构师训练营第六周总结

sunnywhy

猿灯塔:spring Boot Starter开发及源码刨析(六)

猿灯塔

聊聊服务灾备

老胡爱分享

分布式架构 服务设计

解析软件系统稳定性的三大秘密

华为云开发者社区

开发者 软件开发 稳定性 系统 探索与实践

学会使用Vue JSX,一车老干妈都是你的

前端有的玩

JavaScript Vue 前端 技巧 React

static关键字真能提高Bean的优先级吗?答:真能

YourBatman

spring springboot SpringCloud 极客大学架构师训练营 Spring Bean

简述 CAP 原理

柳旭

Doris 临时失效 UML 时序图(训练营第六周)

看山是山

Doris

架构师训练营第6周作业

饶军

「架构师训练营」第 6 周作业 - 总结

森林

架构师训练营第六周作业

sunnywhy

一个成都程序猿写于离开北京一周年与26岁生日的这一天

why技术

生活 程序人生 北漂 成都

NOSQL - 第六周总结

孙志平

CAP 原理及Doris 临时失效的处理过程

Acker飏

极客大学架构师训练营 CAP

学习总结 - 第 6 周

饶军

总结

Kiroro

NOSQL - 第六周作业

孙志平

CAP原则

熊威

CAP

Kiroro

架构师训练营第六周作业

王铭铭

架构师训练营」第 6 周作业

edd

极客大学架构师训练营

Doris临时失效处理过程的UML时序图

周冬辉

Kafka 是如何建模数据的?

tison

大数据 kafka

「架构师训练营」第 6 周作业 - CAP

森林

蟒周刊-429-Python 3.8.4 可用ed

ZoomQuiet大妈

Python 大妈 蟒周刊

详解 Flink 实时应用的确定性

Apache Flink

flink

「1.4万字」玩转前端 Video 播放器 | 多图预警

阿宝哥

前端 流媒体 Video播放器 HLS

MySQL 高可用和分布式数据库(训练营第六课)

看山是山

zookeeper CAP 主从复制 主主复制 MySQL 高可用

CAP原理简介

elfkingw

架构师训练营第六周总结

王铭铭

GaussDB for DWS:内存自适应控制技术总结

华为云开发者社区

大数据 数据湖 内存管理 sql 华为云

忘记密码管理器的主密码怎么办?-InfoQ