Telegram Channel
记录和分享有趣的信息。

Record and share interesting information.

contact: [email protected]
Laisky's Notes
前文提到实际的密码更复杂,现在就具体看看 BitLocker 的密钥生成和加密流程: 1. OS 生成一个加密磁盘的 AES 密钥 FVEK 2. 再生成一个用于加密 FVEK 的 VMK 3. 用 TPM PCR + PIN 加密 VMK 4. 将加密后的 VMK、FVEK 保存到磁盘头 5. 将 VMK 作为 RecoverKey 上传到 AD、个人账户中,或者由用户自行保管 6. 用 FVEK 对磁盘进行全盘加密 使用时,OS 启动后,使用 TPM PCR + PIN 解密 VMK,如果系统启动…
继续聊聊 BitLocker & TPM 的一些安全须知。

BitLocker 属于 Windows OS,开机后需要先启动 OS,所以 C 盘仅支持自动解密,只有其他非系统盘支持 TPM + PIN 等外部密钥手动解密。所以不要在 C 盘上放敏感信息。你可以搜索一下“BitLocker 绕过”的相关新闻,自动解密有很多安全隐患。

而且,虽然 TPM 是安全的,但是 TPM 和 CPU 间的通信是通过主板明文进行的,物理上存在飞线攻击的可能性。所以不能单纯地信任 TPM,而是要引入外部密钥,而最常用的就是 PIN。

此外,可能和很多人的直观感觉不一样的是,在全盘加密这件事上,Windows、Mac 这样的封闭系统做得比 Linux 好,甚至说 Linux 根本没有可信的全盘加密。

参考:https://laisky.notion.site/Authenticated-Boot-and-Disk-Encryption-on-Linux-65df0a1b26e848beb3c86afb7d7096df

Linux 的问题在于只使用了用户密钥对磁盘进行加解密,而解密用户磁盘依赖于 initrd,而 initrd 并不一定被度量和校验了。即使 firmware 和 initrd 被篡改,系统仍然能够不被察觉地正常启动,并询问用户密码来解密磁盘。(因为没有引入 TPM PCRs 的度量值,是否有被篡改不会影响磁盘密钥的生成)

补充介绍一下 Linux 的启动流程(极简版):

1. UEFI 校验 OS 的签名,然后启动 initrd(内存文件系统)
2. initrd 询问用户密码,解密磁盘,加载 OS

可以看到目前很多 Linux 发行版的一个目标就是引入类似 BitLocker 这样的结合 TPM PCRs 的全盘加密(FDE)。但是,很多 Linux 用户追求的都是无需介入的 TPM 自动解密,而我们已经知道自动解密并不够安全。

Ps. 一个冷笑话,目前为止我们讨论的都是针对物理设备的攻击,此类攻击也被命名为 evil maid attack,因为是针对 at-rest 的攻击😂

next: https://t.me/laiskynotes/82
Laisky's Notes
踩了个小坑,我有一台廉价的 storage VPS,系统是 ubuntu 16.04 + 2.6.32。这台机器上我跑了一个 minio + nginx + tailscale 当 s3 用。配置非常差,我一般懒得登上去。然后我家里的台式机上也有一个 minio 作为 replica,这个 minio 我经常升级。两个 minio 的版本就越差越远。 然后昨天晚上,线上的 minio 因为鉴权不兼容,在 sync 的时候居然挂了。我登上去手动更新了一下可执行文件即可。 借此机会想抒发几个感慨: 1.…
今天早上我的 s3 又故障了,下载文件的速度只有 0.5mbps,我上机器测了下速没问题,然后用另一台机器和这台 s3 服务器跑了下 iperf 也没问题。基本确认是 cloudflare 欧洲的 cdn 网络节点故障了(s3 服务器在立陶宛)。我把 s3 服务器的网关改到美国,然后在美国接入 cloudflare cdn,速度就恢复到 100+mbps 了。

