苹果创始人乔布斯曾感到被背叛,谷歌前董事长施密特不和。现在全人类都面临着新冠病毒的威胁,两家曾经不和的公司走到了一起,共同开发了一套接触者追踪(ContactTracing)技术。由于能在一定程度上起到流行病学溯源和感染风险预警作用,这项技术也被戏称为美国版“健康密码”。但是,健康码和接触者追踪的实现思路也有很大的不同。前者更依赖大数据,隐私风险高,而后者主要以蓝牙为主,其设计体现了隐私保护的考虑。今天硅星就带大家了解接触者追踪的工作原理。“三码合一”,匿名追踪ContactTracing的工作原理大致如下:设备通过低功耗蓝牙信标交换和保存彼此作为发送者和接收者的信息。当某人A被确诊时,A的设备信息被上传到云端的一个确诊者数据库中,所有用户每天都会从这个云端数据库中下载信息并在本地查看。如果B也收到了同样的信息,那么B就可以认为是A的联系人。当然如果直接使用设备的唯一标识信息,会存在较大的隐私风险。因此,出于隐私保护的目的,苹果和谷歌想尽办法设计了“三码合一”的机制。为了方便更多读者的理解,我们简单地将这三种代码分别称为A、B、C代码。首先,每个用户的手机都会生成一个固定的A码,不会上传;通过A码,手机每天可以生成一个B码,平时不会上传;由于要实施联系人跟踪,因此需要每隔几分钟对手机进行一次跟踪。时间(API推荐15分钟)对外广播一次。此时广播的是B生成的C码,每15分钟/一个广播周期更新一次。通常只会上传这个C代码。由于此ContactTracing是通过API实现的,因此iOS和Android设备都可以相互广播和接收。通过这样的设计,苹果和谷歌希望最大程度保证:交换的信息本身是匿名的;即使满足隐私保护的要求,仍然可以解密信息,并在需要时定位联系人。更详细一点的解释:一个代码叫做TracingKey,是在手机第一次启动ContactTracing时生成的。长度为32个字节。该设备是唯一的,不会改变。虽然名字里有个“tracking”,但实际上A码是不会上传的,只会保存在手机上,不会用于身份识别。它只会作为下一步计算B和C码的输入。A码是一个随机数,使用加密随机数生成器(CRNG)生成。当你第一次在你的iPhone或安卓手机上使用其他政府、公司或机构基于苹果谷歌解决方案开发的接触者追踪软件时,你的手机会自动生成这样一个随机且唯一的A码。该代码与您手机已知的序列号、mac地址等识别码无关,也不会上传,几乎没有隐私风险。B码称为DailyTracingKey,是使用HKDF函数从A码中推导出来的,长度为16字节。每24小时更新一次,B码没问题的时候不会上传。它的主要功能是生成C代码作为输入。只有确诊后,B码才会派上用场。如果用户身体健康,没有暴露风险,B码会一直保存在手机上,不会上传。假设用户A在这几天与确诊的B有过接触,存在被感染的风险,那么A这几天的B代码将作为“诊断密钥”提取出来进行身份验证。B码此时才会被撤回。一般情况下,不管怎样,默认(自动)是不会上传B码的。上传的C代码是什么?C码全称为RollingProximityIdentifier,是B码进一步加密生成的消息认证码(HMAC)。长度为16个字节。所有设备广播一次,安装了接触者追踪的手机可以接收并保存此代码。为了保护隐私和避免跟踪,从蓝牙4.2开始可以随机更改设备的蓝牙MAC地址。与此相适应,每当蓝牙MAC地址发生变化时,接触者追踪都会生成一个新的C代码。除了广播之外,手机还会保存过去一段时间内产生的所有C码,以便在接触者追踪时进行验证。如何进行接触者追踪?如果你理解了上一节,那么这里就更容易理解了。我们假设A确诊,例如追溯期为14天内,将A最近14天手机的B码作为“诊断码”上传到云端。所有用户的手机每天都会从服务器下载一次所有确诊患者的诊断码,然后在本地使用与C码相同的加密算法进行计算。我们假设A和B在过去的14天里有一段时间在同一个房间,那么B的手机肯定保存了A给的C码。如果B的手机计算得到的C码出现在他过去14天保存的记录中,已经完成了接触者追踪和核实。Apple和Google发布的ContactTracingBluetooth的工作原理提供了一张图来解释这个过程:优点和缺点总的来说,这种技术实现最直接的优点是在满足功能的同时最大限度地保护用户隐私。两家公司在《接触者追踪加密和蓝牙工作原理》白皮书中指出,前两种代码具有固定的生成周期,可以防止其他应用程序获取并使用它们进行不相关的追踪。上传的信息不包括地理位置信息,并且严格限于使用低功耗蓝牙信标。C代码绑定到B代码。没有B码,获取C码是没有意义的。例如,如果某个国家的政府用这个API开发了一个跟踪工具,那么管理员就无法在服务器端知道一个健康用户还接触过哪些其他用户——管理员只能对确诊患者这样做。即使出现确诊患者,其上传的诊断码的计算也只是在其他用户的手机上进行,不会在服务器端进行。由于设置了蓝牙广播和扫描间隔,并且每个C代码的长度仅为16字节,因此该技术的实现还节省了功耗和存储空间。总体来说,它的耗电量应该不算大,至少没有到成都夸张的程度。当然,具体的广播和扫描间隔可以由跟踪工具的运营商自行设置,苹果和谷歌也建议运营商考虑功耗。苹果和谷歌也在白皮书中警告追踪工具的运营商不要从用户手机中提取其他不相关的元数据。这种技术实现也有一些缺点。最直接的劣势来自于蓝牙本身的工作原理。Bluetoothlowenergy的最长理论距离可以达到100米,也有一定的穿墙能力(隔个水泥墙往往没问题,金属的阻隔效果更强)。这意味着,如果你只是在露天与几十米外的陌生人“擦肩而过”,或者明明和他在两个房间,只要你的手机安装了接触者追踪并打开了蓝牙——作为只要那个人被确诊,你也很可能是“不幸”的接触者。此外,有人应该能够看到接触者追踪并不完美:即使找到并通知了接触者,单靠机制也无法定位到他。唯一知道自己成为联系人的,只有联系人本人了。最终愿不愿意主动配合居家隔离,还要看个人意愿,权威机构基本无能为力。这些功能可能需要APP开发者自行开发,但这样做也在一定程度上违背了ContactTracing隐私保护设计的初衷。对此,苹果和谷歌提供的说明中写道,联系人收到通知后下一步该怎么做,需要在卫生部门的网站或应用程序上进一步说明。还有一种作恶的可能,就是故意生成并广播大量伪造的C代码。不过这种攻击方式除了占用用户手机存储空间外,没有其他肉眼可见的危害。当然,这只是比较早的技术,苹果和谷歌都不是实际的实施者。具体使用效果取决于采用该技术的政府或其他公司。适用于iOS和Android的API已经发布在公司的网站上。
