3个版本

0.1.2 2020年4月4日
0.1.1 2020年4月4日
0.1.0 2020年4月4日

#712 in 硬件支持

Apache-2.0

21KB
230

新冠cotra

这是一个用于管理新冠-19合同追踪系统数据交换的实验性Rust库。

概念

从概念上讲,有三个组件

  • Identity 代表一个单一设备。然而,为了额外的安全性,设备可以在一定时间内轮换ID,同时也在旧ID上轮询。
  • Authority 代表一个受信任的权威机构(例如,卫生部门)
  • ContactLog 是对联系日志的简明抽象。

身份

身份内部持有唯一的ID(UniqueIdentity)。此身份仅在拥有该身份的人测试呈阳性时才传送给中央权威机构。然而,潜在接触者的ID也会被传输。

身份可以从两种其他方式来看待:一个 ShareIdentity,这是一个使用公共权威机构的公钥加密的身份,并且仅与其他设备共享。共享ID应定期轮换,并由中央当局用于确定用户是否看到其他用户。由于ID轮换,设备(至少在这一级别)无法确定它们是否看到设备第二次。

其次,还有一个 HashedIdentity。这是唯一ID的哈希版本,可用于“轮询”更新或订阅推送频道。中央当局无法将哈希身份映射到唯一身份,但反之亦然。这意味着唯一身份(如果公开,最终与真实的人类身份关联)仅在以下情况下才会被中央当局所知

  • 用户测试呈阳性并公开
  • 中央当局监听携带大量设备的设备ID,这些设备部署在各地。
  • 用户提交他们看到的联系人类表

通知

中央机构将联系人的哈希ID标记为受污染。设备轮询过去N天(例如14天)内所有唯一ID生成的所有哈希ID,以检查受污染状态。如果任何显示为受污染,则应联系当局。

ID行为

  • 唯一ID:你可以创建多个,但不要过于频繁地轮换。你不应该分享这个ID,因为如果别人有了它,他们就可以 成为 你。
  • 共享ID:这适合与他人分享,但你应该定期轮换。
  • 哈希ID:唯一ID的派生版本,用于轮询受污染状态。你应该只向当局发送哈希ID,不要发送给其他人,否则他们可以轮询你的受污染状态。

ID循环

当用户通过测试呈阳性被揭露时,鼓励他们轮换唯一ID。他们可以安全地这样做,因为测试呈阳性后,他们最终会进入隔离。由于其他用户的唯一ID也是通过上传的联系人类表被揭露的,因此鼓励他们在测试呈阳性后轮换。如果测试呈阴性,他们可以用新ID代替旧ID开始发送,但他们仍然需要轮询旧ID以获取更新,持续较长时间。

一般来说,如果设备想要,可以自由拥有多个身份。例如,它们可以选择不仅传输不同的共享ID,还使用不同的唯一ID以获得额外的隐私。例如,设备可以选择每天生成一个新的ID。唯一的缺点是,这样它就需要轮询每个生成的ID的哈希ID,直到感染窗口(大约14天)使ID自然到期。

这是关于接触追踪的这篇博客文章的一个概念验证。

许可证:Apache-2.0

依赖项

约21MB
约141K SLoC