V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acess
V2EX  ›  信息安全

挖坟: TrueCrypt 当年在用户手册里特意说明自己拒绝支持 TPM,以及 RMS 对“可信计算”的声讨

  •  2
     
  •   acess · 2021-07-09 23:55:32 +08:00 · 4997 次点击
    这是一个创建于 1232 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近因为 Win11 强制要求,TPM 火了一把,于是 LZ 也有点想蹭蹭热度……

    稍微翻了一下英文维基,里面居然提到 TrueCrypt 当年在用户手册里专门解答过为啥有意不支持 TPM,理由大致就是:
    TPM 在安全上其实是多余的,反倒是给用户带来了虚假的安全感。支持 TPM 的加密软件宣称的那些攻击场景,也就是攻击者有管理员权限甚至可以物理接触设备,实际上用任何技术手段都已经无法继续维持安全性了,这个时候 TPM 其实已经靠不住了,唯一靠得住的做法就是停止使用那台设备。比如,攻击者可以装一个硬件键盘窃听器(“假键盘”?);可以从内存里直接把密钥 dump 出来(硬的应该就是“冷启动攻击”,软的应该就是利用调试 /IPC 之类的系统调用读取进程内存?);可以在加密卷处于解锁状态的时候直接把数据读出来(毕竟是透明加解密的),然后上传,或者就是保存在本地的一个不加密的卷里面……

    我看貌似(至少在很多年前)很多人还觉得 BitLocker 和 TPM 是密不可分的,甚至觉得没有 TPM 的话 BitLocker 的安全性就“降了一大截”……( /t/122436

    据 LZ 所知,其实 BitLocker 本来也并不是离了 TPM 就不能用。

    所以,LZ 个人的认知或者观点(就 BitLocker 而言,其他的我不太了解):
    与其说是安全,TPM 更大程度上是提供了方便,免去输入一长串复杂密码的麻烦;但与此同时 TPM 有点手机刷机锁那味儿,需要度量 BIOS 和 bootloader 的哈希值,于是主板挂了 /引导挂了也会连带导致无法解密(默认是只能靠数字密码,也就是“恢复密钥”),所以要说蛋疼其实也蛮蛋疼的,一不小心就 footgun 了。

    (或者……从 PIN 可以用很短的、更容易记忆的数字、而且更容易定期更换,超长的数字密码“恢复密钥”则是塞进保险柜这个角度讲,有个 TPM 确实是可以提高安全性的?)

    至于 TrueCrypt 的观点,我感觉……貌似 BitLocker 也没有说物理或系统安全守不住的情况下还可以依赖 TPM ?比如电脑被偷走了,干脆就不在用户手里了,想继续用也用不了了啊(笑)。(不过我印象里 TPM 的安全芯片貌似还是爆过漏洞的,可以把里面固化的私钥提取出来,也许这个威胁确实挺大吧,但好像也并不是每一款安全芯片都可能被破解?)

    总之我个人还是倾向于(用 BitLocker 时)不用 TPM 。


    另外维基百科里还提到了 TPM 可能反过来威胁用户的自由和隐私……
    看了一下好像引用的是 RMS 向“可信计算”开炮的文章,然而通篇读完我好像也没看到哪里有提到隐私方面的威胁,好像只是批评“可信计算”,说“可信计算”这个名字起的就很有误导性,实际上“可信计算”会让用户手里的设备不听他的指挥,所以应该叫做“背叛计算”还差不多……甚至把“可信计算”类比成 1984 。

    现在更新版本网页上的这篇文章,到了结尾,反倒是还特意点了一下,说 TPM 实质上已经没剩下多少实际能产生(有害)影响的东西了,所以它的威胁警报已经基本解除了……

    反正我怎么看都没看出来英文维基里说的什么 TPM/可信计算可以隐秘地跟踪监视用户的行为并记录在案什么的,可能是楼主我实在是过于火星了吧……
    (要说文中有批评隐私泄露,貌似也明确说了是在可信计算之前,是“孤立事件”,然后在此基础上批评“可信计算让这些孤立性的侵害变成了系统性的”)
    30 条回复    2021-07-11 21:51:03 +08:00
    imes
        1
    imes  
       2021-07-10 00:08:41 +08:00 via Android
    你可以把 tpm 理解为官方后门。
    jim9606
        2
    jim9606  
       2021-07-10 00:42:05 +08:00   ❤️ 1
    TPM 不会提升安全性,类似指纹解锁和 face id 都不能提升安全性,因为相比于密码,这些生物识别方案扩大了攻击面。
    如果不信任 TPM,可以考虑调整组策略使用纯 PIN 保护或者 TPM+PIN 混合保护,如果正确实现,安全性不会更低。

    固然要求每次设备启动时输入一个几十位的随机密钥很安全,但这对用户很不友好。对于非专业用户而言要么就是想方设法关掉加密,要么就是设弱密码短密码,反而导致安全性下降。想想自从有了指纹和 face id 后,是不是消费电子用户更愿意设置复杂的设备密码了(这也是部分厂商宣称提高安全性的逻辑链条)。

    Win11 强制要求微软账户很有可能就是给设备加密准备的,用微软账号备份恢复密钥避免 TPM 解锁失败导致数据丢失。

    RMS 应该是反对任何限制自由运行软件的技术,认为任何厂商借安全之名推出的可信计算技术都是为了绑架用户,使用户无法在完全不受厂商限制的环境下运行任何软件。
    jim9606
        3
    jim9606  
       2021-07-10 00:54:43 +08:00
    RMS 那部分我好像搞错了,RMS 是认为任何在用户硬件上运行的软件都应该是开源以供用户审查,而大部分可信计算方案都包含黑箱模块。
    acess
        4
    acess  
    OP
       2021-07-10 01:01:04 +08:00   ❤️ 1
    @jim9606
    “更愿意设置复杂的设备密码了”
    这个嘛……
    我没在用苹果设备,不是很了解……就安卓而言,我记得这方面还是有一个槽点的:锁屏密码和全盘加密密码被混为一谈,然后貌似就是一般只有复杂密码+指纹这种组合,不能是全盘加密用长密码、锁屏用短 PIN 这样(没记错的话,貌似 copperheadOS 还是哪个注重安全加固的 ROM 在这方面就做了修改,允许这种组合)。

    另外……“几十位的随机密钥”……怎么说呢……比如币圈用的 BIP39 助记词,用 12 个单词(单词表里有 2048 个单词)就可以表示 128bit 的熵,这强度,不说顶天,很显然也足够高了。
    如果说 12 个字符输入起来还是很冗长,那么用 base64 的话,21.33 个大小写字母+数字+2 个符号组成的混合字符也足够表示 128bit 的熵。确实是几十位,但至少不是四五十七八十位吧,貌似还不至于完全不能用。
    (更不用说其实还可以搞成开机解锁全盘加密输入长密码+锁屏输入短 PIN 这种模式,这个模式纯软件就可以吧,不需要类似 TPM 的技术)

    RMS 说的问题,主要是远程证言( remote attestation )这块吧,我记得 Magisk 的开发者 John Wu 就在推上很悲观的吐槽过,说谷歌的 safetynet 看上去要部署远程证言技术了,用了这个技术后,其实几乎就不可能再通过类似 magiskhide 之类的 trick 来隐瞒设备 bootloader 已经解锁的状态,然后用户就会面临“app 检测到设备已解锁,拒绝运行”而束手无策的局面,也就是“被绑架了”。
    TPM 貌似在刚推出的时候,也有点这个意思,虽然它貌似只是拼图中的一块而已,但毕竟它还是属于“可信计算”这个体系,RMS 喷的也是这个体系吧。
    acess
        5
    acess  
    OP
       2021-07-10 01:03:35 +08:00
    @jim9606 我记得远程证言好像依赖于 secure enclave——enclave 这个词查字典是“飞地”的意思,“国中之国”,独立不受外界管辖——那么这跟 RMS 吐槽的“背叛计算”不就是对上了么?用户作为设备的主人,却没有完全控制设备的权力 /自由。(所以才可以实现像网游防作弊之类的功能啊)

    开源是另一个层面的事情,和 enclave 不是一个层面吧。
    acess
        6
    acess  
    OP
       2021-07-10 01:05:58 +08:00
    @jim9606 (欸,4 楼有个地方我打错了,“如果说 12 个[字符]=>[单词]输入起来还是很冗长”)
    acess
        7
    acess  
    OP
       2021-07-10 01:08:39 +08:00
    @jim9606
    我看完 RMS 的文章的时候也在想:有些时候,设备确实是不属于用户的,比如属于公司,或者干脆就是公共设施。但是对于前者,RMS 举了一个例子就是公司先压迫员工再销毁电子证据;对于后者,貌似也还是直接在物理层面做好工作才简单、直接、有效。
    jim9606
        8
    jim9606  
       2021-07-10 01:32:01 +08:00
    @acess Android 4.4 开始引入 Full Disk Encryption ( FDE,跟 Bitlocker 一样),Android 7.0 开始引入 File-based Encryption ( FBE ),并在 Android10 成为强制要求。我用过的荣耀 6 就支持 FDE (要手动开启),首次开启要一次十几分钟的不可中断的加密,然后以后每次开机都要输两次密码,体验算不上好。为啥换 FBE 其实也不复杂,为了让系统能在无密码时启动并在未解锁前支持紧急通话、无障碍服务、密码找回应用等非敏感功能,FDE 做不到这点。因为 FDE,Windows 也做不到在未解锁时连接网络引导用户通过微软账户解锁系统。

    我感觉 FBE 的方案算是很平衡了,也兼有 FDE 的有点,就是实现更复杂。设备加密存储空间在开机后可用,用类似 TPM 的方法保护,防硬件入侵。凭据加密存储空间额外要求锁屏密码,保护敏感用户数据。

    ( https://source.android.com/security/encryption/full-disk )
    ( https://source.android.com/security/encryption/file-based )

    我说的几十位就是指 Bitlocker 恢复代码,缩短方法有得是,但用户不喜欢。真的有人喜欢在电话里念一个 Base64 密钥?

    我个人觉得反抗 SafetyNet 应该用市场手段解决,不能让 APP 开发者认为 SafetyNet 是一个普遍可用的功能。例如国内没有垄断的 GMS,SafetyNet 普遍不可用,国内的 APP 就不会要求这个认证了。感觉 RMS 也不怎么关心非专业用户的想法。对他们而言,同样为了安全可信,去信任一个有专业能力的公证方比自己审查代码要简单太多。
    acess
        9
    acess  
    OP
       2021-07-10 01:53:55 +08:00
    @jim9606
    “因为 FDE,Windows 也做不到在未解锁时连接网络引导用户通过微软账户解锁系统”
    额……要说 Windows 这边,我感觉……BitLocker 相当于 FDE 的话,其实 EFS 不就差不多相当于 FBE 么?细节上的差异可能很多(比如文件名加密),但本质上好像基本上是一回事。
    acess
        10
    acess  
    OP
       2021-07-10 01:55:06 +08:00
    @jim9606
    其实很多人干脆就不想加密呢……甚至我都不是非常愿意加密,毕竟加密了就会导致数据恢复的困难增加。

    BitLocker 我还知道可以用 manage-bde 导出密钥恢复数据包,安卓的 FDE 、FBE 呢?反正我是不知道……而且加密后会产生数据损坏扩大的问题,一个 bit 翻转就会导致整个 block 解密出来都不对了。(额,换句话说,我也想知道哪些文件系统自带冗余功能,虽然硬盘本身在底层也做了冗余纠错之类的……)
    acess
        11
    acess  
    OP
       2021-07-10 01:56:30 +08:00
    @jim9606
    SafetyNet 确实在国内很少有 app 在用。但目前好像还是有不少手机厂商压根就不给用户解锁 bootloader 吧?

    ADUI 什么的也不是一天两天了,甚至国内不是还规定预装 app 必须可以卸载么……
    acess
        12
    acess  
    OP
       2021-07-10 02:02:09 +08:00
    @jim9606 另外在我看来规定预装 app 必须卸载这还远远不够。首先就是还要其他无孔不入的内置广告推送(也许国内其实也覆盖了这方面而我不知道?);其次就是……比如我想抓个包,想 sslunpin,很显然 bl 不解锁,想做到这些就会束手束脚(不过很显然,技术是双刃剑,如果方便了安全爱好者 /安全审计研究专业人员,那么黑灰产也同样会得到更大的便利)。再其次,就是 /t/695575#r_9333290 这样说多了会炸号的问题了……
    acess
        13
    acess  
    OP
       2021-07-10 02:15:17 +08:00
    @jim9606 你要说怎么提高小白用户的安全性,我也感觉,可能有了 secureboot 之后(貌似安卓手机这边也叫 secureboot,然后这个“secure”估计也属于被 RMS 炮轰的范围之内吧,我看很多年前 FSF 对微软已经开过炮了?说 secureboot 名叫“secure”就很鸡贼,应该叫“restricted”还差不多),搞 bootkit 就至少会面临一定的阻碍。

    但是……就像微软很多年前就开始搞 DSE 一样,其实黑灰产不仅可以钻 DSE 政策过于宽松的漏洞(我记得过期吊销证书签名照样可以加载进内核,当年 Win10 1607 说收紧了,但我记得当时自己实测一下基本还是老样子,表面上安装驱动时报错,实际上还是加载进内核了),还可以注册一个公司来拿到“真正”的签名。前一阵子甚至还爆出一个黑灰产内核 rootkit 驱动被微软签名的案例( solidot sid=68143 )。
    billlee
        14
    billlee  
       2021-07-10 02:16:14 +08:00
    @acess 你说的对,以前我看可信计算的介绍也没看明白,但从 john wu 那里弄明白了
    billlee
        15
    billlee  
       2021-07-10 02:22:55 +08:00   ❤️ 1
    @acess secureboot 还是有用的,特别是在企业环境。这个和 remote attestation 不一样,PK 是可以自定义的。

    服务器写入自己的 PK, 一路 bootloader, 内核、内核模块都签名下来,真的有用。
    acess
        16
    acess  
    OP
       2021-07-10 03:07:00 +08:00
    @billlee
    secureboot 可以是“自己家的大门钥匙自己掌控”这种模式;

    remote attestation 是要说服另一个人,让他相信我这边没作弊开挂金手指,实际上是让硬件制造商在中间充当权威第三方。这样一来,没办法自定义一个 key pair,只能是大家都信任制造商的公钥,信任制造商签过名的 key pair 。

    拍脑袋想一下,大概就是这样吧:
    设备制造商在出厂前烧录进去一个 key pair,这个 key pair 用厂商的私钥签名。
    用户无法读取这个烧录进去的 key pair 私钥;而且用户手里没有厂商的私钥,所以也没办法自己生成一个 key pair 来冒充。
    然后硬件层面上剥夺用户对 enclave 的控制权,用户无法偷窥 enclave 里的数据,也无法篡改 enclave 里的数据。
    这样一来,硬件用厂商烧录进去的 key pair 给 enclave 里的东西签名,就可以作为“证言”说服另一方,让另一方相信我这边没作弊开金手指修改器(当然,前提是信任硬件厂商不会作弊)。

    然后一方面是上文提到的,需要信任硬件厂商不作弊;另一方面就是这个体系很“专制”,厂商 VS 用户,用户在这里面属于吃亏的一方,safetynet 其实就可见一斑了。
    技术都是双刃剑,一方面可以说这样可以阻止网游开挂作弊,甚至还可以实现数字货币离线支付;另一方面就是用户的自由受到了侵害。再有貌似就是技术上像 Intel SGX 、ARM TrustZone 这类好像都是“虚拟隔离”,更容易受侧信道泄露之类安全漏洞威胁。

    个人理解就是这样。
    gBurnX
        17
    gBurnX  
       2021-07-10 04:58:13 +08:00
    Win11 在 13 年前的 CPU 与主板上都能安装成功( E8500 ),不需要理会 TPM 这些事情,微软不会自断后路的。
    Jirajine
        18
    Jirajine  
       2021-07-10 08:30:32 +08:00 via Android   ❤️ 2
    他说的没错,arm 上的 TEE 也是一样,所谓的 trust 不是对用户,是对厂家而言的,厂家可以确保用户没有篡改环境。相应的到应用开发者(通过 safetynet )、drm 等,都是防范用户的“安全”。
    凡是预置厂家密钥,并且不允许用户添加与厂家密钥等同地位的 root of trust 的所谓“安全、可信平台”,确实都该炮轰。
    Jirajine
        19
    Jirajine  
       2021-07-10 08:38:07 +08:00 via Android   ❤️ 1
    其实我不反对 secure boot 这种一环接一环的签名验证机制,但关键是必须要允许用户自行添加与厂商预置密钥地位等同的 root of trust,也就是说这个 trust 要包含 trust 用户才行。像 Android 某些设备可以自己倒入密钥,自己签名 ROM 然后上锁 bootloader,但还是会被区别对待当作不安全。证书也是一样,用户添加的证书默认不被应用信任,和系统内置的证书区别对待,导致内网部署 HTTPS 服务无比困难,不得不用真正的域名找公共 CA 签证书并且将安全性寄托在公共 CA 上。
    cache
        20
    cache  
       2021-07-10 08:40:08 +08:00
    @acess
    https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/tpm-key-attestation

    Every TPM ships with a unique asymmetric key, called the Endorsement Key (EK), burned by the manufacturer. We refer to the public portion of this key as EKPub and the associated private key as EKPriv. Some TPM chips also have an EK certificate that is issued by the manufacturer for the EKPub. We refer to this cert as EKCert.

    所以现在设备制造商(华硕 /Intel ?)可以在没有密码的情况下解密本机的数据?
    ryd994
        21
    ryd994  
       2021-07-10 08:52:05 +08:00 via Android
    @acess 我举一个应用场景:
    服务器机房,硬件烧录的公钥 CA 。私钥由用户自己掌握。然后提供签名过的磁盘镜像给厂家。厂家把 CA 写死在硬件里,并且预装指定的系统镜像。用户验证公钥正确即可。

    大公司定制生产服就是这么干的。
    billlee
        22
    billlee  
       2021-07-10 13:23:42 +08:00   ❤️ 1
    @cache Endorsement Key 是用于 remote attestation 的,和加密没有关系。
    honeycomb
        23
    honeycomb  
       2021-07-10 16:18:47 +08:00 via Android
    @acess 对 RMS 来说,任何对数字版权系统有帮助的机制都有很大可能是负面的,因为它们几乎必定威胁到了用户权利。
    wangkai0351
        24
    wangkai0351  
       2021-07-10 16:44:10 +08:00
    @Jirajine 厂家大多认为机器是可控的安全的,用户人是不可控的,因此 trust root 给到机器,给不到用户人。当然如果完全把人消灭了,也就没有任何 attack 了。
    binsys
        25
    binsys  
       2021-07-10 19:03:48 +08:00
    事实上 TPM 就是厂商增强对用户设备的控制的一种手段,就想国内大多强制用手机号注册各种账号一样,顺着一股风就吹来了。这玩意和当前移动设备的各种 bootloader 异曲同工啊。
    Jirajine
        26
    Jirajine  
       2021-07-10 19:40:45 +08:00 via Android   ❤️ 3
    @wangkai0351 如果用户没有 root of trust,那么这些所谓的 security,trusting 就不是 protect user,而是 protect against user,传递到操作系统,用户连个私有 CA 证书都没权利添加。
    用户买了设备却没有私钥,就像买了房子没有钥匙一样,开门都要管家帮你开。希望以后西方 zf 可以推动立法禁止这种行为。
    jim9606
        27
    jim9606  
       2021-07-10 23:43:01 +08:00
    @acess
    现在能推广开来的可信执行技术基本上都是中心化的信任根。去中心化的方法我想到的就是以太坊那种,成本高太多了。

    微软驱动签名那个没啥办法,除非所有驱动都是自己做,跟 OS 一起分发,像 macOS 那样。微软也没能力让生态系统完全摆脱第三方驱动程序,或者通过破坏驱动兼容性的方法收紧对内核的控制权。
    acess
        28
    acess  
    OP
       2021-07-11 21:46:32 +08:00
    @jim9606 感觉跟以太坊还是差太多了……

    虽然“可信计算”貌似也宣称可以用于“两个人不互信,硬件充当第三方来作证”这类用途,而且区·块·链在很多地方貌似也宣称“机器铁面无私,人可能贪污腐败”,但两者貌似还是不太靠的上边的。(而且区·块·链不也是面临各种批评,认为去中心化是伪去中心化,trustless 也是空中楼阁么)

    (据我的理解)区·块·链,是怎么达到“无需信任”( trustless )的呢?
    是最笨最低效的办法:
    (公开账本内容,允许任何一个人)跑全节点,把整个账本从创世区块开始独立、完整地验证一遍。
    即便如此,还是需要信任矿工没有 51%攻击回滚重写账本。
    (而且币圈对这个“两层”的概念也有争议,不少人都不认可这个概念,认为实际上还是只有矿工说了算、只信任矿工,不存在什么第一层“跑全节点独立验证”……不过即便是不认可第一层概念,仍然不妨碍矿工之间至少还是要相互验证对方写入区块的内容,更不用说公链一般是 permissionless,网络是自由进出的)
    既然要(每个人都)自己重新验算一遍,效率极度低下是一方面,隐私完蛋就是另一方面——虽然结合加法同态、零知识证明之类的技术也可以部分地保护隐私(隐藏转账金额甚至资金去向)。

    这个帖子里说的“可信计算”很显然不是靠“我自己来重新验算一遍”(也不是靠矿工之间的相互博弈),而是靠剥夺用户对设备的完整控制权来实现“相信机器铁面无私”(虽然实际上还是相信设备制造商不会作弊开后门,归根到底还是在相信人)。而且这个帖子里说的“可信计算”很大程度上是很偏向厂商的利益的,有点像手机刷机锁或是游戏主机防破解之类的。
    acess
        29
    acess  
    OP
       2021-07-11 21:50:14 +08:00
    @jim9606
    关于驱动签名,我不知道 mac 那边是啥情况,但反正我觉得开篇就是一句“不要用 kext,请找其他替代方案”就是耍流氓……
    acess
        30
    acess  
    OP
       2021-07-11 21:51:03 +08:00
    @jim9606 有句话是怎么说的来着,想要安全?那好,不要上网,甚至不要用电脑了。
    苹果那一句“不要用 kext 了”就给我这个感觉,因噎废食。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   944 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:25 · PVG 04:25 · LAX 12:25 · JFK 15:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.