让我们从一个生动的故事入手:想象两位百万富翁偶然在街头相遇,他们各自都想夸耀自己的财富,又不愿透露具体的财务状况。他们面临的挑战是,如何确定谁更富有而不泄露各自的具体数字。这其实是隐私计算技术面临的一种经典问题。
隐私计算是一组技术和方法,它们使我们能够在保护数据主体隐私的前提下,安全地存储、处理和分析数据。这些技术确保数据在加密或其他形式的保护下进行处理,从而在整个处理过程中保障数据内容的安全与隐私。
这些技术主要包括:安全多方计算、同态加密、联邦学习、机密计算、差分隐私以及零知识证明等。例如,通过安全多方计算,两位百万富翁可以在不直接透露各自资产的情况下,确认谁更为富有。
你可能已经意识到,这种能力——在不公开各自数据的前提下进行数据融合和安全计算——正是目前高效安全数据要素流通所追求的目标。
尽管隐私计算的相关概念颇为抽象,技术涉猎广泛,但我会尽量用简洁通俗的方式来解释每个概念。在介绍每种技术时,我不仅会阐述其定义,还会提供典型的应用场景和技术原理,让这些高深的技术变得更加贴近实际,易于理解。
多方安全计算由姚期智在1982年提出,指一种计算范式,其中多个参与方可以合作计算一个函数,而无需将各自的输入数据暴露给其他参与方。该技术通过复杂的加密方法和协议确保,即便参与计算的一方或多方试图获取其他方的数据信息,也无法得知。该技术能够满足人们利用隐私数据进行保密计算的需求,有效解决数据的“保密性”和“共享性”之间的矛盾。多方安全计算包括多个技术分支,主要用到的技术包括秘密共享、不经意传输及混淆电路等等。秘密共享(Secret Sharing)是一种允许将一个秘密(如加密密钥或重要信息)分割成多个部分(称为份额)的密码学方法。这些份额分发给多个参与者,只有当一定数量的份额集合在一起时,才能重新构造出原始的秘密。秘密共享的目的是确保信息的安全性和可恢复性,即使其中一些份额丢失或被破坏。在金融领域,银行和金融机构常常需要保护大量的客户数据和交易信息。这些信息通常通过加密算法加密保护,而加密密钥本身也需要被严格保护。使用秘密共享的一个真实应用是加密密钥的安全备份和恢复。银行生成用于加密客户数据的主加密密钥。通过秘密共享算法(如Shamir的秘密共享),将这个密钥分割成多个份额。将不同的份额分发给不同的高级管理人员,每人负责保管自己的密钥份额。这些人员可能包括高级安全管理员、IT部门的负责人和其他信任的高管。只有在获得足够数量的份额(例如,5份中的3份)时,才能重新构造完整的密钥。这通常在需要对备份数据进行解密恢复的情况下进行。(1)假设你的秘密是一个数字,比如数字100(代表宝藏的位置)。(2)你选择一个多项式,这个多项式的最高次数是t-1(在我们的例子中,t是需要的最少地图片数,假设是3,所以选择2阶多项式)。(3)这个多项式的自由项(即常数项)是你的秘密(数字100)。(4)然后,你在这个多项式上随机选择一些点(相当于切成的地图片),这些点的数量大于或等于你想要的最少片数。(5)每个点的值(y值,多项式在该点x的值)就是你分发给朋友的地图片。(6)如果你的朋友们集齐了足够数量的地图片(即点),他们可以使用数学方法(多项式插值)来计算出原多项式,特别是多项式的自由项,也就是秘密数字100。不经意传输(Oblivious Transfer, OT)是一种可保护隐私的双方通信协议,消息发送者从一些待发送的消息中发送某一条给接收者,但并不知道接收者具体收到了哪一条消息。不经意传输协议是一个两方安全计算协议,协议使得接收方除选取的内容外,无法获取剩余数据,并且发送方也无从知道被选取的内容。一个用户可能希望从在线图书馆检索关于特定主题的资料,但不希望图书馆知道这一兴趣。通过OT,用户可以安全地查询所需信息而不暴露查询的具体内容:图书馆将其所有图书资料或文档编码和索引化。每种资料都赋予一个唯一的索引号。选择一个合适的1-out-of-N OT协议,其中N是图书馆数据库中资料的总数。用户决定他需要查询的资料的索引号,但这个索引号需要保密,不被图书馆知道。根据选择的OT协议,用户生成一组密钥,对应于他想要查询的资料索引。用户将所有公钥发送给图书馆(服务器),但不透露这些公钥对应的具体索引号。图书馆使用从用户处收到的每个公钥加密对应索引的资料信息。图书馆将所有加密后的资料发送给用户。用户使用他为感兴趣的资料保留的私钥解密相应的加密资料。用户成功解密并访问到他所需的资料,而没有其他资料被揭示。在整个过程中,图书馆无法确定用户查询了哪个资料,因为所有资料都被加密并发送了。用户得到了所需的资料,而没有透露他的兴趣点。想象一下,Alice有两条消息,消息M0和消息M1,而Bob想要安全地从Alice那里获取M0,但不希望Alice知道他选择的是哪条消息。M0 = "Hello" (我们用ASCII码转换为数字,"Hello" 转换为 72, 101, 108, 108, 111)
M1 = "World" (同样,"World" 转换为 87, 111, 114, 108, 100)
公钥 puk0 和私钥 prk0
公钥 puk1 和私钥 prk1
Alice 使用私钥 prk0 和 prk1 尝试解密 c。
假设只有 prk0 能正确解密 c,得到 k0 = 12345,而 prk1 解密结果为无效(或随机数)k1。
Alice计算 e0 = k0 XOR M0 和 e1 = k1 XOR M1,然后将 e0 和 e1 发送给 Bob。
在这个过程中,Alice无法确定Bob的选择,因为她不知道哪个私钥能成功解密c。Bob只能解密他选择的那条消息,因为他只有对应的随机数,而没有另一条消息的正确密钥或随机数。这个示例展示了OT如何在实际中工作,包括密钥生成、加密、解密和信息恢复的整个流程。这种协议的关键在于保证发送方无法识别接收方选择了哪条信息,而接收方也只能获取其选择的信息。混淆电路(Circuit Obfuscation)是一种方法,其中一方(构建方)构建一个加密或“混淆”的电路版本,这个电路实现了某种特定的计算任务(如逻辑运算)。这个混淆的电路被发送给另一方(评估方),后者可以使用它来计算某个函数,但无法了解电路中的具体数据或逻辑。在一个电子投票系统中,使用混淆电路可以保证投票的隐私性和公正性。具体过程如下:每个选民将他们的投票选择加密为一个输入,每个选项对应不同的密钥。选举管理机构或一个可信第三方构建一个混淆电路,该电路能够统计各个候选人的得票数。选民将他们的加密投票(即密钥)发送给评估方,通常是选举管理机构。评估方使用收到的密钥在混淆电路上运行计算,从而得出每个候选人的总得票数,但无法知道每个特定选民的投票选择。最终结果被计算出来并公布,但由于电路的混淆性,无法追溯到单个选民的投票。我们假设需要比较 Alice 的输入x和Bob的输入y,具体来说,如果x > y,则输出1;否则输出0。目标是计算 x > y,即 1 > 0,预期结果是1。首先,Alice 和 Bob 为他们的可能输入生成一对密钥:Alice的密钥:
Bob的密钥:
对于比较大小操作的每种可能的输入组合,我们创建以下加密输出:当x = 0和y = 0时,输出z = 0:加密为:"Encrypted_00"
当x = 0和y = 1时,输出z = 0:加密为:"Encrypted_01"
当x = 1和y = 0时,输出z = 1:加密为:"Encrypted_10"
当x = 1和y = 1时,输出z = 0:加密为:"Encrypted_11"
混淆表中的加密输出将被随机排列,以隐藏它们的顺序:"Encrypted_11"
"Encrypted_01"
"Encrypted_10"
"Encrypted_00"
Alice 选择与她的输入相关的密钥(因为她的输入是1,她选择 Alicekeyfor_1)并发送给 Bob。
Bob 选择与他的输入相关的密钥(因为他的输入是0,他选择 Bobkeyfor_0)。
Bob 使用这两个密钥尝试解密每一条加密信息。在这个例子中,他只能成功解密 "Encrypted_10",得到结果 '1'。
最终 Bob 解密得到的输出为 '1',这是他期望的结果,表明 1 > 0 是正确的,同时 Alice 和 Bob 的输入都被保密。同态加密是一种加密形式,允许对密文进行算术或逻辑运算,并且这些运算的结果,一旦解密,与在明文上直接执行相同运算的结果相同。这种特性使得可以在不解密数据的情况下进行计算,从而在保护数据隐私的同时处理数据。一家大型医疗保健提供商拥有大量敏感的患者健康记录,希望利用云计算服务来进行数据分析,以改进治疗方案并进行疾病预测。然而,由于患者数据的敏感性和受到的法律保护,直接将数据上传到云端进行分析会涉及隐私泄露的风险。医疗提供商使用同态加密技术加密患者的健康记录,并将这些加密的数据上传到云服务器。云服务提供商在加密的数据上执行各种统计和机器学习算法。例如,可以计算平均血糖水平,或者对心脏病发作的风险进行建模。所有这些计算都是在数据加密状态下进行的,云服务提供商无法看到任何具体的患者数据。计算结果以加密形式返回给医疗提供商。医疗提供商使用私钥对这些结果进行解密,从而获得明文的分析结果。通过这种方式,医疗提供商可以确保患者数据的机密性不被破坏,同时还能利用云计算提供的资源和技术优势进行高效的数据处理。此外,即使云服务提供商的系统受到攻击,攻击者也无法从加密的数据中获取任何有用的信息。同态加密领域的一个非常著名的算法是Paillier加密系统。这是一个公钥加密系统,特别适用于支持同态加法操作的场景。Paillier加密算法允许对加密的数据执行加法运算,这使得它非常适合于需要执行数值求和或平均计算的应用。假设两个加密的数 E(m1) 和 E(m2),Paillier算法允许我们计算 E(m1 + m2) 作为 E(m1) * E(m2) mod n^2。这意味着我们可以在不解密单独数值的情况下,对加密的数据进行求和运算。Paillier加密的这一特性使其在保护数据隐私的同时,非常适用于需要进行数据聚合、统计或多方安全计算的场景。由于其对加法的支持,它在财务数据处理、投票系统和医疗数据分析等领域得到了广泛应用。联邦学习是一种分布式机器学习方法,旨在训练模型而无需将原始数据从设备或地点传输到集中式服务器。在联邦学习中,模型在本地设备上训练,并且只有模型的更新参数(而不是原始数据)才会传输到中央服务器进行聚合。这种方式有助于保护用户隐私,减少数据传输量,并允许在分散的数据源上建立更全面、更泛化的模型。让我们考虑一个联邦学习项目,目的是创建一个可以预测信用卡欺诈的模型。在这个例子中,多个银行想要共同训练一个机器学习模型来识别可能的欺诈交易,但由于隐私和法律限制,各银行不能直接共享他们的客户交易数据。中央服务器(可能由一个独立的信用评估机构或技术提供商管理)初始化一个机器学习模型,这个模型是用于识别欺诈行为的基本框架,例如一个简单的逻辑回归分类器。这个初始化的模型被发送到参与联邦学习的各个银行。每个银行都有自己的数据,用于在本地训练模型。每个银行使用其本地的信用卡交易数据来训练接收到的模型。重要的是,这些数据从未离开银行,确保了客户数据的隐私和安全。训练完成后,每个银行计算模型参数的更新(例如权重的变化),而不是共享他们的原始数据。然后,这些更新被发送回中央服务器。这些发送的更新可能仅包括参数的改变或梯度信息,并且通常会进行加密处理,以进一步保护数据。中央服务器收到所有银行发来的模型更新后,聚合这些更新以改善全局模型。这个聚合过程可能涉及简单地平均这些更新,或使用更复杂的算法来优化整体学习效果。更新后的全局模型再次发送到各个银行,进行下一轮的本地训练。此过程重复进行,直到模型性能达到满意的水平,或达到预定的迭代次数。通过这种方式,各个银行能够合作创建一个强大的信用卡欺诈检测模型,而无需直接交换敏感的客户数据。这不仅保护了个人隐私,也使得模型能从多个来源的数据中学习,提高了其准确性和鲁棒性。联邦学习因此成为一种适用于处理敏感数据的强大学习工具。在联邦学习的环境下,我们通常有多个数据持有方(比如企业A和企业B),它们希望通过合作训练来建立一个共有的机器学习模型,同时不共享彼此的敏感数据。以下是这一过程的详细步骤,以线性回归模型为例:中央服务器将模型的权重和偏置发给参与方,并提供公钥加密工具。每个参与方使用自己的数据集在本地计算模型的梯度。梯度计算公式如下:权重的梯度计算为:2/n * sum((y - (wx + b)) * -x)
偏置的梯度计算为:2/n * sum(y - (wx + b)) * -1参与方将这些梯度加密(使用从中央服务器收到的公钥)并将加密后的梯度发送回中央服务器。中央服务器(或第三方协作者C)收集所有参与方发送的加密梯度,解密它们,然后进行聚合(通常是取平均)。聚合后的梯度代表了所有参与方数据的总体趋势。使用聚合后的梯度来更新模型的权重和偏置,计算方法是:权重更新为:w = w - 学习率 * 平均梯度值
偏置更新为:b = b - 学习率 * 平均梯度值更新后的模型参数再次被发送给所有参与方,他们用这些参数来更新他们本地的模型,并开始新一轮的训练和梯度计算。这个过程重复进行,直到模型性能达到满意的水平或者达到预定的迭代次数。通过上述步骤,联邦学习允许多个参与方合作训练机器学习模型,而无需共享他们的原始数据。这个过程确保了数据隐私的同时,也能够利用不同参与方的数据共同提升模型性能。机密计算(Confidential Computing)是指利用硬件和软件技术,在数据的使用过程中提供隔离执行环境,确保数据的隐私性和完整性,使得未经授权的实体(包括云服务商)无法访问数据的明文。机密计算的核心是建立一个安全的封闭执行环境(Trusted Execution Environment, TEE),典型的特点包括:数据和代码在使用过程中是加密的,对系统管理员、云服务商等都是黑盒;
执行环境与系统其他部分隔离,避免数据被恶意窃取或篡改;
远程证明(Remote Attestation)机制可以向数据所有者证实TEE的真实性。
医院将患者的电子病历、影像等隐私数据加密后上传到云端存储。医院和第三方数据分析机构约定使用机密计算平台。由云服务商或可信硬件制造商提供TEE环境,并由医院验证其完整性。云平台通过远程证明向医院证实TEE已构建完毕。医院将数据解密密钥安全发送给TEE。第三方机构将数据分析算法代码上传至TEE。TEE使用解密密钥在隔离环境中解密数据,并执行分析程序,整个过程对云平台不可见。分析完成后,TEE将结果加密,只有医院或有权限的一方能解密读取。TEE完成任务后,销毁其中的数据副本和密钥,并向医院发送证明。在这个过程中,敏感医疗数据始终处于加密状态,即使是云服务商也无法窥视。数据在TEE中解密并进行处理,而TEE具备防篡改、防窥探的能力。这样既能让医疗机构安心地享受云计算的便利,又能确保患者隐私得到保护,是一种理想的安全多方计算模式。机密计算的实现原理可以从硬件和软件两个层面来说明:硬件是机密计算的根本,主要通过构建安全隔离的可信执行环境(TEE)来实现。最典型的是Intel SGX(Software Guard Extensions)。它在CPU中预留了一块被称为"飞地(Enclave)"的特殊内存区域。Enclave内的数据和代码在CPU之外是全程加密的,即使是操作系统、管理程序也无法读取。SGX还提供远程证明协议,让用户验证Enclave的真实性。其他的硬件TEE方案还有ARM TrustZone、AMD SEV、IBM SecureBlue++等。它们利用硬件扩展,在芯片级实现了对安全隔离区的访问控制和加密保护。在TEE硬件基础之上,机密计算平台还需配备配套的软件栈,主要包括:机密计算框架:它对上层应用屏蔽了不同硬件TEE的差异,提供统一的API,简化了机密计算应用的开发部署。主流开源框架有Asylo、Open Enclave、Graphene等。远程证明:它允许远程用户验证TEE的完整性,并与之建立安全连接。实现方式通常基于可信平台模块(TPM)进行密钥管理和完整性度量。密钥管理:为TEE提供密钥生成、分发、更新、销毁等全生命周期管理,并严格控制密钥的使用授权。可基于硬件安全模块(HSM)实现。安全通信:在TEE之间、TEE与外部之间搭建机密信道,常用TLS等安全通信协议,并借助远程证明达成互信。总的来说,机密计算通过软硬协同、可信根、远程证明、密钥管理等一系列技术,构建了一个全方位的数据安全防护体系,让用户放心地将数据交给云端处理。TEE作为其核心,扮演着安全计算的可信执行器的角色。差分隐私(Differential Privacy,DP)是一种用于保护个人隐私的技术,它在数据分析和发布的过程中添加一定量的随机噪声,以确保从数据集中得到的信息不能用来准确地推断出任何单个个体的信息。差分隐私通过数学上的保证来确保即使数据集中增加或删除单个数据项,最终的统计输出也不会显著改变。差分隐私的关键在于控制隐私泄露的风险,在保护数据隐私的同时,尽量保持数据的实用性。这种平衡是通过调整添加到数据中的噪声量来实现的。噪声的多少通常依赖于数据敏感性的度量,以及对隐私保护强度的需求。举个例子,当不使用差分隐私技术时,我们查询A医院数据库,查询今日就诊的100个病人患病情况,返回10人患肺癌,同时查询昨天99个病人患病情况,返回9个人患肺癌,那就可以推测今天来的那个人张三患有肺癌,这个就暴露了张三的个人隐私了。使用差分隐私技术后,查询A医院的数据库,查询今日就诊的100个病人患病情况,返回肺癌得病率9.80%,查询今日就诊的99个病人患病情况,返回肺癌得病率9.81%,因此无法推测剩下1个人张三是否患有肺癌。苹果希望改善其键盘的自动更正功能,这需要分析用户在使用键盘时的输入习惯。为了进行这种分析而又不侵犯用户隐私,苹果决定使用差分隐私技术。设备首先选择用户的键入数据(例如,最常用的词汇或常见的拼写错误)作为分析的目标。在用户设备上,苹果通过程序自动向这些数据添加噪声。噪声的添加通常是基于拉普拉斯分布或其他适当的噪声分布,这取决于所需的隐私级别和数据的敏感性。假设苹果想要收集有关特定热门词汇的数据,它可能会在这些词汇的实际使用频率上添加随机噪声。例如,如果“苹果”这个词被键入了100次,噪声的添加可能使这个数字在实际发送前变为96或104,具体数字是随机决定的。添加噪声后的数据被上传到苹果的服务器。由于数据已经被“混淆”,因此无法直接从中识别个人信息。苹果服务器将来自许多不同用户的噪声数据进行聚合。通过聚合处理,个别噪声的影响被平均化,从而可以在保护个人隐私的同时,准确地识别出用户群体的共同输入习惯或问题。根据聚合后的数据,苹果可以改进其键盘的自动更正和预测输入功能,提高用户体验。在整个过程中,苹果利用差分隐私技术确保个人数据的隐私不被泄露,同时也能收集到足够的信息来优化和改进产品功能。这种方法的关键在于在保护用户隐私的同时最大限度地保持数据的有效性和实用性。在这个差分隐私的实际案例中,我们考虑了一个公共卫生数据库,包含数万名患者的年龄、性别、医疗诊断等信息。研究者希望通过这个数据库来分析分析特定年龄组(如30-40岁)中患糖尿病的人数比例,同时需要保护参与者的隐私。差分隐私技术通过在查询结果上添加噪声来实现这一目标。在此案例中,通过向查询结果添加噪声,研究者能够得到关于疾病流行情况的大致信息,同时保护了患者的隐私。选择合适的ε值和噪声分布关键在于平衡数据的实用性和隐私保护的强度。零知识证明(Zero-Knowledge Proof)是一种密码学方法,允许一方(证明者,Prover)向另一方(验证者,Verifier)证明某个陈述是正确的,而无需透露除了这个陈述的正确性之外的任何信息。这意味着验证者可以确信某个信息是真实的,而不获得任何关于该信息的具体细节。举个最简单的阿拉伯童话《一千零一夜》里的零知识证明:阿里巴巴与四十大盗的故事其中一个片段。阿里巴巴会芝麻开门的咒语,强盗向他拷问打开山洞石门的咒语,他不想让人听到咒语,便对强盗说:“你们离我一箭之地,用弓箭指着我,你们举起右手,我念咒语打开石门,举起左手,我念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。”这个方案对阿里巴巴没损失,也能帮助他们搞清楚阿里巴巴到底是否知道咒语,于是强盗们同意。强盗举起了右手,只见阿里巴巴的嘴动了几下,石门打开了;强盗举起了左手,阿里巴巴的嘴动了几下,石门又关上了。强盗有点不信,没准这是巧合,多试几次过后,他们相信了阿里巴巴。这即是最简单易懂的零知识证明。在传统的在线身份验证中,用户必须输入用户名和密码。这种方法存在风险,因为密码可以被窃听、破解或泄露。使用零知识证明技术,用户可以证明他们知道密码而无需实际透露密码本身,从而提高了安全性。- 用户根据密码和收到的挑战,本地生成一个响应(或证明)。这个响应是根据一个特定算法生成的,这个算法可以使用密码和挑战的信息,但结果不会泄露密码本身。
增强安全性:用户的密码或其他敏感信息从未在网络上传输,降低了被截获或泄露的风险。
隐私保护:即使是服务提供商也无法看到用户的密码,从而保护了用户的隐私。
抗钓鱼攻击:由于密码本身从未被发送,因此钓鱼网站无法通过传统的监听或欺骗手段获取密码。
安全的身份验证,尤其是采用零知识证明(ZKP)的方法,可以通过多种方式实现。这些方法通常旨在允许用户证明其知识(例如密码或某个秘密)的所有权,而无需明文传输该知识,以此来避免泄露信息给不信任的第三方或在传输过程中。一个具体实现这种类型安全验证的协议是Schnorr协议,它是一个简单而强大的基于零知识证明的身份验证方法。Schnorr协议基于离散对数问题,这是密码学中一个广为人知的难题。在这个背景下,计算离散对数是不可行的,这提供了协议的安全基础。Schnorr协议利用离散对数的计算难度,确保了即使在公钥和挑战/响应对可公开的情况下,私钥也不会被泄露。相较于其他身份验证方法,Schnorr协议在计算和带宽上都相对高效。由于协议的零知识性质,验证过程中不会泄露用户的任何私密信息。隐私计算的基础是密码学,同时涉及计算机、统计学、机器学习等知识,要能透彻理解不容易,正好最近自己在进行数据安全的相关工作,因此写篇文章帮助理解,希望对大家也有帮助。数据治理与数据资产管理平台方案 1976
一文详解数据治理框架图 | DGI数据治理(二) 1626
国家统计局刚刚公布:数据造假纳入纪律处分......2482
读透数据治理:DGI框架全解(第一章) 1984
数据治理核心工作内容 2975
数据管理关键技术顶层设计 2050
上海市数据局揭牌成立 4233
查看全部文章
点击左下角“阅读原文”查看更多精彩文章,公众号推送规则变了,如果您想及时收到推送,麻烦右下角点个在看或者把本号置顶!