NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Meta 如何实现大规模无身份信息认证?

  • 2022-06-30
  • 本文字数:3796 字

    阅读完需:约 12 分钟

Meta如何实现大规模无身份信息认证?

我们在 Meta 公司不断研发新的隐私增强技术(privacy-enhancing technologies,PET),核心原则之一是数据简约化——仅收集我们服务所需的最少量数据。我们一直在寻找方法来增强用户隐私性,以保护我们所有产品的用户数据。


以前,我们研究过用后置的处理数据方法,去除身份信息或汇总多用户数据,从而简约化数据。然而,这是一种被动的数据简约化方法,以 Meta 公司的规模,可能会非常耗费资源。当我们寻找扩展性更高的解决方案时,我们发现,可以利用“无身份信息认证(de-identified authentication)”的方法来主动消除身份信息。这样一来,我们从信息源头就可以去除身份信息。


在所有客户端-服务器交互中,身份认证对防止端点被爬取、被垃圾邮件塞满或被分布式拒绝服务攻击(DDOS)很有帮助。业内最为广泛采用的身份认证方式,是通过用户 ID 进行身份认证,服务器在提供服务或接收客户端流量之前验证客户端身份。


但我们希望通过去除用户身份信息来提高隐私标准,同时仍能保证身份认证,以保护用户数据和我们的服务。因此,我们利用工业界和学术界多年来合作设计的匿名凭据,创建了称为“匿名凭据服务(Anonymous Credential Service,ACS)”的核心服务。匿名凭据服务是一种高可用的多租户服务,它允许客户端以无身份信息的方式进行身份认证。这增强了隐私和安全性,同时还具有计算意识。匿名凭据服务是我们隐私增强技术产品组合的最新成员之一,目前正在 Meta 公司多个大流量的用例中使用。

匿名凭据如何支持无身份信息认证


在较高抽象层面上,匿名凭据将认证分为两个阶段,来支持无身份信息认证:颁发令牌和无身份信息认证。在颁发令牌阶段,客户端通过一个认证过的通道联系服务器,向服务器发送一个令牌(token)。服务器给令牌签名并将其发回客户端。然后,在无身份信息认证(或称令牌赎回)阶段,客户端使用匿名通道提交数据,并用此令牌的变异形式取代用户 ID 进行身份认证。


我们大幅简化了协议中的细微差别,签名令牌(令牌发行阶段)和赎回令牌(无身份信息认证阶段)两个阶段的数据不再能够直接关联起来,因此服务器在第二阶段对客户端进行身份认证时,无需知道令牌属于哪个特定客户端,从而保护了用户隐私。

匿名凭据协议的工作原理


让我们深入了解一下匿名凭据协议。匿名凭据基于 VOPRF(可验证不经意伪随机函数,它使客户端能够获知自定义输入的可验证伪随机函数评估)和盲签名(一种数字签名,可以防止签名者知道发送者的消息内容)创建。除了前面提到的颁发令牌阶段和无身份信息认证阶段之外,完整的工作流程还有一个设置阶段。


在设置阶段,客户端获取服务器的公钥和其他公共参数。接下来是颁布令牌阶段,客户端创建一个随机令牌并选择一个致盲因子,对令牌进行盲签名,并将盲签后的令牌发送到服务器。反过来,服务器对令牌签名并将其发回客户端。然后客户端对服务器返回的签过名的盲令牌执行非盲操作。客户端还计算 shared_secret,它本质上是原始令牌和服务器签名的函数。


请注意,直到此时,服务器都没有见过原始令牌的值。之后,在无身份信息认证阶段,客户端转发原始令牌、相关业务数据,以及带有 shared_secret 的业务数据的 HMAC(Hash message authentication codes,散列过的消息认证代码)。


然后,服务器可以通过检查这个 HMAC,来验证客户端发送的 shared_secret 与本地计算的 shared_secret 是否相同。如果此检查通过,则服务器将请求视为合法,并处理业务数据。有关该协议的详情,请参阅论文《大规模无身份信息认证遥测(De-identified authenticated telemetry at scale)》

无身份信息认证的真实用例

WhatsApp 上的无身份信息遥测


匿名凭据服务使客户端能够以无身份信息方式进行身份认证。通过匿名凭据服务去除身份认证中的用户 ID,我们可以在满足数据收集简约化目标的同时保护用户隐私。为了服务于生产用例,我们必须创建一个健壮的架构,增强面对现实世界各种问题的适应能力。


WhatsApp上的无身份信息遥测(De-Identified Telemetry,DIT)是当前利用匿名凭据服务的一个用例。以前,我们用安全存储和数据删除策略,确保日志数据不会关联具体用户。但我们希望我们的隐私保护措施更进一步,将匿名凭据服务与 WhatsApp 系统集成,以便对某些 WhatsApp 客户端日志启用无身份信息认证。


