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

Record and share interesting information.

contact: [email protected]
https://youtu.be/8Vmv10p9Y44?si=1RFFOpoHqZwLfrY8

之前披露了 3M 和 Dupont 的黑料,这次来黑一把强生(Johnson & Johnson)。

多年以来,强生的爽身粉一直是美国家庭的必备品,也是安全和干爽的代名词,人们会将其用在任何地方,包括婴儿和成人。1999 年,部分家庭怀疑自己家人的癌症是因为强生公司生产的爽身粉中包含石棉,但是强生公司矢口否认,此案不了了之。

2018 年,路透社披露强生公司的内部文件显示,早在 1957 年强生就发现了其产品中包含石棉,并且有潜在的健康风险。1976 年 FDA 曾打算限制爽身粉中的石棉含量,但是强生公司的律师成功地说服了 FDA,假称爽身粉中不包含任何石棉,但实际上强生公司已经从多个实验室得知它的产品中石棉含量“相当高”。

这事儿还有另一个令人震惊的事实,强生在 1971 年为了测试石棉对人体的影响,聘用 Albert Kligman 从监狱(Philadelphia County Prison)中挑选了 50 名囚犯做活体实验,其中 44 人为黑人。在未告知风险的情况下,直接将石棉制品注射或涂抹到囚犯的皮肤上。如今我们知道石棉的致癌作用主要在肺部,所以当年的皮肤试验并未发现特别严重的副作用。此外,Kligman 声称自己并未违反当时的道德标准,至死也拒绝道歉。

* 路透社关于石棉和爽身粉的报道
* Bloomberg 关于监狱人体实验的报道
前文介绍了 AC(Anonymous Credential) 的概念和基于 RSA 的 CL-Signature。这篇笔记则介绍了基于 ECC 的 BBS+ Signature,从性能上来说会比 CL-Signature 更好。

我此前对 AC 的理解存在一些偏差,Anonymous 最侧重保护的不是被签名的隐私数据(witness),而是数据拥有者(Holder)的身份。其应用场景是,当 Holder 为自己的 witness 提供 statement,Verifier 在验证这个 statement 的时候,也无法揭露 Holder 的身份。

拿传统的非对称签名来举个例子,会有三个角色:根证书持有者(Issuer),隐私数据拥有者(Holder),验证者(Verifier)。Holder 需要从 Issuer 获取自己的个人证书,用自己的私钥对 witness 进行签名生成 statement,然后将 (公钥证书链、statement、witness) 一起提交给 Verifier。Verifier 预先已信任了 Issuer 的根证书,从而验证了 Holder 的公钥可信,然后用 Holder 的公钥验证 statement,最终确认 witness 的真实性。

为了提高隐私性,上述描述中有两个需要改进的需求:

1. 匿名性:Holder 的公钥证书暴露了自己的身份信息(attributes)
2. 零知识:Holder 为了验证向 Verifier 披露了 witness 的明文

这两个需求分别对应密码学的两个方向,前者是 anonymous credential,后者是 ZKP,分别有不同的协议家族和应用。虽然这两者的实现和应用很多时候互相交织,但是核心目的是不一样的。
P ≠ NP

以前我对 P ≠ NP 理解是有点偏感性的,以为就是描述只能被暴力搜索求解的问题是否能够被快速求解。

实际上 NP(Nondeterministic Polynomial time)这个词是描述了一类特殊的问题,这些问题的解可以被迅速证实,但是不能够被快速求解。

比如一副拼图,拼好后你可以短时间内验证拼图是否正确,最差情况下你挨个看一遍也足够了(多项式时间内)。但是没有一个简单的办法让你去从头完成一副拼图。P ≠ NP 描述的就是,能够在多项式时间内被证实的问题,是否也能够在多项式时间内被求解?

另一个经典的 NP 问题就是旅行家问题(Traveling Salesman Problem),找到一条路径,能够不重复地遍历所有的城市并回到起点。你可以很容易地验证某个路径的正确性,却很难找到这个路径。

不同的 NP 问题有不同的求解难度。其中最难的一些 NP 问题被称为 NP-completeness。这些最难的 NP 完备问题互相等价,预示着 NP 问题的一些核心本质,一旦有任何一个 NP 完备问题被破解,就意味着所有的 NP 问题都能被迅速求解。
密码学里经常看到 Random Oracle Model 这个名字。这是一种假想中的完美 Hash Function,具有如下特性:

1. 接收一个从未见过的输入,返回一个唯一且不可预测的输出。
2. 接收一个曾经见过的输入,返回和上次相同的输出。

