Sky Watch

记一件有意义的事

水果 CSAM 识别

最近水果出了个事,叫做 CSAM,Child Sexual Abuse Material,简单地说就是儿童色情检测。这是 iOS 15 将要加入的「新」功能(待会儿要说到为什么「新」是加引号的)。消息一开始是泄露出来的,从泄露出来的消息来看,这个系统是这样的:

  • 对于手机里的照片,计算某种 hash,并上传 hash,iCloud 和本地照片都有。

  • 对于匹配的照片进行人工审核。

这年头上传 hash 这件事基本就不是事,涉及到隐私的部分在「人工审核」这里。人工审核肯定不是审核 hash 了,必然要上传照片本身(当然水果并没有说,我猜的)。那么水果凭什么偷偷上传你的照片本片呢?肯定是要在用户协议里偷偷加东西了。

但是!!!

这件事最可怕的点不在这,而是

  • 水果把所有人都当成潜在的儿童色情罪犯。

  • 如果我国要求水果扫描用户的政治性图片并上报怎么办?

后来水果发布了一个 FAQ,并且某高管接受了一个采访,透露出了另外一些信息:

  • 匹配 hash 的过程发生在本地,hash 不上传。而且这个匹配是「非常准确」的。

  • 只匹配 iCloud 上的照片,用户可以通过关闭 iCloud Photo 来 opt-out。

  • 在孩子的 iMessage 里自动识别 18+ 内容。这个家长需要 opt-in。这个和上面那个儿童色情匹配无关,是个独立的功能。

所以至少这些功能是可以关闭的。但是这点很奇怪⋯⋯既然匹配是在本地,为什么不同时也匹配本地非 iCloud 照片?非 iCloud 的儿童色情就不是儿童色情了?水果不关心儿童安全么? 为什么允许 opt-out?Opt-out 的儿童色情就不是儿童色情了?水果不关心儿童安全么?我觉得大概的确是这样,水果只关心自己的云里有没有 CASM,用户本地的照片不是水果的责任。

另外在采访里,记者连续问了三个同样的问题,就是如果政府要求水果识别除儿童色情以外的照片,水果怎么办。水果在第三个问题的时候才稍微沾点边地回答了这个问题:这个功能只在美国启用,在美国的法律框架下政府很难强迫水果加入识别合法内容的功能。那么如果我国政府要求水果加入其他识别功能呢?水果的回答是这样的:

The hash list is built into the operating system, we have one global operating system and don’t have the ability to target updates to individual users and so hash lists will be shared by all users when the system is enabled.

简单地说就是「我们的操作系统是全球统一的,所以我们无法单独为一群人加入某个功能」。

哪尼???你刚刚不是才说了识别儿童色情这个功能只在美国有么???你可以在全球加入这个功能然后只在某国开启啊?????所以实际上水果是承认了他们会在政府的要求下加入其他识别功能。

不过我国人民也不用过于担心,我国有云上贵州,不需要这个功能。

Did someone say “hash”?

既然是 hash,那必然就有碰撞。水果官方说了,每年发生碰撞的概率大概是「万亿分之一」。所以自然发生的碰撞几乎是不可能了?那么有没有可能人工构造碰撞呢?

有大佬发现,在 iOS 14 里其实已经内置了这个匹配功能,并且能导出模型。使用这个模型,另外一些大佬很容易的就构造出了碰撞;还有些大佬构造出的,内容就是这张图的 hash。所以人工构造碰撞不仅可能,而且似乎很简单。这有没有可能是一个攻击的方向呢?我作为安全小白就不知道了。假设有人构造了一个看似无辜的碰撞图,比如看起来是个酷炫的壁纸,发到网上让人下载,会在很多人的手机里触发 CSAM。这种「自然发生」的人工碰撞,概率肯定是要大于万亿分之一的。

另外真・自然发生碰撞概率是不是真的这么低呢?显然这个概率很难估计,但是有人使用导出的模型扫描了 ImageNet,已经发现了两对碰撞(互相碰撞,不是和 CSAM 碰撞)。

「新」功能?

CSAM 这件事本来到这里就没什么好说的了,但是无独有偶,水果正在和 Epic 进行的官司竟然透露出了更多的信息。在这个官司公开的文件中,有水果高管在内部邮件里说了这么几句:

