为什么从您的锁屏密码派生的加密密钥可以为您提供更强大的保护(在 Android 11 中)?

信息安全 加密 安卓 密钥生成
2021-08-17 18:58:52

为什么从你的锁屏密码派生的加密密钥比机器选择的密钥(或至少不是从你的锁屏密码派生的)给你“更强的保护”?

对我来说,出现上述一般问题的背景是在 Android 11 上运行的三星手机。因此,一个更具体的问题(如果更可取)将是:为什么上述特定设备会出现上述情况。

在下文中,我将更详细地描述上下文。如果上述问题已经可以回答,您可能无需进一步阅读。

语境

据我所知,这就是 Android 11 三星手机的情况。

  • 就机器将存储中的数据混杂而言,加密始终处于开启状态(没有关闭它的选项),但它可能会或可能不会为您提供任何保护,具体取决于以下三种情况中的哪一种适用。

  • 案例 1. 没有锁屏密码(这里的“密码”是一个方便的术语,也包括 PIN 码、图案等):您没有得到任何保护。数据可能被加密,但任何人都可以在无需输入密码的情况下将其解密。

  • 案例2.设置了锁屏密码,但“强保护”关闭:您得到保护。机器选择加密密钥。

  • 案例3. 设置了锁屏密码并开启了“强力保护”:您获得更多保护。加密密钥源自您的锁屏密码。

笔记。在设备上,“强保护”位于设置 > 生物识别和安全 > 其他安全设置 > “强保护”。它的简介说:“使用您的安全锁类型(模式、PIN 或密码)加密您的手机。”

如果到目前为止我的理解是错误的,请告诉我。那时甚至可能不会出现这个问题,我可能不得不删除它。

假设理解是正确的,那么问题是为什么从您选择的东西中派生加密密钥可以为您提供更强的保护?我原以为机器可以在没有您的帮助(可能是 1234)的情况下选择强加密密钥。

顺便说一句,是否有加密的技术术语(在数据混乱的意义上,无论它是否为您提供任何保护)与保护?

更正

如上所述,案例 3 是错误的,因为“密码”一词的定义方式(通过“等”包括生物特征)。

要获得本身已加密(使用您选择的内容)的加密密钥的好处,您需要使用以下内容:

  • 案例 3b。已设置锁屏图案、PIN 或字母数字密码,并且“强保护”已打开。

为什么会这样,请参阅 A. Hersean 的回答。

(我不希望任何人,只阅读了这个问题,就离开了错误的信息。我选择这种更正帖子的方式,而不是删除“等”,因为生物识别的排除更加突出,我不想一开始就看起来是对的。)

2个回答

在所有情况下,加密密钥都是由设备(您的手机)随机选择的。

当使用生物识别技术解锁手机时,它们会由一个最安全的模块(一个TEE,在您的情况下是 ARM TrustZone™ 的 Knox™ 版本)进行检查。如果检查表明提供的生物特征与设备中存储的生物特征足够接近,则读取加密密钥以解密设备。这意味着加密密钥按原样存储在某处,其访问仅受访问控制机制的保护。对手机有物理访问权限的人可以打开它,读取密钥并解密设备,绕过访问控制。

当使用 PIN 码、图案、密码或密码时,可以使过程更安全。请注意,模式只是一个带有不能重复数字的 PIN(而不是绘制它,您可以在数字键盘上键入它)。所以一个模式是一个弱 PIN(因为某些组合是不可能的),一个 PIN 是一个弱密码(因为只允许数字),它是一个弱密码。因此,我将通过仅提及密码来简化此答案。

使用密码时,加密密钥不会直接存储在设备中。它首先由密钥加密密钥加密(凯克)。此 KEK 由密码短语派生,从未存储在任何地方。当用户尝试进行身份验证时,其密码被派生到 KEK 中,然后移动设备检查此 KEK 是否正确解密了测试值。如果检查失败,则表示密码错误。如果检查通过,则新派生的 KEK 用于解密加密密钥,该密钥又可用于解密设备。因此,如果有人获得对设备的物理访问权,他们就无法读取密钥。他们只能尝试猜测密码,直到找到正确的密码。因为推导过程需要一些时间(故意),如果密码足够长,尝试每个密码可能是一个非常长的过程。

使用生物识别技术时,每个读数都不同,因此无法使用唯一值来得出 KEK。加密密钥必须存储在设备中的某个位置,并且无需从用户提供的某些数据派生的 KEK 即可访问。之前我在编写时进行了简化,在这种情况下,加密密钥是按原样编写的:对于 Android 版本 7 到 9,它实际上也是加密的,用于派生 KEK 的密码是“default_password”。这样做是为了通过只有一种方法来简化整个解锁过程。这提供的保护并不比直接存储加密密钥更多,因为密码是公共知识。在新版本的Android中,使用基于文件的加密,不再只有一个单一的加密密钥,而是不同文件的多个密钥。但是,整体机制保持不变,但有更多的键,因此更复杂。对于这里预期的技术细节水平来说,解释它太复杂了。但是,如果您想了解更多详细信息,可以参考官方文档在这里那里,或在这里那里参考defalt的答案请记住,使用生物特征进行身份验证只能提供身份验证令牌,但不能用于派生 KEK。

