「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

密码管理器的进化史(下)

2020 年 3 月 16 日

密码管理器的进化史(下)

很多关于密码管理器的评测和讨论大多聚焦于功能特性,而对于最关键的安全性,却没解释清楚。本系列文章主要从密码管理器保护密码的安全性角度,分享一下相关的专业知识。因密码管理器涉及很多方面的知识,本系列文章只讨论数据加密保护。


密码管理器的进化史(上)


第三代密码管理器:主密码+主密钥保护


第三代密码管理器:


  • 安全技术——增加主密钥保护,提升云端安全性

  • 安全问题——设备终端安全性仍取决于主密码


通过云端同步时,第二代密码管理器离泄露所有密码只有“一个主密码的距离”。而主密码的安全问题并不能让人放心。于是,第三代密码管理器应运而生。说起第三代密码管理器,就不得不提 1Password,它们设计了一个 two-secret key derivation (2SKD)的方法来生成加密密钥。并且,它们还公开了技术白皮书。


使用 1Password 的用户,除了要设置主密码外,还需要将一个主密钥 Secret Key 保存起来。


  • 主密钥用于和主密码一起生成加密密钥

  • 加密密钥通过主密码生成,用于加密数据的密钥


据悉,加拿大一家公司的产品 RememBear 采用类似技术,要求用户不仅要记住主密码,还要保存好 New Device Key。这只不过是给主密钥换了名字。


从算法角度讲,第三代密码管理器和第二代密码管理器几乎一样,只不过第三代将 salt 叫 Secret Key。



关键创新

通过网络同步时,第二代密码管理器会将生成加密密钥的参数 salt 一起同步,而第三代密码管理器并不会同步 Secret Key!



注意:第三代密码管理器不同步 Secret Key!


第二代密码管理器在登录新设备时,只需输入账号密码,就可以解密云端同步下来的数据。而第三代密码管理器在登录新设备时,除账号密码外,还需要输入 Secret Key,才能解密云端下载的数据。虽然只是一个小改动,却极大提升了云端同步的安全性。


第三代密码管理器的主要特点:除主密码外,还增加了一个不同步的 Secret Key。正因为有这个 Secret Key,第三代密码管理器才能保证:即使云端被入侵、主密码被泄露,黑客依然无法获取用户存储的账号密码。


回顾可知,其实每一代密码管理器都比上一代增加了一个解锁条件,大幅提升安全性。



安全问题

虽然云端没问题,但是终端依然有漏洞。对一个人来说,要想成功盗取存在第三代密码管理器中的密码,只需两步:


  1. 入侵用户桌面系统,获取数据文件和主密钥;

  2. 攻破用户的主密码


实现第一步并不难,当用户在设备上首次登入自己账号后,第三代密码管理器会把主密钥保存在本地(不会让用户每次都输入)。


传统密码管理器都是基于桌面计算机时代的技术开发的(Windows 操作系统是主要代表)。在传统的桌面操作系统上,密码管理器保存的数据文件是可以被恶意软件直接读取的,甚至恶意网站都有可能利用浏览器的安全漏洞来读取数据并发送到云端。


总结,在终端设备上,第三代密码管理器和第二代一样,离泄露所有密码都只有“一个主密码的距离”。


第四代密码管理器

  • 安全技术——基于安全芯片的数据保护技术,不再担心主密码泄露


过去十几年,各种密码管理器软件层出不穷,各类营销口号花样百出,但是其使用的数据保护技术在本质上却没有太大改进。因此,很多对数据安全有更高要求的用户只能选择专用硬件密码管理器产品,默默忍受着诸多不便。


让人兴奋的是,智能手机的发展为我们带来很多新的安全技术,其中之一是沙盒隔离。在 iOS 和 Android 系统上,所有 App 都可以选择使用沙盒隔离,每个 App 的私有数据都不能被其他 App 访问。即使用户不小心安装恶意 App,它也无法偷取其他 App 的私有数据(除非它能突破沙盒保护或者获取到 root 权限)。


当然,并非所有 App 都会使用沙盒隔离。相反,有些 App 可能会选择使用外部存储,比如 Keepass2Android。Keepass2Android 数据库保存在外部存储中,所有能访问外部存储的 App 都能读取该数据库。因此,如果你的手机不小心安装恶意 App,该 App 就能一边截获你输入的主密码,一边读取数据库文件。这样,你存储的所有密码都会泄露。



虽然沙盒技术对数据保护有一定作用,但无法防止数据因系统备份、网络同步、应用克隆等操作而泄露。真正激动人心的是,智能手机带来安全芯片的普及,这也为第四代密码管理器的诞生奠定坚实的技术基础。


现在,大多数智能手机都集成生物识别技术。为安全处理用户的生物信息,它们也都引入安全芯片。



安卓手机的指纹识别硬件架构图


图中的 TEE 是独立于 CPU 和操作系统的安全芯片系统(iOS 中叫 Secure Enclave)。指纹传感器硬件线路直连安全芯片,直接将扫描的生物数据发送到安全芯片内部验证,安全芯片只告诉操作系统验证结果,保证生物数据的安全。


App 使用指纹验证的过程,大概如下:


  1. 应用程序先调用操作系统 API,请求系统验证指纹;

  2. 操作系统指纹管理和服务组件,请求 TEE 验证用户指纹;

  3. TEE 读取并且验证指纹数据;

  4. TEE 把验证结果告知操作系统,操作系统再告知应用程序


因此,担心 App 偷取指纹数据的用户可以放心,App 根本无法读取你的指纹数据。不过,使用人脸识别的 App 却能采集人脸数据,因为摄像头扫描的数据是 App 直接处理的(iPhone 面部 ID 验证除外)。


