疫情之下,各国都在不断地调整自己的防疫政策。中国的模式已经证明了其可能是最有效的方式之一,但因为种种原因大部分国家难以效仿和接受。从技术层面来讲,基于支付宝/微信等国民APP之上的健康码模式也是如此:有效,但是别国难以效仿。新加坡最开始使用BlueTrace协议并开发出了相应App让国民下载使用,部分其他国家也开始效仿,甚至有望能成为一种国际通用的防疫标准。

隐私保护是 BlueTrace 所考虑的最主要特点之一。其手段包括如下方面:

  • 尽可能少的收集用户信息,卫生部门唯一收集的信息是手机号
  • 本地存储用户接触记录,只有当被感染者愿意分享此数据时卫生部分才能获取
  • 第三方无法通过此协议一直追踪用户。因为相关标识ID会一直更换

所以在对用户的标识方面,主要是通过算法生成的 UserID 和 TempID 来进行。当用户用手机号进行注册时,后台服务会生成一个 UserID, 而用户在互相接触需要通过蓝牙交换信息时,则通过 TempID 进行。TempID的 大概结构如下:

可以看到其有如下特点:

  1. 加密。只有卫生部门才有密钥能解密数据
  2. 过期时间。TempID有过期时间,一般在15m左右.这样可以尽量减少恶意攻击或者伪造假数据

TempID的生成需要联网(加密啥的),所以为了考虑到用户不联网的情况,所以TempID可以一次性尽量生成多个,在联网的时候一次性发给用户以备用。

当装有相应APP的用户相遇时,设备会通过 Bluetooth Low Energy (BLE)协议进行通信并交换信息,其数据流程如图所示:

这里面两个 Device 分别有一个角色定位,一个叫 Central ,一个叫 Peripheral。Central 主动扫描 Peripheral 并读取其信息,然后返回一些额外信息。一个手机一般是按一定时间比率轮换在两个角色之间切换。其交换的数据大概如下所示:

1
2
3
4
5
6
7
{
	"id": "FmFISm9nq3PgpLdxxYpTx5tF3ML3Va1wqqgY9DGDz1utPbw+Iz8tqAdpbxR1 nSvr+ILXPG==", // TempID
	"md": "iPhone X", // Device model
	"rc": -60, // Signal strength
	"o": "IJ_HAI", // Health authority identifier
	"v": 2 // Protocol version
}

这里面需要注意的是:

  1. rc. 信号强度,用来评估距离之类的。由 Central 发送给 Peripheral
  2. o: 本国卫生部门。 _ 前面是国别,后面是部门简称。这样支持不同国家之间,一个国家不同部门之间的数据互通。

但有人感染时,这时候就需要人力介入,通过手机存储的相关数据分析,结合对被感染者的询问来综合筛选可能受感染的人群。所以整体来看,这是一个半人工的解决方案。对很多国家来说,可能综合来看是一个比较好的方案。但对于人流密集的大城市或者像美国这样目前处于大规模感染的国家,这样的APP估计能起的作用也非常有限。

外界对于健康码的担忧也不无道理,毕竟是一个未公开的技术方案。网上也很难找到有用的技术背景信息介绍。从长远来看,这次疫情会促使我们思考,如果再遇到下一次类似的灾难,我们如何通过技术手段来自救?不止是瘟疫, 甚至于地震,洪涝灾害之类的。我们可能需要一个针对于灾难的公开的技术 protocol, 利用现存的各种信号传输方式来筛查,帮助其他人。