【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

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

  • 2020-07-01
  • 本文字数:3482 字

    阅读完需:约 11 分钟

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


如果忘记密码管理器的主密码,那会发生什么?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-07-01 14:181494

评论

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

性能测试如何创造业务价值

老张

性能测试 技术与业务

「Docker 那些事儿」容器很难理解?带你从头到尾捋一遍

Albert Edison

7月月更

Modbus协议通信异常

神农写代码

王者荣耀商城异地多活架构设计

Fan

架构实战营

毕业总结

Dean.Zhang

如何优雅的写 Controller 层代码?

程序知音

Java 编程 程序员 后端

Python|语言元素、分支结构和循环结构

AXYZdong

7月月更

Mall电商实战项目全面升级!支持最新版SpringBoot,干掉循环依赖

程序知音

Java spring 编程 程序员 后端

疫情封控65天,我的居家办公心得分享 | 社区征文

程序员海军

远程办公 远程开发 初夏征文

Vuex(一)

小恺

7月月更

深刻理解 Linux 进程间七大通信(IPC)

C++后台开发

网络编程 linux开发 Linux服务器开发 C++开发 进程通信

瞧瞧人家用SpringBoot写的后端API接口,那叫一个优雅

程序知音

Java spring 编程 程序员 后端

L3立法试水,为自动驾驶产业带来什么?

脑极体

leetcode 650. 2 Keys Keyboard 只有两个键的键盘(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

JDBC

武师叔

7月月更

大话云原生之负载均衡篇-小饭馆客流量变大了

字母哥哥

Docker 负载均衡 云原生

【算法刷题日记之本手篇】组队竞赛与删除公共字符

未见花闻

7月月更

Web侧防御指南

穿过生命散发芬芳

7月月更 Web防护

秒杀系统设计

库尔斯

架构实战营

Django 表单

海拥(haiyong.site)

django 7月月更

Web2.0的巨头纷纷布局VC,Tiger DAO VC或成抵达Web3捷径

鳄鱼视界

煮饺子与docker、kubernetes之间的关系

字母哥哥

Docker 容器化 #Kubernetes#

linux-riscv-5.17 纯净源码

贾献华

7月月更

服务可见可观测性

阿泽🧸

微服务 7月月更

Python XML-RPC实现简单的远程调用过程

宇宙之一粟

Python 7月月更

旧的Spring Security OAuth已停止维护,全面拥抱最新解决方案

程序知音

Java spring 程序员 微服务 后端

毕业总结

库尔斯

架构实战营

好玩的免费GM游戏整理汇总

echeverra

游戏

【愚公系列】2022年07月 Go教学课程 001-Go语言前提简介

愚公搬代码

7月月更

scrcpy这款软件解决了和同事分享手机屏幕的问题| 社区征文

尼露

电商系统微服务架构

极客土豆

忘记密码管理器的主密码怎么办?_安全_神锁离线版_InfoQ精选文章