坚持密码正确也无法解锁与加解密的技术讨论

发布于

要将清楚这个,先得讨论加解密。

加解密这件事情要分两种情况:

### 软件加密技术
例如不使用 TPM 的 BitLocker、LUKS、VeraCrypt。

#### 加密流程:
- 随机产生高熵密钥用于实际加密磁盘数据。
- 用户密码用于加密这个高熵密钥,加密后存储在加密区头部。

#### 解密流程:
- 使用用户密码解密加密区头部的高熵密钥,再使用高熵密钥解密数据。

#### 改密码流程:
- 使用旧密码解密头部的高熵密钥,再使用新密码加密后存储到头部。

#### 忘记密码找回流程:
- 事先随机一个恢复密钥,用恢复密钥加密高熵密钥,一并存在头部。这也是多用户多密码的逻辑。每套密码占用一个槽位 key slot。

### 脱机破解思路:
- 从磁盘获取加密区头部数据,然后字典或穷举用户密码,试图解密头得到高熵密钥。破解成功后得到用户密码。

### 联机破解思路:
- 系统已经开机并解密数据再使用了,直接从运行内存中获取高熵密钥。(现代加密软件会对抗,但不能根本解决)破解成功也没有必要拿用户密码。

### 安全弱点:
- 头和数据存储区都可以备份,脱机状态无法自毁。
- 可以无限次的并行尝试破解用户密码。

### SSD 带来的额外风险:
- 修改密码后,旧密码版本的头依旧在 SSD 某处等待 GC。SSD 不能像机械硬盘那样保证旧的头里面的 key slot 被立即覆盖。

### 硬件加密技术
现代手机、使用 TPM 的 BitLocker、现代电脑。

#### 加密流程:
- 用户密码输入安全芯片,通过 KDF,硬件根密钥,生成一个高熵密钥实际加密数据。

#### 解密流程:
- 用户密码输入安全芯片,由安全芯片吐出高熵密钥,解密实际数据。

#### 改密码流程:
- 安全芯片内,新密码放到新的密码槽位 key slot,旧密码槽位废弃。不需要读写磁盘存储器。

#### 忘记密码找回流程:
- 同上,增加一个恢复密钥槽位。

### 脱机破解思路:
- 安全芯片限制密码输入次数和速率,反复尝试密码槽位锁死,且无法被拷贝备份,难以实施破解。

### 联机破解思路:
- 同软件!但难度更大,某些设计下,密钥可能根本不进 RAM。

安全芯片可以用特定密码触发自毁(大家都懂的某个开源 Android 系统),又不能事先脱机备份安全芯片内的密钥。现阶段来说安全性非常高了。

### BFU 状态
手机重启(开机)后,第一次输入密码前,用户存储区没有被解密过,安全芯片也没有吐出过密钥,这个状态几乎是与脱机的安全性一样。某些手机断网超过多少小时后会自动重启,也是可以回到这个安全状态。

### AFU 状态
一旦输入过密码,安全芯片就吐出过密钥了,用户数据区已经解密。即便再锁屏,也回不到 BFU 状态了。

### 回到主题:
如果安全芯片自身出问题,就有可能出现输入正确密码也无法解密的情况。
安全芯片本身就是在黑箱操作,怎么搞,厂商有没有放后门,有没有被大兄弟要求放置后门,谁也说不清楚。

之前就有人反映修改密码后无法解锁,却用多年前首次密码却解锁成功,这种情况安全芯片回滚到初次设置密码的数据也不是不可能,比如说旧的密钥槽 key slot 没有被覆盖,芯片错误的匹配了旧的槽位。

总的来说,出问题的概率非常渺小,但不是不可能。多一个步骤多一个零件,也就多一个故障点。

---

原文链接:[点击查看](https://www.v2ex.com/t/1228527)

评论

暂无评论。