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

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

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

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

第三代密码管理器:

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

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

通过云端同步时,第二代密码管理器离泄露所有密码只有“一个主密码的距离”。而主密码的安全问题并不能让人放心。于是,第三代密码管理器应运而生。说起第三代密码管理器,就不得不提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. 数据库被盗+泄露主密码,仍然安全

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

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

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

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

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

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

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

黑客攻击

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

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

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

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

  • 控制手机(因为数据离开手机就无法解密);
  • 突破安全芯片的防护;

总结

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章