大规模部署后,无身份信息遥测使 WhatsApp 在验证日志请求时无需收集身份信息,就能报告性能指标(对确保为每个用户提供快速、无崩溃的应用程序很重要)。整个 WhatsApp 家族都在使用匿名凭据服务,这个庞大的用例需要匿名凭据服务每秒处理数十万个请求。

联合学习


我们要强调的另一个用例是联合学习,这是一种训练全局机器学习模型的技术,私有敏感数据仅保存在本地客户端设备上(不需要上传到服务器)。在这种模式中,设备与服务器共享模型更新而不是原始敏感数据,服务器计算聚合模型的更新来优化全局模型。


这是使用匿名凭据服务进一步保护用户隐私的一种潜在方法。我们不希望恶意行为者发送欺诈性的模型更新数据,但我们希望确保合法用户能够帮助改进全局模型。通过利用匿名凭据服务,我们可以确保合法客户端以无身份信息认证的方式发送客户端模型的更新信息。

匿名凭据服务架构


现在让我们深入了解匿名凭据服务架构。


匿名凭据服务是一个 C++服务,基于 Meta 公司的容器编排框架Twine开发。在全球范围对流量进行负载均衡,每个区域都根据需求动态伸缩。匿名凭据服务为颁发令牌和赎回令牌提供 Thrift API。


有一项重要需求是,在不同用例间构建围栏,隔离匿名凭据服务的令牌。为什么呢?因为我们是多租户的,服务于各种用例。不同用例可能有不同的身份认证机制(例如,脸书用户与 Instagram 用户)。应当禁止不同的用例赎回颁发给特定用例的令牌。


为了解决这个问题,我们要求每个 API 请求都声明自己的用例名称,我们使用针对具体用例的密钥来隔离用例。我们把密钥存储在 Meta 公司的“钥匙串(keychain )”服务中,并通过 Meta 公司的异步作业基础设施定期更换安全密钥。此外,我们还有另一项工作是,在密钥轮换后,发布更新的匿名凭据服务公钥,让客户端可以获取更新后的密钥。

匿名凭据服务扩展的经验教训


在扩展匿名凭据服务的过程中,我们学到了维持服务可靠性和效率的三个关键经验:防止运行匿名凭据服务的成本随着流量的增加而线性增长、避免人为的流量高峰、在不需要专家知识的情况下,推进各个用例接入服务。


随着接入服务的用例越来越多,我们注意到,对新接入的用例,必须按其流量 1:1 的比例添加主机和更多的服务器容量。鉴于最近全球服务器供应链紧张,我们研究了如何简化匿名凭据服务,使其更实用,同时仍能保持我们的高隐私标准。


我们决定允许用例在合理的阈值内重用凭据。在匿名凭据服务服务器上,我们添加了一个重用凭据计数器(由 Meta 公司的分布式键值存储ZippyDB提供支持)。该计数器将计算特定匿名凭据服务令牌被赎回的次数,如果赎回次数超过阈值,则请求失败。针对敏感的用例,还有赎回限制(即不重用令牌)。通过允许重用凭据,可以减少为特定用例颁发令牌的数量,从而节省服务器容量。


我们在扩展时遇到的另一个问题和流量尖峰有关。我们通过观察服务仪表盘,注意到匿名凭据服务的服务器在短时间内收到大量请求。这将导致服务器一时不堪重负,部分请求会失败。


我们发现,这些引起流量尖峰的请求都来自一个大型用例。在与相关的客户团队交谈后,我们了解到,他们把数据缓存在移动客户端上,然后每晚在同一时间,这些移动客户端分别把自己的数据批量发送到服务端。


尽管理论上这是个好主意,但这种模型实际上是在对我们的服务器进行分布式拒绝服务攻击(DDOS),因为突然有众多客户端同时发送了许多请求。为了解决这个特定用例的问题,我们通过添加抖动来分散请求,让它们错开发送时间。为了更普遍地解决这个问题,保护我们服务器的健康,我们与 Meta 公司流量团队合作,添加了一个全局限速器,如果匿名凭据服务流量超过某个速率阈值,限速器将选择性地丢弃这些超额流量。


我们在扩展匿名凭据服务时遇到的最后一个挑战是在工程方面。最初,我们有一个小团队,致力于推广匿名凭据服务,然后发现接入新的用例很困难。当时,接入新用例通常需要我们中的一个人与合作伙伴团队密切合作,解释匿名凭据服务的关键概念,并在我们的服务器上手动配置新的匿名凭据服务用例。


我们通过给接入匿名凭据服务的新用例创建平滑的接入体验来减轻这种合作成本。我们用 React 构建了一个自助接入匿名凭据服务的站点入口。现在,来自 Meta 公司的工程师们,可以使用该站点作为匿名凭据服务的一站式商店。


