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

Record and share interesting information.

contact: [email protected]
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 融入到自己的日常生活工作中。
https://youtu.be/EMXnJMCoFYI

WSJ 在 2023-06 拍摄的揭露瓦格纳雇佣军团背景的纪录片。

我第一次见识瓦格纳是在乌克兰战场以俄军炮灰的身份出现,但其实在俄罗斯全面入侵乌克兰以前,瓦格纳一直在小心翼翼地和俄罗斯政府撇清关系。

虽然瓦格纳的背后完全是俄罗斯的政府资金和军火,但是瓦格纳明面上是一个完全私人的雇佣军集团,发家于叙利亚战争。它在叙利亚的运营模式是,帮助叙利亚的巴沙尔政府夺取油气田,然后从中获取 25% 的利润分成。这套模式让瓦格纳在叙利亚赚得盆满钵满,这些钱一部分用于维护自身运作,一部分进入普里戈金的腰包,还有相当大一部分回流回克林姆林宫。

在叙利亚还发生了一起小插曲,2018年2月瓦格纳军团进攻由美军支持的抵抗军油气田,美军询问俄军是否参与,被俄军否认后,美军出动空军全歼了这支瓦格纳军队,造成数百人死伤。(Battle of Khasham)

叙利亚模式让克林姆林宫尝到了甜头,于是开始在全球范围内推广这套模式,罪恶的魔爪遍及四大洲,前阵子九名中国工人在中非被杀就是出自瓦格纳之手。

然而乌克兰战争让瓦格纳从幕后走向了台前,和俄军的关系逐渐明朗化,部队组成也从精英战士向囚犯炮灰转变。
当专家们预言这代表着瓦格纳即将面临转型时,军事叛变发生了,不过这是发生在这部纪录片以后的事情了。
https://pkg.go.dev/crypto/ecdh #golang

Go 1.20 引入的这个 ECDH 包性能相当可以,比我之前用的第三方 DHKX 包快 80 倍😂

Ps. DH 是密钥交换算法(Diffie-Hellman key agreement/exchange protocol),Alice 和 Bob 各自生成自己的公私钥对,并交换公钥。
然后各自用自己的私钥和对方的公钥可以计算出一个相同的共享密钥,这个密钥可以用来作为后续通信的对称密钥。
284841701413039_.pic.jpg
27.6 KB
前文提到过,HTTP/2 的分帧是不彻底的,仅仅是应用层 stream,而在传输层 TCP 看来仍然是一个 stream。HTTP/3 将 stream 拆分做到了传输层,在 UDP 层面就以 stream 为单位,声称解决了所有的 stream 间 HoLB 问题。

https://laisky.notion.site/HoL-Blocking-and-Priority-Inversion-LiteSpeed-Blog-4601095b01ed4f8d87bc3bc40ed665d7

很可惜现实是残酷的,其实 stream 间的阻塞也没解决。这次问题出在 QPACK: Field Compression for HTTP/3 上。

HTTP/1 时代,大量流量被浪费在重复传输 HTTP fields 上(如 HEADERS),所以从 HTTP/2 时代起,就引入了 HPACK 来压缩 HTTP fields。客户端和服务端各自维护一个 fields table,然后进行增量的更新。

在 HTTP/3 上保留了这个设计,并更名为 QPACK。但是 QPACK 的设计有个问题,它让 stream 间失去了独立,带来了依赖关系,而我们都知道,依赖关系会导致 HoLB。

具体来说,因为 QPACK 只传输增量更新,所以每一个 request/response 都需要指定一个 REQUIRED INSERT COUNT,表示这个 request/response 至少依赖于哪一个版本的 fields table 的更新。而 HTTP/3 的 fields 更新是以 HEADER 的形式和 DATA 一起传输的(gQUIC 原始设计中独立的 HEADER stream 被 IETF/QUIC 取消了),换言之,fields 的更新属于某一个 data stream。而这个 data stream 的优先级,是由 data 而不是 header 决定的。

这就导致了一个很可怕的现象,一个高优先级的 stream,可能会因为缺乏必要的 REQUIRED INSERT COUNT 而被另一个携带 fields 更新的低优先级 stream 阻塞。

更可怕的是,按照 RFC-9204 规定,当一个 stream 被 REQUIRED INSERT COUNT 阻塞时,接收方应该一直缓存这个 stream 直到 REQUIRED INSERT COUNT 满足为止。如前文所述,如果是高优先级的 stream 被低优先级的 stream 阻塞,那么接收方必须很傻地接受完全部高优先级数据后,才能继续处理低优先级的数据。而高优先级的数据就只能躺在缓存里傻等低优先级的增量更新完成后,才能被处理。

prev: https://t.me/laiskynotes/40
next: https://t.me/laiskynotes/62 HoL Blocking and Priority Inversion in QUIC | Notion
Telegram Channel