ROM 这样的完美 Hash Function 在现实中并不存在,但是现实中的 Hash 都是在尽可能的接近它。经常举的一个例子就是 SHA-1,它不是 ROM 的原因就是有 length extention attack 的风险。

假设有一个消息 mH = SHA1(m)。如果已知 H 和 m 的长度,那么就可以伪造 H' = SHA1(m || m')。也就是说,即使不知道 m,我也可以计算出 m + m' 的哈希值。这就违背了 ROM 不可预测性的原则。
我一直是 macbook air 的鼓吹者,推荐利用 macbook air 作为随身移动办公的 GUI,然后远程连接性能强大且廉价的 PC 服务器。而 tailscale 则充当网络的连通者。

拿我自己来说,我家里有一台不关机的 windows PC,作为我的主力娱乐机。上面通过 vmware player 运行了一台 linux 服务器作为我的主力开发机。然后随身携带一台 macbook air 作为我的移动办公机。

mba 轻便,UI 友好,而且没有风扇不会积灰,Apple Silicon 的性能足够强大。因为负载都在远程,本地极为节能,续航时间超长。

有越来越多的人对 tailscale 感兴趣,我整理了一下以前的笔记:

1. 关于 tailscale 的安装与配置 https://blog.laisky.com/p/tailscale/
2. 关于 tailscale 的网络穿透 https://blog.laisky.com/p/tailscale-nat/

Vmware Pro 个人用户免费啦! https://blogs.vmware.com/workstation/2024/05/vmware-workstation-pro-now-available-free-for-personal-use.html Recent experiences with tailscale
https://youtu.be/t8qGtEVh7oQ?si=i7BDTBO2ZoLqZYhi

最近爱上刷 Bloomberg 的纪录片了,制作都很不错。

《The Forever Chemical Scandal》介绍了人造有机化合物家族 PFAS,它的主要危害表现为:

1. 能够在人体和自然界永久存在,且已经在人体和自然界中广泛存在;
2. 多年来被大量制造和广泛使用,遍布于日常生活之中;
3. 对人体的危害仍然缺乏全面的研究,目前发现对免疫系统有抑制作用;
4. 可以通过母婴传给下一代,换言之,PFAS 已经将人类永久污染了。

PFAS 化合物家族的成员数量繁多,目前难以对其进行一一检测和研究。而且因为多年的广泛使用,即使在没有任何工业的法罗群岛上,也在人体中检测到了高浓度的 PFAS 污染。

PFAS 诞生于曼哈顿计划,后来因为其优秀的防水特性,被 3M 公司用于广泛的消费品之中。3M 公司很早前就在内部调查过 PFAS 的潜在危害,然而和其他所有的巨头公司一样,决定对自己重要产品的危害性严守秘密。

前些年的水污染大案《Dark Waters》的罪魁祸首 PFOA 也是 PFAS 家族的一员,不过这次隐藏秘密的换成了杜邦公司(DuPont)。

next: https://t.me/laiskynotes/181
https://youtu.be/Azm4yKKIlqE?si=fMmY_X1-4yR-yYwT

一部短小但是很深刻的纪录片,介绍欧美对俄罗斯原油价格实施价格制裁(Price Cap)后,实际上没有起到应有的作用,反而导致通胀和养肥了一大帮掮客。

简单介绍下背景,世界上有两个主要的原油交易市场:布伦特(Brent)和乌拉尔(Urals),俄罗斯的原油主要通过乌拉尔市场进行交易。俄罗斯入侵乌克兰后,欧美对乌拉尔原油实施了一系列的限制,包括禁售、限价等等。战前两个市场的原油价格非常接近,但是随着制裁,布伦特的价格上涨,乌拉尔的下跌,两个市场间出现了相当大的价差。

中国人最熟悉的,行政干预让市场扭曲,那就会存在权力寻租的空间。因为布伦特和乌拉尔的大幅价差,进口乌拉尔原油再倒卖去布伦特就成了一个暴利的生意,而其中的关键就是如何“洗油”,将乌拉尔原油的俄罗斯身份清洗干净,片中介绍了两种方式:

1. 将乌拉尔原油输送中国、印度进行加工提炼后,再以成品油的身份出口,这就不是俄罗斯的产品了。
2. 载满乌拉尔原油的油轮来到公海,秘密将原油输送给另一艘身份干净的油轮。