The spotlight at Facebook etc. is all on trust and safety (fake accounts, etc). In privacy, they suck. Our priorities are the inverse. Which is why we are the greatest platform for distributing child porn, etc.

哪尼??水果是最大的儿童色情流通平台???当然这倒不是特别值得惊讶,就算水果不是「最大的」,也肯定是「很大的」,毕竟水果有那么多用户。关键是水果怎么知道自己是最大的儿童色情流通平台?答案当然是:水果扫描用户信息了。的确,在这个邮件公开以后,水果不得不承认,他们从 2019 年就开始扫描用户的邮件中的 CSAM 了。

长期以来水果的卖点一直都是隐私。水果从自研芯片(iPhone 4)开始,基本上所有的技能点都是围绕这个主题展开的。Security enclave,Touch/Face ID,differential privacy 等等这些与隐私密切相关并且水果大书特书的特性,其实归根结底起点都是自研芯片。我们都知道在大概 iPhone 5s 和 iPhone 6 的时候,水果设备的安全性得到了一次巨大的提升。从此以后,FBI 就很难从锁着的 iPhone 里提取数据了,关注这点的同学可能还记得 2016 年 FBI 因为无法破解一个 iPhone,要求水果给操作系统添加后门的,我当时还在囧乎写了一篇文章。水果甚至还在 Black Hat 2016 上做了个报告,来显摆 iPhone 和 iCloud 的安全架构。

但是 CSAM 这件事基本上就相当于重置了水果的这些努力。如果水果也会扫猫用户的照片甚至邮件,Google 也会扫描(其他厂商很早就开始扫描 CSAM 了),那水果在隐私方面还有什么优势呢?

一个违背祖宗的决定

ancestor

大家都知道水果是一个在用户体验设计上高度自负的厂商,同时他们只为主流市场设计体验。这样就形成了一个局面:当水果认定自己的设计对于主流是最佳体验以后,他们就会非常的固执,并且拒绝为非主流用户提供选项,而主流用户确实也非常买账。但是对我来说有个问题⸺我不是主流用户⋯⋯

在 iPhone 上,想从电脑上传音乐文件只能使用 iTunes,这是一个特别古老的设定,古老到乔帮主刚回到水果,发布 iPod 的时代。为什么水果不更新这个古老的设定呢?因为主流用户都去用 streaming 服务了,没有人再想从电脑上上传音乐。但是我想。我有 74 GB 的音乐文件,并且我只听这些音乐;实践证明,只要是我音乐库以外的音乐,我一定不爱听,这 74 GB 就是全宇宙仅有的我爱听的音乐。我为什么还要用 streaming 服务呢?

在 iPhone 上,如果用户想要运行自己写的 app,就必须每年交 $100 成为开发者,否则自己写的程序只能在 iPhone 上运行几天。这是一个安全设定,现在认为对于主流用户,可以随心所欲地运行任何程序是巨大的安全漏洞;事实也确实如此,想想我国有多少个人电脑上装着 360 和百度全家桶,再回忆一下上次的 XcodeGhost。但是我既不是主流用户也不是开发者,我是那种 95% 的时间很正常,剩下 5% 的时间会写点自用 app 的奇怪用户,我才不会为了那 5% 而交 $100 的年费。

水果去掉了 iPhone 上的耳机口,因为水果认为 iPhone 的终极体验就是无线使用 AirPods, it just works™。AirPods 音质不好?主流用户不会在意的,毕竟水果耳塞可能就是他们这辈子听过的音质最好的设备。但是我在意,我买 UM3X 回来不是当摆设的。

因为这些原因,我一直在考虑换成安卓手机,但基本一直是观望。这次 CSAM 事件之后,我终于认真考虑更换了,毕竟就像之前说的,至少在隐私上水果已经没什么优势了。安卓手机的选择很多,我看了一圈评测,最终选中了全宇宙最便宜的 Pixel 4a。

换鸡辣
Figure 1. 换鸡辣~~

违背祖宗后的体验

到目前为止,新手机已经用了两个月,最大的感觉就是在 iOS 上自带的程序在安卓这边都是第三方的。比如听音乐的程序,如果你像我一样只听本地存储的音乐,在 iOS 上基本就只能使用自带的音乐程序,而在安卓这边有很多的选择。这其中根本的原因是 iOS 不开放文件系统,用户没法自由地上传音乐文件。而在安卓上上传音乐,又比用 iTunes 上传方便很多。除了可以自由地用目录组织文件以外,还可以直接用 m3u8 播放列表,而不用依赖 iTunes 里的弱智播放列表管理。至于像 iPhone 只能和一台电脑同步音乐这样莫名其妙的古老设定,在安卓上当然也是不存在的。