感觉 cloudflare 最近越来越不稳定了。就我个人来说,从他们开源的 cfssl 代码,和 cloudflared 的软件质量来说,我感觉这公司做事情很糙。
Laisky's Notes
前文介绍了 TPM 的 PCRs 会度量和记录系统的状态链。 然后介绍一点点密码学基础,密码学上有一个函数叫做 KDF(Key derivation function)。一般在一个比较完善的密码管理系统里,比如 KMS(Key Management Service)只会持有一个或少量的 Root Key,或者叫 Master Key。然后在运行时,根据收到的请求,进行实时的密钥派生,派生的方法就是 new key = KDF(master key, new key info)。或者你就简单地记住:用一个…
前文提到实际的密码更复杂,现在就具体看看 BitLocker 的密钥生成和加密流程:

1. OS 生成一个加密磁盘的 AES 密钥 FVEK
2. 再生成一个用于加密 FVEK 的 VMK
3. 用 TPM PCR + PIN 加密 VMK
4. 将加密后的 VMK、FVEK 保存到磁盘头
5. 将 VMK 作为 RecoverKey 上传到 AD、个人账户中,或者由用户自行保管
6. 用 FVEK 对磁盘进行全盘加密

使用时,OS 启动后,使用 TPM PCR + PIN 解密 VMK,如果系统启动的全流程都未被篡改,就可以成功解密 VMK,然后用 VMK 解密 FVEK,最后再用 FVEK 解密磁盘。系统被篡改、TPM 被损坏、磁盘被换到其他机器都会导致无法解密,从而提高了磁盘数据的安全性,而且用户还完全无感知。

用户持有的是 PIN 和 VMK(恢复密钥),真实加密数据的 FVEK 永不出域。

这种设计在密钥体系中很常见,一般称为 hierarchy key structure,实际加密数据的密钥是永不出域的,出域的密钥都是可以随时轮替的。无论用户是要修改 PIN 还是修改 VMK,都不会影响到 FVEK。毕竟 FVEK 变化所导致的成本非常高昂,需要对所有数据进行重新加解密。

next: https://t.me/laiskynotes/78
Laisky's Notes
TPM 是一个硬件加密芯片,这个只有几厘米大小的小芯片内内置了 24 个寄存器,称为 PCRs(Platform Configuration Registers),每个寄存器都可以保存一个 SHA256/384 的哈希值。这些 PCRs 寄存器保存的值在断电后会被清空,但是在工作状态时,仅允许被写入一次,一旦写入就变成只读。 这一系列的 PCRs 被用来记录系统启动时不同阶段的度量值。机器启动的每一个重要阶段,都会度量(measure)当前的状态(你可以把度量理解为对系统当前状态计算一个 hash value),传给…
前文介绍了 TPM 的 PCRs 会度量和记录系统的状态链。

然后介绍一点点密码学基础,密码学上有一个函数叫做 KDF(Key derivation function)。一般在一个比较完善的密码管理系统里,比如 KMS(Key Management Service)只会持有一个或少量的 Root Key,或者叫 Master Key。然后在运行时,根据收到的请求,进行实时的密钥派生,派生的方法就是 new key = KDF(master key, new key info)。或者你就简单地记住:用一个根密钥,加上一段任意信息,就可以派生(derive)出一个新的密钥。而且派生过程是确定性的,相同的 master key 和 key info 永远能派生出相同的新密钥。

再补充一点 TPM 的知识,像 TPM 这样的加密芯片(Secure Processor),类似的还有 Apple T2、Intel PTT、AMD fTPM 等,其核心都是一个 tamper-proof 的 NVRam(Non-Volatile Memory)。用普通人都能理解的话来说就是,其内部有一个外面的人绝对不可能窥探的存储器,可以保存一个绝对不会外泄的设备根密钥。这个根密钥没有任何人知道,连制造商都不知道,只有这个加密芯片它自己才知道。

好了,现在我们把 TPM 的设备根密钥当作 master key,把 TPM PCRs 当作 key info,再调用一个 KDF 函数,就可以派生出一个密钥来。如果拿这个密钥来加密你的磁盘,那么就可以保证只有这块 TPM 在一个未篡改的操作系统(OS)上才能解密你的磁盘啦。

Ps. 实际上的密钥体系远比这复杂,但基础原理就是这样的。
Ps2. 我有维护一个术语表,你可以查询提到的术语的含义 https://wiki.laisky.com/terms/