于是就有了图中的那一幕,俄罗斯购买了大量破烂不堪的油轮组成影子舰队(shadow fleet),负责将乌拉尔原油运送至希腊附近的海域,然后偷偷将原油转运至另一艘身份清白的油轮上,神不知鬼不觉地完成了“洗油”。再将这些原油运送至中国和印度精炼,最后将成品油以高价出口至欧美。有需求就会有供应,市场永不停转,一切都是利益分配的游戏。

这一现象反映出几个问题:
1. 欧美对全球市场的控制力远不如当初了,G7 的全球 GDP 占比只有 30% 出头,和 BRICS 几乎平起平坐
2. 行政对市场的扭曲几乎总是失效的,最终无非是利益的转移。这次原油制裁就是把消费者的利益转移给了掮客,而掮客们的背后,是谁?

Ps. 片里的希腊风光真漂亮
Laisky's Notes
https://laisky.notion.site/Anonymous-Credential-Part-2-Selective-Disclosure-and-CL-Signature-4e88462949764a579222d810c614842a 想象这么一个场景,政府给你签发了身份证,政府为这个证件背书上面的信息都是真实有效的。 然后你为了上某 X 网站,需要证明你已经年满 18 岁。于是你把身份证信息加密后上传给网站,然后选择只披露其中的姓名和年龄属性。网站通过签名验证这个身份信息确实是由政府…
简单粗暴地理解椭圆曲线算法(Elliptic Curve Cryptography)。

首先,绘制一个扭曲的曲线。然后在这个曲线上定义一种名为加法的运算:

1. P 点和 Q 点相加: 绘制直线 PQ,得到和曲线的第三交点为 R,R 的 x 轴镜像点为结果。
2. P 点自己和自己相加: 绘制 P 点的切线,得到和曲线的交点 R,其镜像点为结果。
3. 定义零值为 y 轴的无穷远处,和零相加等于画一条垂直线。

如上我们定义了运算规则,接下来就是从曲线的点中选取一些点构成一个循环群。群就是一组满足相同规律的数的集合。循环群(cycle group)中存在一些本原元(primitive element),这些原元通过不断累加,可以遍历整个群。

形象地说,你找到一个本原元点(primitive element),然后不断地累加这个点,利用前文我们所介绍的加法运算,你其实就是在曲线上不断地跳跃,并最终会跳回起点。

ECC 加密算法中,就是构建这么一个曲线,它的循环群内的成员数量达到 2^100 次方,我们认为这个量级的数是无法靠暴力遍历破解的。这个曲线的每一个值是根据一个大素数的模的方程构建的,成员数量约等于这个素数的位数,一个 160-bits 的素数可以构建一个包含 2^160 个点的群。

然后给出这么一个公式 dP = T。P 是一个 primitive element,它累加 d 次后会得到 T 点。P、T 是公钥,d 是私钥。这也是为什么 ECC 的私钥可以很短。

也就是说,我公开展示最终的 T 点,但是不告诉你我跳跃了多少次。你是难以通过暴力遍历去求解 d 的。这个 dP = T 就是构建了一个离散对数问题(DLP),计算 dP 很简单,但是逆运算求算 d 很复杂,需要暴力搜索 2^100 的空间。

既然利用 ECC 构建了 DLP,那么就可以利用 ECC 替换传统 DLP 问题,比如 Diffie-Hellman 密钥交换算法,现在可以重构为基于 ECC 的 ECDH 算法。

Alice 和 Bob 都确认一个曲线和一个 primitive element P。然后双方各自生成一个 d,然后交换计算结果 dP。拿到对方的 dP 后再乘上自己的 d,就会得到一个相同的 T。窃听者能拿到曲线、P、d_alice*P 和 d_bob*P,但是他无法逆向求解 d_alice 和 d_bob,所以无法破解最终的 T。

PS: 所有的 DHKX 算法,都难以防御中间人攻击(MITM attack),即攻击者可以篡改通信,同时和双方握手。解决办法是引入数字证书,对对方的公钥进行签名。
PS: 安全的椭圆曲线是很难绘制的,一般参考 NIST 的推荐。 #crypto

next: https://t.me/laiskynotes/173
https://youtu.be/x_isZHaZjcU?si=fUVBFw_FvrkqJi63

通过访谈和讲述几位以色列人和巴勒斯坦人的真实故事,非常简明扼要的阐明了自 1948 年以色列建国以来的 60 年动荡历史。

先是在战争中从周围的阿拉伯国家里获取领土,通过大驱逐建立了一个犹太国家。然后是与周边国家的艰难和谈,经过以色列 Meir 夫人、埃及 Anwar El-Sadat 总统、巴勒斯坦武装领袖 Yasser Arafat、以色列总理 Yitzhak Rabin 等人的不懈努力,曾一度取得了和平的希望。