关于音乐,在水果这边还有个奇妙的设定:我不知道你知道不知道,iPhone 其实原生支持 FLAC 编码的音乐!如果你在 Files 或者 iCloud Drive 里放个 FLAC 文件,是可以直接播放的。但!是!iTunes 里不支持导入 FLAC 音乐,所以 iOS 自带的音乐播放器依然不能播放 FLAC 文件⋯⋯由于 iTune 支持的音乐格式太少,我的音乐库有个特别弱智的 hack。在我家里的服务器上,有个 music 目录,里面按照专辑存放着所有的音乐:

% ls -1 | sort -R | head -n 4
André Cluytens - 1958 [Shostakovich -- Piano Concertos; 3 Fantastic Dances; 5 Preludes & Fugues, Op. 87]/
Itzhak Perlman - 1977 [Goldmark Violin Concerto - Sarasate Zigeunerweisen]/
Metallica - 1991 [Metallica]/
Ginger Baker Trio - 1994 [Going Back Home]/

由于这些音乐的来源不同,文件是不同的格式,比如在 iTunes 上买的是 AAC,在 HDTracks 上买的是 FLAC,本科和高中就一直流传下来祖传音乐是 MP3。除此以外还有少量的 WavPack 等奇葩编码。但是如果我把这个 music 目录拖到 iTunes 里,是不能导入全部音乐的,因为 iTunes 只支持 AAC 和 MP3。这个问题最简单的解决方法当然是把不支持的文件全都转成 AAC,我可以在专辑目录里再开两个目录,叫 “flac” 和 “aac”,分别放两种编码的版本。这样如果我把 music 目录拖到 iTunes 里,就可以一键导入所有音乐了。

但是这个方法有个 bug,就是在其他音乐播放器上(比如 Foobar 2000),把 music 拖进去会出现重复的音乐⋯⋯我的解决办法是在 music 目录外面开一个 music_copy 目录,把转码的版本全都放到这个目录里,music 目录保留原始版本。这样如果一个专辑本来就是 AAC 或者 MP3,就只会存在 music 目录里;如果是 FLAC,就会在 music 里存放 FLAC 版,在 music_copy 里存放 AAC 版。如果我需要导入到 iTunes 里,就把这两个目录一起拖进去,而如果是其他的播放器,就只需要拖 music 目录。

没错,这一切都是因为我要迁就垃圾 iTunes。

安卓这边自然没有这个问题,像 FLAC, Vorbis 这些自由的编码都是支持的,甚至像 Opus 这样的最新最好的编码也没问题,不要问我为什么会有 Opus 编码的音乐⋯⋯

我常用的其它程序在安卓大多都有对应,

  • 比如 OTP Auth,这是一个个人开发的 OTP 软件,而且是自由的,基本上在 iOS 里是最好用的了,强烈推荐。在安卓里我换成了 Aegis,同样也是自由软件,重要的是这个 app 和 OTP Auth 一样,可以直接设置 OTP 的 hash 算法,位数等等。

  • Twitter 客户端用了 Twidere,没什么大毛病,有些行为和我惯用的 Twitterrific 不一样,但是习惯就好了。

  • 我同时用很多聊天软件,包括 iMessage。忽悠里面仅有的几个联系人换成了 Signal,但是不得不说,Signal bug 真的多⋯⋯干啥都有 bug⋯⋯

  • 天气软件是我没想到的,在安卓上我居然没找到能和 iOS 自带天气软件一样支持多个城市同时还不难看的,目前在用 OpenWeather。

  • 另一个没找到合适 app 的门类是计算器,不过倒是不怎么奇怪,毕竟 iOS 上的 PCalc 太优秀了,我的需求也比较奇葩(RPN + 好看 + 非模拟真・计算器)。目前正在自己写⋯⋯

对于我来说,水果这边最不可替代的其实是果表,目前在安卓平台还没有找到合适的对应。我把十多年前买的 G-Shock GW2500B 又挖了出来,依然运行良好。