next: https://t.me/laiskynotes/73
Laisky's Notes
公司的 IT 群发了一封关于有人 PC 被 BitLocker 锁死无法恢复的邮件通知,可能有的人不了解 BitLocker 究竟是什么,正好聊聊这个话题。 BitLocker 是 Windows 上的一个对磁盘做全盘加密的软件。它为磁盘提供 at-rest 的防护。通俗地说就是,它用来保障即使你的硬盘被坏人偷走,坏人也没法破解其中的数据。这块硬盘必须要由它当前所在的这台机器(主要是同一块主板上的 TPM 芯片)才能解锁。 这段描述中有几个关键信息: 1. BitLocker 提供的是 at-rest…
TPM 是一个硬件加密芯片,这个只有几厘米大小的小芯片内内置了 24 个寄存器,称为 PCRs(Platform Configuration Registers),每个寄存器都可以保存一个 SHA256/384 的哈希值。这些 PCRs 寄存器保存的值在断电后会被清空,但是在工作状态时,仅允许被写入一次,一旦写入就变成只读。

这一系列的 PCRs 被用来记录系统启动时不同阶段的度量值。机器启动的每一个重要阶段,都会度量(measure)当前的状态(你可以把度量理解为对系统当前状态计算一个 hash value),传给 TPM。TPM 将其和启动以来收到的所有值加和到一起,计算出一个 hash value,存入指定的 PCR。

你可以认为,TPM 就是一个硬件 blockchain,每一个 PCR 就是一个 block,每一个 block 都包含了前一个 block 的 hash value,这样就形成了一个不可篡改的链条。可以用来证明系统从启动之初到当前的状态链。从而可以用来证明系统的 BIOS/UEFI 和 kernel 没有被篡改(保证了完整性)。

next: https://t.me/laiskynotes/71
公司的 IT 群发了一封关于有人 PC 被 BitLocker 锁死无法恢复的邮件通知,可能有的人不了解 BitLocker 究竟是什么,正好聊聊这个话题。

BitLocker 是 Windows 上的一个对磁盘做全盘加密的软件。它为磁盘提供 at-rest 的防护。通俗地说就是,它用来保障即使你的硬盘被坏人偷走,坏人也没法破解其中的数据。这块硬盘必须要由它当前所在的这台机器(主要是同一块主板上的 TPM 芯片)才能解锁。

这段描述中有几个关键信息:

1. BitLocker 提供的是 at-rest 静态保护,开机后的数据安全不归他管。
2. 必须要先解锁才能使用磁盘,所以不要把恢复密钥放在磁盘上,这相当于把保险箱钥匙锁保险箱里。

启用 BitLocker 需要有 TPM 2.0 芯片,你可以对照你的主板型号去买一个插上,也就 30 块钱左右。

BitLocker 有多种加密方式,推荐使用 BitLocker + PIN 的模式,这样的话你会有两个密码:

1. PIN 密码:解锁磁盘需要人工输入的密码
2. Recover Key:解锁失败时的恢复密钥

使用 PIN 是为了提高安全性,因为单纯依赖 BitLocker + TPM 的自动开机解密存在被绕过的可能性,要求输入 PIN 可以彻底堵上这个漏洞。PIN 和 TPM 必须协同作用才能解锁磁盘。Recover Key 则是最后的急救手段,可以无需 TPM 就解密数据,应该妥善地离线保管在安全的地方。(这两个密钥都不应该保存在被加密的硬盘里)

后续会另发一篇介绍 TPM 是什么,是如何实现加密的。

next: https://t.me/laiskynotes/69
https://laisky.notion.site/How-Hype-Will-Turn-Your-Security-Key-Into-Junk-ac50dfbc44354bdfab17ef76e72ece13
非常不错的文章,介绍了目前 passkey 领域可能正在走的一条歧路。

补充:关于 yubikey 是什么,以前写过一篇文章 https://blog.laisky.com/p/yubikey/

众所周知,FIDO、WebAuthn 等正在推动 passwordless,也就是放弃让用户记忆 password,转而采用 security key 等固件来实现无密码身份认证。