第四代密码管理器使用手机安全芯片保护用户数据。


安全芯片中存储的数据都是加密的,运行时的内存也是加密的,加密密钥存储在芯片内部。即使是外部操作系统,也无法访问安全芯片中的数据、无法获取加密数据的密钥。



安全芯片加密数据示意图


App 可以请求安全芯片创建密钥,并且只有创建密钥的 App 才能请求安全芯片使用这个密钥执行加密算法。不论是加密还是解密,都由安全芯片处理,App 只能得到加密/解密的结果,而得不到密钥。


回顾第二代密码管理器,既不能写死密钥,也不能把密钥和数据库一起保存,所以只能通过主密码生成密钥来加密数据。


而现在,第四代密码管理器可以使用安全芯片来安全存储密钥了。因此,就算用户不设置主密码,数据也是非常安全的,因为尽管其他 App 窃取数据库,也无法解密得到原文。


使用第四代密码管理器,只要手机解锁密码足够安全,又不担心女朋友查看你保存的密码,那就完全可以不设置主密码了。


安卓手机用户不要使用图案解锁,这篇论文说只需要五次就能破解。



如果担心在手机解锁状态下被他人偷窥密码,也可以使用主密码进一步保护数据。


安全分析

第四代密码管理器的密钥存储在安全芯片内部,加密的数据只能在本机解密,离开本机将无法解密。


  1. 不设置主密码仍然足够安全

  2. 第二代和第三代密码管理器,必须依赖主密码生成密钥来保护数据,否则就和第一代密码管理器一样,可以被其他程序读取用户数据。

  3. 第四代密码管理器,保护数据的密钥存储在安全芯片内部,即使是操作系统也不可提取,因此不设置主密码也能保护用户数据。

  4. 数据库被盗+泄露主密码,仍然安全

  5. 第二代和第三代密码管理器,如果同时泄露了数据库文件和主密码(以及第三代的 SecretKey),黑客就可以使用同样算法解密数据。

  6. 第四代密码管理器,使用存储在安全芯片内部的密钥来保护数据,黑客无法从安全芯片中提取出密钥,无法解密数据。

  7. 数据库被盗+暴力破解,仍然安全

  8. 第二代和第三代密码管理器,如果数据库文件(以及第三代的 SecretKey)泄露了,并且主密码不够强,黑客就可能通过租用大量云服务计算资源进行暴力破解。

  9. 第四代密码管理器,使用了存储在安全芯片内部的密钥来保护数据,即使黑客暴力破解了主密码,也无法解密数据。


当然,有利就有弊,使用安全芯片在大幅提升安全性的同时,第四代密码管理器也难以同步数据到其他设备。


由于密钥存储在安全芯片内部,无法从一个手机迁移到另一个手机,所以如果仅仅把加密后的数据同步到新手机,同样也是无法解密的。


黑客攻击

任何技术都是可以被攻击的,第四代密码管理器也不例外,毕竟 App 不可能 100%弄清楚使用者是合法用户还是黑客。


回顾一下,黑客要偷取前几代密码管理器中保存的密码应具备的条件:


  • 第一代密码管理器,能读取数据库文件即可;

  • 第二代密码管理器,需要读取数据库文件 + 偷取/破解主密码

  • 第三代密码管理器,需要读取数据库文件 + 偷取/破解主密码 + 读取主密钥


第四代密码管理器,尽管读取数据库文件 + 偷取/破解主密码也无法解密。黑客还需要:


  • 控制手机(因为数据离开手机就无法解密);

  • 突破安全芯片的防护;


总结


2020 年 3 月 16 日 14:262885

评论 2 条评论

发布
用户头像
用视频演示四代密码管理器的保护效果:https://www.bilibili.com/video/av92599045
2020 年 03 月 16 日 19:30
回复
第四代
2020 年 03 月 16 日 19:32
回复
没有更多了
发现更多内容

第二周总结:设计原则

远方

第二周 作业

chinsun1

架构师训练营WEEK2作业

班戟鱼

第二周作业 - 命题作业

molly

极客大学架构师训练营

解决 Jenkins 中使用代理来执行 npm install 的问题

jerry.mei

Docker DevOps 运维 jenkins

面向对象设计的基本原则 --周总结

独孤魂

作业

接口隔离原则优化 Cache 类设计

leis

架构师训练营总结 -2

River Tree

架构 总结 软件设计原则

第二周作业

ruettiger

【第二周】命题作业——软件设计原则

三尾鱼

面向对象 极客大学架构师训练营

架构师训练营-作业2

Jemmy

第二课作业

lwyanhao

架构师课程第二周总结

dongge

Week02总结

leis

架构师训练营-Week 02 命题作业

华乐彬

极客大学架构师训练营 设计原则

设计模式与设计原则(第二周总结)

麻辣

架构师训练营第二周作业

aoeiuvzcs

第二周作业

田振宇

课堂作业week2

Dennis

Week001总结作业

徐培

架构师训练营丨第二周丨学习总结

Frode

极客大学架构师训练营

第二周作业

仪轩

第二周 软件设计原则 小结

chinsun1

极客时间第 0 期架构师训练营第二周作业

2流程序员

Week2学习总结

丿淡忘

极客大学架构师训练营

架构师训练营第 02周—— 练习

李伟

极客大学架构师训练营

第2周 学习总结

sunpengjian

架构师训练营 No.2 周总结

连增申

[笔记]Reportlab生成PDF(表格)

森蓝Senlan

Python PDF

<<架构师训练营>> 第二周学习总结

R20114

第二课学习总结

lwyanhao

密码管理器的进化史(下)-InfoQ