这就是为什么三星表示模式、PIN 和密码是强大的方法:在这些情况下,具有物理访问权限的攻击者将更难解密设备,因为他们必须猜测密码。但是,请注意,尝试每种模式和 PIN 仍然非常快,因此这两种方法并不比使用生物识别技术对抗这种攻击者安全得多。对于强加密,用户必须使用强密码。

旁注,回答评论:限制猜测的延迟仅适用于使用图形界面尝试所有可能性的人,可能是机器人在屏幕上打字。对于打开手机并通过直接访问它来复制其(主要是加密的)数据的人,不适用此类限制。顺便说一句,复制这些数据需要专门的技能和硬件。导出 KEK 所需的时间是由于进行计算所需的大量操作。但是,设法复制数据的人可以在云中租用数千台计算机以更快地尝试所有组合,与每台计算机并行工作,尝试不同的组合,并且不受平台强制执行的延迟限制。

第二个旁注:您还询问了加密(或“数据混杂”)与保护的技术术语。当“数据混杂”不提供任何实质性保护时,它在技术上被称为混淆。加密仅根据密钥完成这种混乱的技术术语,这意味着其他所有内容都被视为公共知识。加密是一种保护数据机密性的机制,但不能保证其真实性(在某些情况下,攻击者可以盲目地更改加密数据而不会被发现)。为此,需要其他加密机制,例如验证码或签名。总而言之,没有“加密与保护”。加密是一种提供一种保护的机制。像一把锁。就像一把锁一样,它不能保护一切,而只能防止一些攻击。

第三个说明,为了澄清:在这个答案中,我试图用简单的术语解释移动设备(特别是 Android)上仅使用生物识别或使用密码的加密之间的根本区别。这是一种简化,是在解释时做出的捷径。现实更加复杂,并且出现了其他问题,例如“当有人复制我的指纹时会发生什么?我无法更改它,不像密码短语。”。

根据设计,基于文件的加密(FBE) 密钥以加密方式绑定到锁屏知识因子(LSKF)。这可以防止攻击者通过物理入侵从 TEE 中提取 FBE 密钥来解密凭证加​​密存储。FBE 有两种类型的加密存储:

  1. 设备加密(DE)存储:DE不绑定LSKF,对基本功能、设置、紧急信息、锁屏壁纸、wifi密码、闹钟、提醒笔记等进行加密,使设备在首次解锁前仍可使用( BFU) 状态。

  2. 凭证加​​密(CE)存储:用户个人的所有用户数据和应用程序数据都在与 LSKF 绑定的 CE 存储下加密。CE 只能在首次解锁后(AFU) 状态下解密。

LSKF 不被 TEE 存储,因此无法提取。为了验证 LSKF,TEE 派生一个 HMAC 密钥,该密钥在密码句柄上生成一个 HMAC ,并将其与存储的 HMAC 进行比较。有关详细信息,请参阅Android 中 PIN/密码和加密密钥之间的连接在将输入发送到 TEE 之前,LSKF 由主机操作系统中的锁屏服务进行哈希处理。这会阻止 TEE 学习 LSKF,并且始终只有用户知道 LSKF。

如果没有 LSKF,就无法解密 FBE 密钥,因为密钥加密密钥(KEK) 是从参与 FBE 密钥解密的 LSKF 派生的。OEM 提供退出选项以取消 FBE 密钥与 LSKF 的绑定的情况并不常见。FBE 由供应商实施,因此三星似乎对其进行了定制。您不会在其他 OEM 中找到此选项。

强大的保护只是一个流行词。禁用它会削弱您的设备加密并保持启用是 FBE 的标准设计。强保护不会在 FBE 之上提供其他 OEM 没有的任何新功能。


是什么阻止了 OEM 为被扣押设备的 TEE 固件提供签名更新以禁用屏幕锁定超时?

至少在 Pixel 设备中,众所周知,Titan M TEE 芯片具有所谓的内部攻击阻力(IAR)。这会将更新的固件映像置于保持状态,除非在应用更新时成功完成用户身份验证。IAR 也扩展到安卓操作系统。从 android 12 开始,android UpdateManager首先检查Google Binary Transparency (GBT)日志,以验证发布的内容与即将应用更新时设备上的内容相同。


Pixel 6:为移动安全设定新标准

首次解锁前:设备自上次重启后未解锁过一次

首次解锁后:设备自上次重启后已解锁一次