除了 yubikey 等专用设备外,各类内置加密芯片的 iphone、android、mac 等设备也可以集成 passkey。

但是 passkey 的具体实现上,存在 resident key/non-resident key 两条路。简单粗暴的概括下就是:

* non-resident key 方案:仅需要 security key 设备持有一对公私钥,就可以对接任何服务端。缺点是需要用户输入用户名
* resident key 方案:需要 security key 设备为每一个服务端记录一对唯一的公私钥,优点是用户不需要输入用户名和密码,缺点是对 security key 设备的要求高了。

android passkey、icloud keychains 这种依赖加密芯片的软件,可以支持存储无限多的 resident key。但是像 yubikey 这样的廉价专用硬件,其能存储的公私钥对(slots)是有限的,往往只有 5~20 个。

所以如果 resident key 方案成为主流,实际上 yubikey 等设备相当于就被挤出市场了。这违背了 WG 当初声称的“可以支持所有用户设备”。

Ps. 会搬运整理一些以前发在 X 的资讯贴到这里,方便归档索引。

next: https://t.me/laiskynotes/163
踩了个小坑,我有一台廉价的 storage VPS,系统是 ubuntu 16.04 + 2.6.32。这台机器上我跑了一个 minio + nginx + tailscale 当 s3 用。配置非常差,我一般懒得登上去。然后我家里的台式机上也有一个 minio 作为 replica,这个 minio 我经常升级。两个 minio 的版本就越差越远。

然后昨天晚上,线上的 minio 因为鉴权不兼容,在 sync 的时候居然挂了。我登上去手动更新了一下可执行文件即可。

借此机会想抒发几个感慨:

1. storage vps 除了硬盘大没其他优点,除了跑 s3 没其他用处。廉价 VPS 我也买过不少了,之所以便宜都是因为有大坑,😮‍💨
2. Go 的静态编译真香,这破机器上我就只能跑得起来 Go 的程序。
https://arxiv.org/pdf/2311.00871.pdf 这篇论文指出,大模型(LLM)对上下文的理解能力(ICL)不是一种通用的泛化能力,而是对预训练数据的检索能力。

用通俗的话说就是,不是一个智能理解了你的问题,而是它从数据集里搜索到了关联数据。

我现在愈发认为 LLM 只是一种高效的信息压缩算法,它的特色在于解压的效果也依赖于输入(prompt)。而 ICL 其实类似于心理学的“锚定效应”,所谓的 prompt engineering 只是在试图让 LLM 的答复锚定到更高质量的预训练数据集上。

至于能不能通向 AGI,对既有方法的灵活运用也是能够导向创新的,但是目前 LLM 的问题在于知识质量鱼龙混杂,需要人类高效 prompt 才能引出高效的答复,这可能预示着它只能扮演一个 copilot 角色,而且它的能力和人类搭档的能力是成正比的。
_6bd9a568-8ef1-4bbe-b8b2-9f752ae39f73.jpg
194.4 KB
gpt-4-vision 的 API 选择 low resolution 的话,识别图片的价格是固定的,非常便宜,连一分钱都不到。就算结合输入输出的文字每次的使用费也就几分钱。

low resolution 的识别效果也非常好,拿来看图识物学习外语也好,水评论也好,帮你改 CSS 也好,真是十分得心应手,强烈推荐。

最后,我觉得对于绝大部分人而言,gpt-plus 的 $20/月 的价格是浪费的,现在 gpt-4-turbo 和 gpt-4-vison 如此便宜,我很难想象你要怎么才能用到 20 美元。何况实际上 gpt-plus 是有很严格的使用频率限制的,你要高频需求只有 API 能满足…

如果你付费困难的说可以考虑第三方的套皮站,比如我的套皮站就是按量计费,我这个站公开了好几个月了,所有人的总开销甚至都没达到 20 美元,你算算你买 gpt-plus 得有多亏…(除非你是激进的前沿功能玩家,但是据我观察,很多人是没那些伪需求的)
Ps. 不是软广,亏本吆喝,我希望使用 GPT 的门槛越低越好,大家都要尽快把 AI 融入到自己的日常生活工作中。
Telegram Channel