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

Record and share interesting information.

contact: [email protected]
https://laisky.notion.site/The-quantum-state-of-a-TCP-port-29b94af7bedf49beb958045c3c1dbc02

很有趣的关于 linux 上 TCP 本地端口自动分配的文章。

虽然理论上,TCP 连接只要求 (src_ip, src_port, dst_ip, dst_port) 的四元组不同,但实际情况复杂得多,即使使用了 SO_REUSEPORT 也不能保证本地端口一定能被复用,而且虽然 bind(2)/connect(2) 都支持自动分配本地端口,但对应的却是不同的处理逻辑。

这其中的逻辑错综复杂,以至于作者在文章标题中将其戏称为“量子态”。
结论:推荐使用 IP_BIND_ADDRESS_NO_PORT & bind(2) 的方式绑定端口,可以最大化本地端口重用的概率。 The quantum state of a TCP port | Notion
Laisky's Notes
各位使用 azure openai 的建议去查查自己的账单。我的上一期账单,azure 的实际扣费单价比公示价格高了 30 倍。我去开了 ticket 后同意给我退款。 而且这个多出来的费用不会显示在 cost management 里,而是仅仅存在于 invoice 里(很鸡贼!)。 后续:钱已经退我了,但是我对 azure 的处理是不满意的,有两个我认为很严重的问题没有给出任何解释: 1. 只承认计价错误,没解释这个模型根本不存在,何来的单价? 2. 没解释这个费用为什么完全绕过了 cost management…
关于和 Azure 沟通的一些后续,先记下来,日后也许可以写篇博客(根本没时间😭)。

1. cost management 确实不准,在 billing period 结束后的 5 天内都可能大幅调整
2. invoice 页面可以下载详单,里面会记录所有的计费细节

我是不太理解啊,如果 budget 可能比账单晚 5 天,那这个 budget 的意义是什么?

最后是一个我忍不住一定要吐槽的,Azure 理解的 Model Version 跟我的直觉完全不一样。同一个 Model 的不同 Version 其实可能是完全不同的 Model,费用也完全不一样。

比如我图片上这个 gpt-35-turbo,如果你选了 1106 这个版本,它其实就变成了 gpt-35-turbo-16k,价格会贵一倍。具体什么 version 是什么模型和费用,没有一个统一的文档,你只能去 azure 零星的发布稿对着目录一项项地仔细确认。千万别像我一样无脑选最新版,到时候怎么破产的都不知道,毕竟费用根本不会在 cost management 和 budget 上显示,突然月底就扣你信用卡了,哈哈哈哈。

next: https://t.me/laiskynotes/121
https://laisky.notion.site/How-it-works-The-novel-HTTP-2-Rapid-Reset-DDoS-attack-Google-Cloud-Blog-6e0b3c1840824c51a55f5ec0c65dcfe5?pvs=4

CVE-2023-39325 利用 HTTP/2 单 tcp conn 上可以承载任意数量 stream 的特性,结合 stream rapid reset 的特性,实现超高强度的 DDoS 攻击。攻击者可以忽略 RTT,直接把己方的带宽跑满。
相当于在 HTTP/2 上打出了 UDP flood attack 的效果。前几个月各个被打趴的站盛传的“来自应用层”的攻击,基本都是这个。HTTP/3 也得考虑做相应的预防措施。

Go 的修复方式是将每个连接的 MaxConcurrentStreams 数设置为 250,起到一些缓解的作用。 https://github.com/golang/go/issues/63417
推荐一个我一直在使用的,利用 gpt 自动生成 git commit 信息的工具。

地址: https://github.com/zurawiki/gptcommit

安装方式: cargo install gptcommit

激活方式: 进入本地 Git Repo 的文件夹,然后运行 gptcommit install

配置方式: 编辑 ~/.config/gptcommit/config.toml

model_provider = "openai"
allow_amend = false
file_ignore = [
"package-lock.json",
"yarn.lock",
"pnpm-lock.yaml",
"Cargo.lock",
]

[openai]
api_base = "https://oneapi.laisky.com/v1"
api_key = "xxxx"
#model = "gpt-3.5-turbo"
model = "gpt-3.5-turbo-0301" # alias for gemini-pro
retries = 2


使用方式: git add -u && git commit 即可

上述配置中,我使用 one-api 作为转发,将 gpt-3.5-turbo-0301 的请求转发给了免费的 google gemini。
不过目前 one-api 的 gemini 转发是有 BUG 的,会导致 gptcommit 无法使用,我提交了一个 PR 修复这个问题 https://github.com/songquanpeng/one-api/pull/841
或者可以考虑使用我自己的 fork 的 docker 镜像: ppcelery/one-api:latest
https://proxy-ipv4.com/en/isp/?country=ukraine