可惜激进派的火苗从不曾熄灭,Sadat、Rabin 被暗杀,加沙地区信奉原教旨主义的哈马斯崛起,Arafat 被边缘化。以色列的鹰派 Netanyahu 上台,奥斯陆协议(Oslo Accord)被抛弃。巴以之间陷入了漫长的袭击与报复的循环,迄今看不到任何和解的希望。

next: https://t.me/laiskynotes/204
https://youtu.be/r0Ji7KqqEqg?si=Dobd3qPl8BW8zZHm Hostomel 之战的详细解释。实际上俄军 VDV 强袭机场得手后,当天下午就被包围了。乌军的炮击破坏了机场设施,使得 18 架次的后续增援部队无法降落。
我觉得降落了估计也不会有特别大的影响,毕竟俄军主力很快就从北方推进到了此处,然而除了搞个 bucha 大屠杀外再也无所作为。
https://laisky.notion.site/Anonymous-Credential-Part-2-Selective-Disclosure-and-CL-Signature-4e88462949764a579222d810c614842a

想象这么一个场景,政府给你签发了身份证,政府为这个证件背书上面的信息都是真实有效的。

然后你为了上某 X 网站,需要证明你已经年满 18 岁。于是你把身份证信息加密后上传给网站,然后选择只披露其中的姓名和年龄属性。网站通过签名验证这个身份信息确实是由政府颁发的,其中的信息真实可靠,而且证件上的年龄显示你已经年满 18 岁,而证件上的其他信息都对网站不可见。

在上述流程中,政府(issuer)为你(holder)签发了信息,你选择将部分信息披露给网站(verifier)。这就是 Anonymous Credential(Anoncred)或称为 Attribute-based Credential(ABC)。

这一算法的特点包括:

1. issuer 可以使用一对公私钥,签发 K 组信息。
2. holder 可以选择性地披露 N 组信息(N<=K)。
3. verifier 可以通过 issuer 的公钥验证 holder 所披露的信息的有效性。

穿插提一下密码学中的 Commitment Schema。Alice 可以对一个未披露的 Message 声明 Commitment,Bob 可以保留这一 Commitment,直到 Alice 披露 Message 后,Bob 可以验证这一 Message 是否与 Commitment 一致。结合前面所提的 ABC,其实就是一个 Commitment Schema,Issuer 为 Holder 的信息背书(statement signature),Verifier 需要 Holder 披露信息后才能验证真实性。

最简单的实现就是基于 RSA 的 CL Signature,更多细节可点击查看: https://telegra.ph/CL-Signature-02-26-2 #crypto

next:
- ECC & ECDSA & ECDH
- AC & ZKP
Laisky's Notes
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,也就是放弃让用户记忆…
此前讨论过 passkey 的一个缺陷(https://t.me/laiskynotes/64 ),就是需要客户端存储太多数量的 resident keys,这对于如 Yubikey 这样的 security keys 设备非常不友好,因为消费级 security keys 往往只有 10~20 个 private key slots。

https://laisky.notion.site/HD-Wallets-Explained-From-High-Level-to-Nuts-and-Bolts-44d109ed89e04bb79f993234f185848e?pvs=4

最近学习了 Hierarchical Deterministic Keys 结构。HD Keys 本质上是一种面向非对称密钥的 KDF(key derivation function)。它可以从一个 root private key 为根节点,通过添加一些 key material 生成新的 child key。

KDF 是一个确定性(deterministic)的函数,也就是相同的输出,始终能得出一样的结果。这一概念对于熟悉 KMS 的人而言并不陌生,其实所有的 KMS 都是只存储 master key 的。HD Keys 的主要特点就是支持了非对称密钥。

那么我们是否可以把 HD 和 passkey 结合起来,让用户只需要存储一个(或多个,增强安全性)root key,然后服务端存储 key derivation materials,这样用户依然可以做到不同网站使用不同的 child key,而同时又不需要存储大量的 resident keys?

#crypto Laisky's Notes
早上一来就修了个 bug。

Azure OAI 的响应格式有变化,以前可以通过 choices 为空来判定对话已结束。而现在 azure oai 会首先返回一个 choices 为空的响应(只包含 content filters 结果),会导致老程序误判会话已结束。

你需要 skip 这些 empty response,然后把有内容的响应拼接起来。我的套皮站最近可能遇到会话卡住没有响应的问题,就是这个原因,已修复。

如果各位有 azure oai 项目发现响应突然变成空了可以排查下…
Telegram Channel