跳到正文

超越创新。超越边界。抵达实效。

语言
外观

Corona-Warn-App 是怎么工作的

它能提醒您曾站在某个后来确诊的人身边,而任何服务器都不会知道您曾站在任何人身边。以下是让这两件事同时成立的架构,以及代码为什么公开。

作者
发布时间
阅读时长
4分钟
系列
疫情期间的软件 第 2 篇,共 5 篇

2020 年 6 月 16 日,德国发布了官方的 COVID-19 接触追踪应用 Corona-Warn-App。二十四小时之内它被下载了数百万次,成为欧洲历史上被采用最快的政府应用之一。

作为一家在德国市场有一只脚的软件公司,我们全程紧盯了它的开发——一半出于职业好奇,一半因为它是一个案例:在巨大的公众注视之下,如何交付一个对隐私敏感的应用。以下是这个应用做什么、底层如何运作,以及那些架构决定为什么重要。

Corona-Warn-App 做什么

目的很简单:如果您曾在某人附近待了相当长的时间,而那人后来 SARS-CoV-2 检测呈阳性,应用会提醒您,好让您在不知情地传染他人之前去做检测并隔离。

难的地方在于,做到这一点的同时建立一个「谁遇见了谁」的中央数据库。

架构:设计上就是去中心化的

德国最初考虑过中心化模型,把接触数据上传到政府服务器。经过一场有隐私研究者参与的公开辩论后,联邦政府在 2020 年 4 月转向了基于 Apple 与 Google Exposure Notification 框架的去中心化方案。这是关于这个应用最重要的一件事。

用平白的话说,流程是这样:

  1. 您的手机广播随机 ID。应用通过低功耗蓝牙发出随机生成、寿命很短、每隔几分钟就更换的标识符。它们不含任何个人数据。
  2. 您的手机记下听到的 ID。附近运行该应用的手机把彼此的随机 ID,连同信号强度和持续时间,在本地保存 14 天。
  3. 阳性结果会被验证。如果您检测呈阳性,可以在应用里分享结果。一道验证步骤——实验室的二维码,或热线提供的 TAN——确保只有真实结果被上传。
  4. 离开手机的只有密钥。应用上传的是推导出您近期随机 ID 的那些密钥。没有位置,没有通讯录,没有姓名。
  5. 每部手机在本地比对。每个应用定期下载已发布的密钥列表,与自己记录的 ID 比对。比对发生在您的设备上,而不是服务器上。
  6. 风险在您的设备上计算。应用依据距离和时长估算您的暴露风险,超过阈值时显示提醒。

服务器从来不会知道谁遇见了谁。这正是关键所在。

开源为什么重要

应用由 SAP 与德国电信受联邦政府委托开发,全部源代码——移动端、后端、验证服务器——在上线前就发布在 GitHub 上。

对开发者来说,这很了不起。在公众安装之前,已有数千人审读代码、提交问题和修复。对公众来说,这意味着隐私承诺可以被独立验证,而不必凭信任接受。一个自愿使用的应用能否被采用,取决于信任,而开源是赢得信任最可信的方式。

值得知道的局限

这个应用不是万灵药。

  • 蓝牙是替代指标,不是测量。信号穿过一堵墙或一个包时强度并不准确,因此既有误报也有漏报。
  • 它需要普及率。收益随用户基数的平方增长;只有双方都在用,提醒才会触发。
  • 检测结果需要被接进来。只有当实验室或检测中心能用一个已验证的二维码把阳性结果送进应用,它才真的有用——而这需要实验室一侧的集成工作。我们预计随着检测规模扩大,这会成为一个重要议题。

软件团队能从中学到什么

我们带进自己项目的三条经验:

  1. 隐私是架构决定,不是一份政策文件。去中心化模型让滥用在技术上不可能,而不只是被禁止。
  2. 透明胜过营销。公开代码对普及率的贡献,超过任何一场推广活动。
  3. 公共卫生软件的生死在集成上。应用的价值,取决于喂给它的数据管线。

最后一点我们还会再谈。在 Daleenda,我们已经在研究一家检测机构要接入这个生态需要什么——答案是,相关工具几乎还不存在。

全部文章

本页内容

那么,您的系统该往哪儿走?

一篇文章可以讲清某样东西怎么运作;它说不了这对您已经在跑的那套系统意味着什么。与一位工程师聊三十分钟,不是销售,也没有跟进序列。