密码管理器怎样保护我们的密码?

加密原理

密码学历史悠久,常用于古代军事通信。

3000年前姜子牙就发明了阴符,2000年前罗马帝国诞生了广泛使用的凯撒密码。这些都称为古典密码,通常使用替换法或者移位法。古典密码非常容易破解,只要得到密文,即使不知道加密方法,也能通过频率分析,暴力破解,得到原文。

20世纪后期,现代密码学诞生,很快成为了计算机时代数据安全的基石。对于需要加密的数据(明文 plaintext),使用一个随机密钥(key),进行一系列复杂的计算(加密算法),得到加密后的数据(密文 ciphertext)。只需要保证密钥key不泄漏,即使知道加密算法,也无法从密文得到明文。

密码管理器存储和管理我们所有的密码,安全至关重要,那到底是怎样保护着我们的密码呢?

密码管理器一般要求用户设置一个主密码,并严格保密。在 密码管理器进化史(2/4) 一文中,我们详细讲解了第二代密码管理器使用现代密码学算法加密数据的方法。常见密码管理器加密的关键步骤如下:

#mermaid-svg-kSZPdviO3hgFIxf3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kSZPdviO3hgFIxf3 .error-icon{fill:#552222;}#mermaid-svg-kSZPdviO3hgFIxf3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kSZPdviO3hgFIxf3 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-kSZPdviO3hgFIxf3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kSZPdviO3hgFIxf3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kSZPdviO3hgFIxf3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kSZPdviO3hgFIxf3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kSZPdviO3hgFIxf3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kSZPdviO3hgFIxf3 .marker.cross{stroke:#333333;}#mermaid-svg-kSZPdviO3hgFIxf3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kSZPdviO3hgFIxf3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kSZPdviO3hgFIxf3 .cluster-label text{fill:#333;}#mermaid-svg-kSZPdviO3hgFIxf3 .cluster-label span{color:#333;}#mermaid-svg-kSZPdviO3hgFIxf3 .label text,#mermaid-svg-kSZPdviO3hgFIxf3 span{fill:#333;color:#333;}#mermaid-svg-kSZPdviO3hgFIxf3 .node rect,#mermaid-svg-kSZPdviO3hgFIxf3 .node circle,#mermaid-svg-kSZPdviO3hgFIxf3 .node ellipse,#mermaid-svg-kSZPdviO3hgFIxf3 .node polygon,#mermaid-svg-kSZPdviO3hgFIxf3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kSZPdviO3hgFIxf3 .node .label{text-align:center;}#mermaid-svg-kSZPdviO3hgFIxf3 .node.clickable{cursor:pointer;}#mermaid-svg-kSZPdviO3hgFIxf3 .arrowheadPath{fill:#333333;}#mermaid-svg-kSZPdviO3hgFIxf3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kSZPdviO3hgFIxf3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kSZPdviO3hgFIxf3 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-kSZPdviO3hgFIxf3 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-kSZPdviO3hgFIxf3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kSZPdviO3hgFIxf3 .cluster text{fill:#333;}#mermaid-svg-kSZPdviO3hgFIxf3 .cluster span{color:#333;}#mermaid-svg-kSZPdviO3hgFIxf3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kSZPdviO3hgFIxf3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

master password
PBKDF2
key
AES
account data
ciphtertext
  • 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等领域),并不具备加密算法和密码管理等方面的专业技术,不能很好的保护数据安全,甚至犯下保存主密码这样显而易见的错误。

但并非使用了“军事级别”加密算法就能确保数据绝对安全,产品本身的安全设计更加重要。除加密算法外,密码管理器安全主要取决于:

  • 需要几个解锁因素?
  • 可以应对哪些威胁?
  • 在各种威胁下,暴露了哪些攻击面和解锁因素?

简单来说,解锁因素越多越好,并且每个解锁因素都需要尽可能保护好。

可惜密码管理器无法在满足用户各种需求的同时,又能完美应对所有威胁模型,不暴露任何解锁因素,不存在攻击面。

不使用密码管理器最不安全,使用密码管理器也无法消除所有威胁。在选择产品时,我们需要考虑自己最关心的威胁模型,确保面对这些威胁,密码管理器只留下最小的攻击面,暴露最少的解锁因素。

开源密码管理器提供了一定的透明性,但更重要的还是详细了解它的安全设计,能否把我们最关心的风险降到最低。


上一篇:开源密码管理器更安全吗?(1) - 隐秘的角落

