让我们从一个生动的故事入手:想象两位百万富翁偶然在街头相遇,他们各自都想夸耀自己的财富,又不愿透露具体的财务状况。他们面临的挑战是,如何确定谁更富有而不泄露各自的具体数字。这其实是隐私计算技术面临的一种经典问题。
隐私计算是一组技术和方法,它们使我们能够在保护数据主体隐私的前提下,安全地存储、处理和分析数据。这些技术确保数据在加密或其他形式的保护下进行处理,从而在整个处理过程中保障数据内容的安全与隐私。
这些技术主要包括:安全多方计算、同态加密、联邦学习、机密计算、差分隐私以及零知识证明等。例如,通过安全多方计算,两位百万富翁可以在不直接透露各自资产的情况下,确认谁更为富有。
你可能已经意识到,这种能力——在不公开各自数据的前提下进行数据融合和安全计算——正是目前高效安全数据要素流通所追求的目标。
尽管隐私计算的相关概念颇为抽象,技术涉猎广泛,但我会尽量用简洁通俗的方式来解释每个概念。在介绍每种技术时,我不仅会阐述其定义,还会提供典型的应用场景和技术原理,让这些高深的技术变得更加贴近实际,易于理解。
一、安全多方计算
多方安全计算由姚期智在1982年提出,指一种计算范式,其中多个参与方可以合作计算一个函数,而无需将各自的输入数据暴露给其他参与方。该技术通过复杂的加密方法和协议确保,即便参与计算的一方或多方试图获取其他方的数据信息,也无法得知。
该技术能够满足人们利用隐私数据进行保密计算的需求,有效解决数据的“保密性”和“共享性”之间的矛盾。多方安全计算包括多个技术分支,主要用到的技术包括秘密共享、不经意传输及混淆电路等等。
1、秘密共享
定义:
秘密共享(Secret Sharing)是一种允许将一个秘密(如加密密钥或重要信息)分割成多个部分(称为份额)的密码学方法。这些份额分发给多个参与者,只有当一定数量的份额集合在一起时,才能重新构造出原始的秘密。秘密共享的目的是确保信息的安全性和可恢复性,即使其中一些份额丢失或被破坏。
应用案例:
在金融领域,银行和金融机构常常需要保护大量的客户数据和交易信息。这些信息通常通过加密算法加密保护,而加密密钥本身也需要被严格保护。使用秘密共享的一个真实应用是加密密钥的安全备份和恢复。
(1)密钥生成与分割
银行生成用于加密客户数据的主加密密钥。通过秘密共享算法(如Shamir的秘密共享),将这个密钥分割成多个份额。
(2)份额分发
将不同的份额分发给不同的高级管理人员,每人负责保管自己的密钥份额。这些人员可能包括高级安全管理员、IT部门的负责人和其他信任的高管。
(3)密钥恢复
只有在获得足够数量的份额(例如,5份中的3份)时,才能重新构造完整的密钥。这通常在需要对备份数据进行解密恢复的情况下进行。
原理解释:
让我们看一个更技术性的实现:
(1)假设你的秘密是一个数字,比如数字100(代表宝藏的位置)。
(2)你选择一个多项式,这个多项式的最高次数是t-1(在我们的例子中,t是需要的最少地图片数,假设是3,所以选择2阶多项式)。
(3)这个多项式的自由项(即常数项)是你的秘密(数字100)。
(4)然后,你在这个多项式上随机选择一些点(相当于切成的地图片),这些点的数量大于或等于你想要的最少片数。
(5)每个点的值(y值,多项式在该点x的值)就是你分发给朋友的地图片。
(6)如果你的朋友们集齐了足够数量的地图片(即点),他们可以使用数学方法(多项式插值)来计算出原多项式,特别是多项式的自由项,也就是秘密数字100。
2、不经意传输
定义:
不经意传输(Oblivious Transfer, OT)是一种可保护隐私的双方通信协议,消息发送者从一些待发送的消息中发送某一条给接收者,但并不知道接收者具体收到了哪一条消息。不经意传输协议是一个两方安全计算协议,协议使得接收方除选取的内容外,无法获取剩余数据,并且发送方也无从知道被选取的内容。
应用案例:
一个用户可能希望从在线图书馆检索关于特定主题的资料,但不希望图书馆知道这一兴趣。通过OT,用户可以安全地查询所需信息而不暴露查询的具体内容:
(1)图书馆(服务器)准备
图书馆将其所有图书资料或文档编码和索引化。每种资料都赋予一个唯一的索引号。
(2)不经意传输的设置
选择一个合适的1-out-of-N OT协议,其中N是图书馆数据库中资料的总数。用户决定他需要查询的资料的索引号,但这个索引号需要保密,不被图书馆知道。
(3)密钥生成与请求
根据选择的OT协议,用户生成一组密钥,对应于他想要查询的资料索引。用户将所有公钥发送给图书馆(服务器),但不透露这些公钥对应的具体索引号。
(4)数据加密与发送
图书馆使用从用户处收到的每个公钥加密对应索引的资料信息。图书馆将所有加密后的资料发送给用户。
(5)数据的解密与访问
用户使用他为感兴趣的资料保留的私钥解密相应的加密资料。用户成功解密并访问到他所需的资料,而没有其他资料被揭示。
(6)完成交易
在整个过程中,图书馆无法确定用户查询了哪个资料,因为所有资料都被加密并发送了。用户得到了所需的资料,而没有透露他的兴趣点。
原理解释:
想象一下,Alice有两条消息,消息M0和消息M1,而Bob想要安全地从Alice那里获取M0,但不希望Alice知道他选择的是哪条消息。
Alice有两条消息:
M0 = "Hello" (我们用ASCII码转换为数字,"Hello" 转换为 72, 101, 108, 108, 111)
M1 = "World" (同样,"World" 转换为 87, 111, 114, 108, 100)
Alice生成两对RSA公私钥:
公钥 puk0 和私钥 prk0
公钥 puk1 和私钥 prk1
不经意传输的步骤:
(1)公钥发送
Alice 将两个公钥 puk0 和 puk1 发送给 Bob。
(2)Bob的选择和加密
假设 Bob 想要 M0,他生成一个随机数 r = 12345。
Bob 使用公钥 puk0 对随机数进行