此外,我们为 Android 和 iOS 创建了匿名凭据服务客户端 SDK,以提供高质量的加密原语和协议实现。客户端可以调用高级方法,例如直接获取匿名凭据服务令牌(fetch-acs-token),不需要自己一步一步构建令牌。这些方法通过调用匿名凭据服务的 API、去盲化令牌和执行所有其他相关操作,来处理整个令牌交换协议。我们还改进了维基上的接入文档,投入资源开发了 codegen 工具。这进一步减少了客户的编码量,更容易与我们集成,让他们无需专家级的密码学知识即可使用我们的协议。


无身份信息化是保护数据和隐私的重要工具。共享和保护数据需要信任和责任感。展望未来,我们希望将匿名凭据服务进一步集成到 Meta 公司的数据基础架构中,并在身份认证用例之外的产品中用它进一步保护数据隐私。


我们希望我们的工作能够激发整个行业研发更多的隐私增强技术。


查看英文原文How Meta enables de-identified authentication at scale

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2022-06-30 10:022265

评论

发布
暂无评论
发现更多内容

干了三年的Java,你竟然还不会MySQL性能优化

华为云开发者联盟

Java MySQL sql

如何利用状态同步开发一款游戏

Isa 婷婷

node.js 游戏开发 24小时自助游戏厅 联机游戏

2021 第一份唠嗑

大头虾

Pulsar 2.7.0 新增特性概览:事务支持、Topic 级别策略配置等

Apache Pulsar

大数据 开源 pulsar Apache Pulsar 消息中间件

稻盛和夫《干法》| 教你做快乐的打工人

小匚

读书笔记 程序员 个人成长

免费下载来自阿里巴巴 双11 的《云原生大规模应用落地指南》

阿里巴巴云原生

阿里巴巴 阿里云 开发者 云原生 k8s

ChaosBlade 在工商银行混沌工程体系中的应用实践

阿里巴巴云原生

云计算 高可用 开发者 云原生 实践

Spring 源码学习 13:initMessageSource

程序员小航

spring 源码 源码解析

《数据挖掘:实用的机器学习工具和技术,第4版》PDF版免费下载

计算机与AI

数据挖掘 机器学习 数据科学

引起故障的原因

jorden wang

Arthas 定位 Dubbo 手动注册 Eureka 异常

阿里巴巴云原生

阿里云 云原生 dubbo 工具 征文大赛

面试官:不会真有人不知道什么是线程池吧?

Java鱼仔

Java 线程池 并发

移动设备管理平台的搭建(基于STF/ATXServer2)

行者AI

人工智能

“区块链+有机蔬菜”农产品溯源项目落地

CECBC

农业发展 农业

如何通过 Serverless 轻松识别验证码?

阿里巴巴云原生

人工智能 阿里云 Serverless 云原生 数据采集

平安社区平台解决方案,智慧社区综合服务平台搭建

t13823115967

智慧社区管理平台开发

使用 iTerm2 打造美观高效的 Mac 终端

郭旭东

Mac 终端 iterm2

Ubuntu 使用 Iptables 做网络转发

wong

iptables Ubuntu20.04

数字化浪潮下 哪些银行业务或“生变”

CECBC

金融科技

影像恋上智能:麒麟9000中的高甜CP创新

脑极体

程序员如何解决中年危机?资深Android开发带你入门Framework,醍醐灌顶!

欢喜学安卓

android 程序员 面试 移动开发

【薪火计划】07 - 与领导沟通的方法

AR7

管理

数字银行成长性和盈利能力可期

CECBC

数字化转型

涨知识!一个三非渣本的Android校招秋招之路,赶紧收藏!

欢喜学安卓

android 程序员 面试 移动开发

「每日一题」抖音面试题:请阐述vue数据绑定的实现原理

Java架构师迁哥

阿里巴巴云原生的 2020,注定不凡的一年

阿里巴巴云原生

阿里云 容器 开发者 云原生 年终总结

SourceTree 如何连接 GitLab

TroyLiu

git gitlab SSH sourcetree

字节内部MySQL宝典意外流出!极致经典,堪称数据库的天花板

比伯

Java 编程 架构 面试 技术宅

Spring Cloud Gateway (六) 自定义 Global Filter

Java 网关 SpringcloudGateway

大数据分析决策平台建设方案,警务情报研判系统搭建

t13823115967

Android开发经验谈:2021最新Android常用开源库总结,成功收获美团,小米安卓offer

欢喜学安卓

android 程序员 面试 移动开发

Meta如何实现大规模无身份信息认证?_文化 & 方法_Meta AI 团队_InfoQ精选文章