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

Record and share interesting information.

contact: [email protected]
https://laisky.notion.site/SDXL-in-4-steps-with-Latent-Consistency-LoRAs-3baba49183874166ad5fece67b4d066e?pvs=4

此文从使用上简要介绍了 stable diffusion LCM LoRA 蒸馏模型(distillation),还提供了可运行的 python 代码。

简而言之,蒸馏模型就是在原有大模型的基础上训练出一个更小更快的模型,而且其输出效果和大模型接近。过去蒸馏模型都是定制化的,而 LCM 是一个通用型的蒸馏模型,你可以指定任何一个预训练的模型,然后套上 LCM 来使用。

LCM 可以在更少的步数(steps)上实现和原模型相近的效果,大幅缩短推理耗时。 SDXL in 4 steps with Latent Consistency LoRAs | Notion
读到一个很有启发性的观点:

你帮别人省了 1000 元,别人可能会勉为其难地给你 20 元报酬。
但如果你说能帮别人赚 1000 元,对方很可能会大方地承诺分你 200 元甚至更多。
https://youtu.be/cfaubxeS5HU?si=ViN-j4iDEY5hHgWV

FT 介绍拜登的“实业振兴国家大基金”计划,总投资计划高达 8910 亿美元。

虽然名字叫做"抑制通胀法案(Inflation Reduction ACT, IRA)",但其内容既和通胀无关,也和抑制无关,其核心目标是让制造业重新回流美国,切断对中国的产业链依赖,并且推动美国向清洁能源大幅转型。

这个法案也存在一些核心争议:

1. 川普再次上台后会不会废除这项法案?
2. 欧洲对该法案表达不满,认为完全破坏了 WTO 的全球化框架。
3. 中国垄断了再生能源制造业,没有中国,有可能完成激进的清洁能源转型吗?
Laisky's Notes
昨天那篇文章介绍了 QUIC 并不一定更快。这篇文章则更犀利地指出,QUIC 不仅不快,简直慢得要命😂。 原生 QUIC 的吞吐只有 TCP 的 27.7%,只有 TCP+TLS 的 42.5%。 https://laisky.notion.site/QUIC-vs-TCP-Which-is-Better-ad3bcd403c2340038a6d761fe70b1984 而从优化的思路可以看出导致 QUIC 慢的主要原因:逐包 ACK、逐包加密、用户态处理导致的额外切换开销。 而优化方式也是对症下药,延迟…
此文驳斥了那些认为 QUIC 更快的迷思,逐条分析批判了那些常见的“认为 QUIC 更快”的观点。QUIC 的根本目的是为未来做好一个易于部署和迭代的基座,其当前版本的性能没有任何优势甚至更慢。

https://laisky.notion.site/HTTP-3-Performance-Improvements-Part-2-Smashing-Magazine-bc610b26c95e4d2cb258bfca78f8240d?pvs=4

1. 拥塞阻塞?QUIC 也有
2. 0-RTT?QUIC 最多只能比 TCP 少一个 RTT,而且还极不安全。
3. connection migration?需要大改负载均衡器,而且没太大收益。
4. HoLB?取决于 multiplexer 算法,大部分情况下都比不上串行。
5. 和 TCP + TLS 比?QUIC 的性能远逊于 TLS。

prev: https://t.me/laiskynotes/62 HTTP/3: Performance Improvements (Part 2) — Smashing Magazine | Notion
Laisky's Notes
继续聊聊 BitLocker & TPM 的一些安全须知。 BitLocker 属于 Windows OS,开机后需要先启动 OS,所以 C 盘仅支持自动解密,只有其他非系统盘支持 TPM + PIN 等外部密钥手动解密。所以不要在 C 盘上放敏感信息。你可以搜索一下“BitLocker 绕过”的相关新闻,自动解密有很多安全隐患。 而且,虽然 TPM 是安全的,但是 TPM 和 CPU 间的通信是通过主板明文进行的,物理上存在飞线攻击的可能性。所以不能单纯地信任 TPM,而是要引入外部密钥,而最常用的就是…
为了防止误人子弟,基于 TPM PCR 加密必须得强调一些事实。

前文讲到基于 TPM RootKey 和 PCRs 来派生密钥,这样可以确保系统完整性。但是 PCR 是基于 SHA 算法的,一旦你系统升级,这个度量值也会变,那么你就没法再派生出相同的密钥了,从而导致解密失败。这个特性被称为 TPM 脆弱性,英文为 TPM Brittle/Fragile。

TPM 2.0 为这个问题提供了解决方法,原理很简单也很通用,就是让密钥派生支持基于非对称密钥签名的校验。简而言之,你可以提供一个公钥,然后只要被度量对象有被指定私钥签名,那么就可以通过 TPM 校验,并且始终派生出相同的密钥。

这种基于公私钥签名的方式非常常见,比如 UEFI SecureBoot 就是这么校验 OS 的,CPU 也是这么校验 UEFI 的。不过 BitLocker 没有采取这种方式,BitLocker 仍然是基于 PCRs,但不是全部 PCRs,而是主要使用了 firmware 的 PCR,使得大部分 OS 升级都不会影响到 BitLocker TPM 的密钥派生。

顺带一提,在 https://chat.laisky.com 上选择 【QA -> security】可以激活一个安全领域的 chatbot,可以询问更多 TPM 相关的问题,所有的回答还会提供更详细的在线参考资料链接。
Laisky's Notes
gpt-4-vision 的 API 选择 low resolution 的话,识别图片的价格是固定的,非常便宜,连一分钱都不到。就算结合输入输出的文字每次的使用费也就几分钱。 low resolution 的识别效果也非常好,拿来看图识物学习外语也好,水评论也好,帮你改 CSS 也好,真是十分得心应手,强烈推荐。 最后,我觉得对于绝大部分人而言,gpt-plus 的 $20/月 的价格是浪费的,现在 gpt-4-turbo 和 gpt-4-vison 如此便宜,我很难想象你要怎么才能用到 20 美元。何况实际上…
关于我之前提到过的 openai 套皮站,有几个朋友咨询我充值方式,我写了个说明,统一发一下。(实际上不仅仅是套皮,有空就会加点脑洞功能😁

https://wiki.laisky.com/projects/gpt/pay/cn/#page_gpt_pay_cn

这是个非营利性项目,所以我没费劲去接支付,充值只能靠和我邮件联系然后转账,退款同理。
因为境外支付存在高额手续费,我目前按照 8:1 的汇率计算美元充值,退款同理。等我明年有了境外银行卡,就可以按实价换算了。

我之前一直说 API 省钱,这个站开到现在 5 个月了,总开支只有 8 美元。

更新比较频繁,遇到问题先刷新页面试试。还没法解决可以邮件联系我。代码是我业余时间糊的,前端是手写 vanilla js,后端是 gin。代码非常烂,不怕眼瞎可以帮我改 bug:https://github.com/Laisky/go-ramjet/tree/master/internal/tasks/gptchat (抽空写点垃圾代码是我最爱的解压方式😂
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
Telegram Channel