推荐一个代理站,可以非常廉价的买到世界各地的 IP,尤其这个 ISP Proxy 号称可以提供高可信的真实 IP。比如可以买一个 Ukraine IP 然后去买 Youtube Premium。

注:大陆境内到这些 proxy 不一定能直连,你可以挂个多级代理转发一下,出口走这个 proxy 就行。
各位使用 azure openai 的建议去查查自己的账单。我的上一期账单,azure 的实际扣费单价比公示价格高了 30 倍。我去开了 ticket 后同意给我退款。
而且这个多出来的费用不会显示在 cost management 里,而是仅仅存在于 invoice 里(很鸡贼!)。

后续:钱已经退我了,但是我对 azure 的处理是不满意的,有两个我认为很严重的问题没有给出任何解释:

1. 只承认计价错误,没解释这个模型根本不存在,何来的单价?

2. 没解释这个费用为什么完全绕过了 cost management 和 budget?

next: https://t.me/laiskynotes/98
Laisky's Notes
* Atomic energy, climate, and Russia https://youtu.be/2Ws6qbf_hcA?si=MpkfnPPV2JyewdSS * Nuclear Aftershocks https://youtu.be/lRmaugZUIGU?si=AOtfQgl_7NpQFogF * Can hydrongen help the world reach net zero https://youtu.be/v7UwbJ8n9L0?si=IT3gWjD1JnoFNi_t 最近…
顺带简单提一句,很多人以为气候变暖是温水煮青蛙,拖一拖忍一忍就行了。但其实不是的,气候变暖是一个正反馈系统,做一个形象的比喻就是,气候灾难就是卡在半山腰上的一块巨岩,而人们正在试图撬动它。一旦它被撬动了,它就会加速地滚下山将人类文明砸个粉碎。而且一旦这块巨石开始滚动了,人类即使立刻停止一切碳排放,也丝毫不会影响到这块巨石的加速滚落过程。所以人类的全部机会,就是阻止撬动这块巨石,而我们并没有很多时间和空间了。

Ps. 很多人以为气候变暖就是热一点而已,但其实最大的威胁来自于湿度而不是温度。
人的散热依赖于汗液蒸腾作用,如果环境湿度过高,人体就只能靠辐射散热。当环境湿度为 100% 时,35 摄氏度的气温就能让在阴凉室内静卧的人热死。
* Atomic energy, climate, and Russia https://youtu.be/2Ws6qbf_hcA?si=MpkfnPPV2JyewdSS
* Nuclear Aftershocks https://youtu.be/lRmaugZUIGU?si=AOtfQgl_7NpQFogF
* Can hydrongen help the world reach net zero https://youtu.be/v7UwbJ8n9L0?si=IT3gWjD1JnoFNi_t

最近看了好几部关于核能和新能源的纪录片,记一个笔记:

* 因为气候危机迫在眉睫,人类必须立刻大幅削减碳排放。
* 但是可再生能源存在一个重大缺陷,就是供能不稳定,一整个风能园区或太阳能园区可能会在短时间内失去发电能力。
* 所以可再生能源必须搭配一个稳定的功能单元一起运行,而核电站就是一个非常理想的稳定发电单元。
* 福岛核危机敲响了警钟,让欧洲尤其是德国走向了弃核之路。德国人的观点也很正确,我们不能寄希望于这种危险且无法控制的东西。
* 核能还有个问题是,俄国垄断了全球商业核能的核原料供应,即使在俄乌战争期间,欧美也没敢制裁俄国核工业企业,因为他们都依赖于俄罗斯的核燃料。
* 新能源也有类似的问题,中国垄断了新能源材料的生产,比如稀土和太阳能板。
* 美国发起了千亿美元的 IRA 法案,希望将制造业带回美国,并且全面转型新能源。但是该法案遭到了欧洲的批评和抵制
* 欧洲正在大力发展氢能源,希望让由可再生能源制造的氢能扮演起稳定供能的角色。

next: https://t.me/laiskynotes/90
最近调研了一下国密,我被这东西震撼到了。国密 TLS 和国际 TLS 不兼容,国密和国密互相间也不兼容🤮。大量的属性字段各个库各自拍脑袋决定,A 库加密的东西只有 A 库能解密。

似乎也正是因为兼容性问题,各家的实现最终都收敛到 gmssl 这个 C 库上来了。

补充:同为 C 库,还有一个项目是阿里的铜锁。然而,铜锁和 gmssl 互相不兼容…

2023/12/22 补充:最终我选用了铜锁,因为它是基于 openssl 的,支持非常细粒度的操作。顺带一提,不兼容性主要围绕 X.509 的各项属性定义,国密没有加入到国际体系,所以各个实现各自定义了一套,这也就导致了互不兼容。但如果你只用到了对称加密、哈希,是不会有不兼容的。
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
Telegram Channel