开源密码管理器更安全吗?(2)
- 密码管理器怎样保护我们的密码?
加密原理
密码学历史悠久,常用于古代军事通信。
3000 年前姜子牙就发明了阴符,2000 年前罗马帝国诞生了广泛使用的凯撒密码。这些都称为古典密码,通常使用替换法或者移位法。古典密码非常容易破解,只要得到密文,即使不知道加密方法,也能通过频率分析,暴力破解,得到原文。
20 世纪后期,现代密码学诞生,很快成为了计算机时代数据安全的基石。对于需要加密的数据(明文 plaintext),使用一个随机密钥(key),进行一系列复杂的计算(加密算法),得到加密后的数据(密文 ciphertext)。只需要保证密钥 key 不泄漏,即使知道加密算法,也无法从密文得到明文。
密码管理器存储和管理我们所有的密码,安全至关重要,那到底是怎样保护着我们的密码呢?
密码管理器一般要求用户设置一个主密码
,并严格保密。在 密码管理器进化史(2/4) 一文中,我们详细讲解了第二代密码管理器使用现代密码学算法加密数据的方法。常见密码管理器加密的关键步骤如下:
master password
, 用户设置的主密码
,要求用户保密PBKDF2
, Password-Based Key Derivation Function 2 把主密码
转换成加密密钥key
的算法key
, 加密密钥,从主密码
计算出来account data
, 账号数据,明文,需要加密AES
, 大多采用 AES 加密算法,常被市场宣传为“军事级”加密算法,是目前最安全的算法之一ciphertext
, 密文,加密后得到的数据,也就是密码管理器保存的加密数据库
采用 PBKDF2
或其他密钥生成算法,数据安全就从要求key
保密,转换成了要求主密码
保密。打个比方,我们的密码就像放进一个保险箱(加密数据库
)中,主密码
就是这个保险箱的钥匙。
常见加密错误
目前市面上的密码管理器产品繁多,然而很多厂商,甚至包括一些知名的,历史悠久的密码管理器厂商,不具备足够的安全技术技能,不会正确的使用密码学算法,也不懂安全设计。TeamSik团队在2016年分析了市面上很多密码管理器,发现常见的错误有:
密码管理器存储主密码
应该确保只有用户知道主密码。密码管理器,无论是以明文形式还是加密形式,存储主密码,都会增加泄密风险。
自行发明加密算法
设计一个自己不能破解的加密算法很容易,设计一个所有人无法破解的加密算法,而且正确实现,非常非常困难。所有密码管理器开发者都不应该自行发明加密算法。
使用固定的加密密钥
固定的加密密钥相当于,每把锁都使用相同的钥匙。这意味着所有用户的加密数据,可以被任何人解锁。
上图是 TeamSik 发现的一些密码管理器的漏洞,第一行Master/PIN
关于存储主密码和自研加密算法,第二行关于固定加密密钥(其他漏洞不属于加密错误)。
主密码
或加密密钥
一旦泄露,将威胁到保存的所有密码,密码管理器任何时候都绝不应该“私下配一把钥匙”。作为用户,挑选密码管理器产品时,需要详细了解产品的安全技术,而非一味依赖所谓的“名牌”效应。
开源密码管理器提高了透明度,给有能力的用户机会审查开发者是否正确使用了加密算法。我们公开详细讲解密码管理器的加密算法,希望帮助用户增加对“神秘”的加密算法的了解,也能和更多密码管理器开发者一起讨论并提升安全设计水平。
解锁因素
我们从密码管理器加密的原理可以知道,常见的第二代密码管理器解锁时,需要主密码
和加密数据库
,缺一不可,我们称之为解锁因素。
很多密码管理器告诉用户:只要保护好主密码
就不会泄密。由于现实中仍然存在很多主密码
泄露的风险:
为了方便记忆和输入,人们习惯设置更短更简单的密码
人们还是会在其他场景重用
主密码
,增加了泄密的可能性使用了不安全的输入法导致
主密码
泄密很多手机输入法都会记录用户的每个操作(包括输入的每个字符)
输入时被人录像(手机摄像头真是太强大了)
显而易见,同时保护主密码
和加密数据库
更加安全,暴露任何一个因素,都会增加泄密风险。用户和密码管理器都应该尽力保护这两个解锁因素。
增加更多解锁因素,可以提升密码管理器的安全性。
密码管理器大多使用双因素解锁(主密码
+加密数据库
),KeepPass 引入解锁文件(key file)把解锁因素提高到 3 个,有利于提升安全性。
在密码管理器的加密算法中,我们详细讲解了密码管理器的加密设计如何通过增加解锁因素来提升安全性。
有些基于云的密码管理器厂商提供了双因素登录验证(2 factors authentication),第 2 个登录验证并不能用于加密数据,并非这里所说的解锁因素。
威胁模型和攻击面
解锁因素越多越安全,但是很多密码管理器一味强调只要保护好主密码
,不重视其他解锁因素(如加密数据库
)的保护,仍然会增加泄密风险。让我们从威胁模型和攻击面的角度来分析。
威胁模型是指软件可能面对的威胁或风险。威胁对不同人是不一样的,有些人可能很担心女友翻看自己的手机,也有人会和家人共享电脑和电脑上保存的密码。用户需要根据自己的需求选择密码管理器产品。
攻击面是软件提供功能时,可能被黑客用来攻击软件的地方,黑客可能非法给软件输入恶意数据,或者从软件中获得敏感数据。软件安全的基本原则就是攻击面要尽可能小,越小越好。
我们知道,解锁因素是密码管理器的关键。不同场景下,密码管理器对这些因素的保护差别很大。
社交圈
很多电脑版,浏览器插件版、网页版密码管理器都会长期保持解锁状态,社交圈子的人(家人、朋友、同事等)有可能查看你的电脑上保存的密码。
手机版密码管理器相对好一些,手机都会自动锁定,手机上使用生物验证也比输入密码容易。
Image by Peggy und Marco Lachmann-Anke from Pixabay
威胁模型评估:
空闲一段时间后,密码管理器是否会要求验证使用者?
恶意软件入侵
电脑上,加密数据库
存储在硬盘上。这也会暴露一个攻击面,大多数软件,包括恶意软件,都可以随意读取。恶意软件还可能劫持键盘输入偷取主密码
,有些电脑版密码管理器采用一些复杂技术增强主密码
输入的保护,提高偷取难度。但是大多数浏览器插件版密码管理器,受浏览器平台的技术限制,没有能力防范恶意软件,是最不安全的。
相对而言,手机版密码管理器要安全得多。手机操作系统提供了沙盒保护,即使是恶意 App 也不能随意访问另一个 App 的内部数据。密码管理器把加密数据库
存储在 App 内部,就可以防范绝大多数恶意软件偷取。不过 Android 操作系统还允许 App 把数据保存在公共存储区,如果密码管理器这样做,也会暴露这个攻击面,被恶意软件窃取。另外如果使用了恶意输入法 App 输入了主密码
(很多 Android 输入法同时也可以读取公共存储),也可能泄漏主密码
。
没有沙盒保护和有沙盒保护
威胁模型评估:
电脑版密码管理器是否强化了
主密码
输入的保护?手机版密码管理器是否把数据存储在 App 内部
电脑和手机操作系统都存在安全漏洞可以被利用,有的安全漏洞甚至允许恶意软件获得系统最高权限,从而绕过沙盒保护,偷取其他 App 的内部存储数据。密码管理器对此无能为力,需要我们及时安装系统安全补丁,减少泄密机会。
设备丢失
如果电脑或手机被黑客拿到,需要先解锁登录设备,然后打开密码管理器软件并输入主密码
,才能看到保存的数据。但是有些 Android 手机系统,可以在没有解锁的情况下,直接通过数据线读取公共存储区的数据。如果密码管理器把加密数据库
保存到公共区域,会增加泄密风险。
威胁模型评估:
手机版密码管理器是否把数据存储在 App 内部
同时我们也应该设置复杂的设备解锁密码和
主密码
,降低风险。
网络
基于云的密码管理器必须联网,甚至有些离线密码管理器(比如 enpass)也会联网。如果使用网络,厂商的工作人员就可以查看所有发送到云端的数据,云端也可以向 App 发送数据和控制指令,用户需要考虑更多威胁:
App 是否可能把管理的密码发送到云端?
很多 App 在使用过程中,都会收集很多用户数据,是否也会有意或无意收集了密码呢?这无疑增加了泄密的可能性。
监视资本主义:智能陷阱 The Social Dilemma (2020)
App 是否会把
加密数据库
传输到云端?
云密码管理器都会,这是服务的一部分。加密数据库
传输到云端相当于把保险箱交给陌生人帮你保管,自己只留着钥匙。
App 是否会把
主密码
发送到云端?
大多互联网服务会把用户输入的登录密码(等同于主密码
)直接发送到云端,检查是否与设置的登录密码一致。这并不存在泄密风险,因为厂商本来就可以查看用户在云端的数据。
但是密码管理器不一样,为了方便用户,一般既使用主密码
验证用户,同时也用主密码
加密数据。如果 App 把主密码
(保险箱的钥匙)也发送到云端进行验证...
因此密码管理器开发者需要非常细致的设计登录验证算法,但有些开发者不具备足够的知识技能,会采用普通互联网服务一样的方式验证用户。
App 是否会从网络下载多媒体数据?
由于多媒体数据的复杂性,恶意伪造的多媒体数据(图片,视频,音频等),可以利用第三方库的漏洞入侵并控制 App,从而偷取数据。入侵无数政要苹果手机的以色列间谍软件飞马座(以色列飞马间谍软件:法国总统马克龙、伊拉克总统萨利赫),就利用了操作系统或 App 处理多媒体数据的漏洞。
飞马(Pegasus)- 世界上最强大的间谍软件,苹果、Facebook的眼中钉,美国垂涎觊觎的对象
很多密码管理器会下载网站图标,甚至还会内置浏览器打开各种网页,这给密码管理器带来了巨大风险。
第三方库是否存在同样的泄密风险?
很多第三方库也会与云端通信,是否也会收集数据甚至无意收集到了密码?是否也会读取加密数据库
并发送到云端?是否也会下载多媒体数据?
网页版密码管理器。
有些基于云的密码管理器还提供了网页版,网页程序需要从云端下载到浏览器后,由浏览器执行。这种云端托管的网页程序,更容易被内部坏员工或者黑客修改,往其中添加恶意代码。甚至如果网页程序中处理主密码验证的代码没有下载完整,浏览器就会默认把用户输入的主密码
发送到云端。
而前面提到的所有风险,包括第三方库,多媒体数据等,网页版密码管理器一样不差。
作为用户几乎无法了解 App 和互联网之间到底传输了哪些数据,无法评估风险。
网络这种不透明的输入输出方式暴露了一个巨大的攻击面,就像潘多拉盒子,打开了无限可能。
云端
基于云的密码管理器会将用户的加密数据库
传输到云端,就像一个蜜罐,吸引着无数黑客。对于有权限访问云端数据的内部员工,也很难保证他们绝无私心。
知名多因素验证器Authy被黑 进而导致密码管理器LastPast被黑
事实上,密码管理器和其他安全厂商的云端并没有多少不同,都同样存在被入侵的风险。一旦加密数据库
暴露,就只剩下主密码
这一个因素了。
总结
密码管理器通常宣传的“军事级”加密算法(AES 加密算法),只是安全的基石,大多数密码管理器都会采用。
有一些密码管理器开发者,甚至包括一些知名的安全厂商(技术积累主要在杀毒,防火墙和 VPN 等领域),并不具备加密算法和密码管理等方面的专业技术,不能很好的保护数据安全,甚至犯下保存
主密码
这样显而易见的错误。
但并非使用了“军事级别”加密算法就能确保数据绝对安全,产品本身的安全设计更加重要。除加密算法外,密码管理器安全主要取决于:
需要几个解锁因素?
可以应对哪些威胁?
在各种威胁下,暴露了哪些攻击面和解锁因素?
简单来说,解锁因素越多越好,并且每个解锁因素都需要尽可能保护好。
可惜密码管理器无法在满足用户各种需求的同时,又能完美应对所有威胁模型,不暴露任何解锁因素,不存在攻击面。
不使用密码管理器最不安全,使用密码管理器也无法消除所有威胁。在选择产品时,我们需要考虑自己最关心的威胁模型,确保面对这些威胁,密码管理器只留下最小的攻击面,暴露最少的解锁因素。
开源密码管理器提供了一定的透明性,但更重要的还是详细了解它的安全设计,能否把我们最关心的风险降到最低。
版权声明: 本文为 InfoQ 作者【神锁离线版】的原创文章。
原文链接:【http://xie.infoq.cn/article/83463e228912f6f4b8e521aaa】。文章转载请联系作者。
评论