开源密码管理器更安全吗?(2)相关推荐

  1. 开源密码管理器更安全吗?(1)

    很多人认为开源的密码管理器更安全,理由是:由于任何人都可以阅读源代码.开发者如果做了什么坏事,我们都能看到. 源代码(也称源程序)是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读 ...

  2. 一款超好用的开源密码管理器?

    程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store DevWeekly收集整理每周优质开发者内容,包括开源项目.资源工具.技术文章等方面. 每周 ...

  3. keepass自动输入密码_如何使用Keepass密码管理器更好地组织机密

    keepass自动输入密码 Today's Internet services rely heavily on text-based passwords for user authentication ...

  4. Padloc:一个直观的开源密码管理器

    让我们了解一下这个具有令人愉悦的用户界面.跨平台可用的开源密码管理器. 有大量适用于个人和团队的免费的和收费的密码管理器. 然而,当谈到开源方案时,它通常仅限于几个好的方案,如 Seahorse.Ke ...

  5. 开源密码管理器 KeeWeb

    开源密码管理器 KeeWeb 在互联网上有许多不同种类的密码管理器可供选择.作者之前使用的是1Password 6系列,因为7版本之后的不符合个人的使用习惯.后来尝试过LastPass,但感觉还是不如 ...

  6. 3 款强大的开源密码管理器

    点击上方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 我们现在每个人都离不开互联网,所以在很多网站上都有很 ...

  7. 如何通过 Docker 快速部署开源密码管理器 Bitwarden

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 前言 两年前,我就想自托管 Bitwarden 密码管理器了,但是直到 2022 年快结束的现在,我才真正动手.在 ...

  8. 4款好用的密码管理器,你值得拥有

    上周,美国密码管理应用公司 Splash Data发布了「2018 年度最弱密码」榜单,其中123456和passworld 已经连续5年成为最弱密码榜单的冠亚军. 这些在现实世界看似毫无价值的账户密 ...

  9. 火狐浏览器锁定搜索_firefox锁定密码管理器的安全性如何

    火狐浏览器锁定搜索 After hearing that LastPass was acquired by a private equity firm[1], I decided it might b ...

最新文章

  1. usaco Calf Flac(O(n)时间求回文串长度)
  2. java 跳转 oop_Java基础之:OOP——接口
  3. 机器学习笔记 时间序列预测(最基本的方法【benchmark】)
  4. 【Karma】多环境自动测试框架 -- 基础教程
  5. ajax参数中字符串最大长度_6.7 C++数组名作函数参数 | 求3*4矩阵中最大的值
  6. 查linux有哪些task_浅谈Linux线程模型
  7. java 多线程数据分发_使用Java多线程实现任务分发
  8. 2016年美国太阳能光伏发电成本持续下降
  9. ros melodic控制真实机械臂之urdf模型生成
  10. zabbix多图同屏展示——“聚合图形”简单使用
  11. 对application/x-www-form-urlencoded、multipart/form-data和text/plain的认识
  12. matlab脉冲补偿,基于LabVIEW和Matlab的纳秒脉冲测量信号补偿研究
  13. python 开发公众号sdk_「公众号开发」基于Serverless架构Python实现公众号图文搜索...
  14. 这次的深夜食堂来到了甲米,只为寻找那些…
  15. 20172328 2018-2019《Java软件结构与数据结构》第七周学习总结
  16. 计算机学院篮球队介绍,2018年校级篮球联赛计算机与信息学院篮球队专访
  17. 洲际酒店集团大中华区开业酒店突破600家;因美纳中国生产制造基地正式启用 | 美通企业日报...
  18. ibmx3400M3服务器装系统教程,免费安装系统!IBM x3400 M3不足1万2
  19. Flask Web开发:基于Python的Web应用开发实战
  20. PhpExcel向特定文件中插入数据,将数据导入到指定文件中

热门文章

  1. 实现文件中名词的统计计数_SOLIDWORKS PDM系统中如何实现PDF文件批量签章?
  2. 【钢格板】钢格板压焊机的实际操作和使用方法
  3. CentOS7 启动时出现:Redirecting to /bin/systemctl start httpd.service
  4. 《python爬虫120例》教程导航帖(2022.5.7更新)
  5. VOS 系统报错,系统挂断 VOS不通,各种vos疑难杂病都在这里
  6. Scratch(三十四):古诗大作战
  7. java : java -jar,java -cp,jar cvf 命令详解
  8. Oracle 11gr2 RAC安装笔记(五)安装 Database 软件
  9. Jboss 4.2.3配置与优化
  10. 全球及中国汽车仿真硬件在环测试行业研究及十四五规划分析报告