零知识认证顺序查询和列表上的顺序统计
摘要
顺序查询将来自列表(有序序列) L的一组元素作为输入,并要求使用由 L诱导的全序对该集合进行排序。我们提出了两种形式化模型,用于以可验证且私密的方式回答列表上的顺序查询。我们的第一个模型称为 zero-knowledge list(ZKL),它将集合上成员查询的标准两方模型推广到列表上零知识的顺序查询。我们提出了一种基于零知识集合和同态整数承诺的ZKL构造。我们的第二个模型 privacy-preserving authenticated list(PPAL)通过增加零知识隐私要求扩展了认证数据结构。这是一个三方模型,其中可信所有者将列表外包给一个不可信的云服务器,该服务器响应客户端发出的顺序查询,并返回关于答案的证明。PPAL能够抵御恶意服务器的数据完整性攻击,并提供针对恶意客户端的隐私保护。尽管PPAL可以使用我们的ZKL构造来实现,但该构造在云应用中效率不够理想。我们提出了一种基于新颖的盲化双线性累加器和双线性映射技术的 efficient PPAL构造。我们的两个模型在随机预言模型下都是可证明安全的,并且是零知识的(例如,甚至隐藏列表的大小)。我们还表明,ZKL和PPAL框架可以有效地扩展以支持基本的统计查询,并在零知识下完成。
1 引言
在处理敏感数据的许多实际场景中,发布可验证的部分信息同时保持隐私性是一项需求。一个基本的情况是以保护隐私的方式(称为零知识属性)发布集合的一个子集并证明其真实性[10,12,26,29]。然而,在许多其他情况下,信息存储在数据结构中以支持更丰富的查询类型。在本文中,我们考虑列表中两个或多个元素的顺序查询,查询的响应将根据这些元素在列表中的顺序重新排列返回。顺序查询是许多实际应用的核心,其中被查询元素之间的顺序被揭示并得到证明,但被查询元素在列表中的排名以及其他元素的信息应受到保护。
在只有一个获胜者的拍卖中(例如,单个广告位的在线广告拍卖),每位参与者向拍卖组织者提交其秘密出价。在宣布最高出价者之后,某位参与者希望验证自己的出价确实较低。此时,拍卖组织者将提供一个证明,且不透露最高出价的具体金额、该参与者出价的排名,或其他任何出价信息。
贷款机构通常要求个人或夫妻提供银行对账单和工资单来证明其贷款资格。这些文件包含超出贷款机构需求的敏感信息:例如银行账户余额和薪水是否超过给定的阈值。一种理想的替代方案是,由银行和雇主提供证明,表明这些阈值已被满足,而无需透露具体数值,甚至隐藏夫妻中哪一方收入更高。
上述示例可以通过在有序集合(即列表)上进行顺序查询来推广,这些查询返回被查询元素的顺序以及此顺序的证明,但除此之外不泄露任何其他信息。我们通过引入两种不同的模型来解决这一问题:零知识列表 (ZKL) 和隐私保护认证列表 (PPAL)。
ZKL 考虑两方模型并扩展了零知识集合[12,29]至列表。在 ZKL 中,证明者对一个列表进行承诺,验证者通过查询证明者来获知列表中某个子集元素的顺序。验证者应能够验证答案的正确性,但无法获得关于列表其余部分的任何信息,例如列表大小、其他元素的顺序或被查询元素的排名。在此,证明者和验证者均可能作为恶意对手行为。证明者可能试图提供与其最初承诺的列表不一致的答案,而验证者可能试图获取超出查询答案的信息,或任意偏离协议。
PPAL 考虑了三方:列表的所有者、代表所有者回答列表查询的服务器,以及向服务器发起查询的客户端。PPAL 的隐私性保障与 ZKL 相同。在真实性方面,PPAL 假设所有者是可信的,而服务器和客户端可能是恶意的。这种信任模型使得 PPAL 的构造比 ZKL 高效得多,我们将在论文的后续部分看到这一点。PPAL 可直接应用于外包服务,其中服务器建模了所有者用于与其客户端交互的云服务。
我们注意到,PPAL 可被视为认证数据结构(ADS)(参见例如 [19,20,28,36])的一种隐私保护扩展,二者均在三方模型中运行:服务器存储所有者的数据,并向客户端证明查询答案的真实性。然而,该模型中的隐私属性尚未被研究,因此已知的 ADS 构造方法会通过其真实性证明泄露有关其余数据的信息。例如,经典默克尔哈希树 [28] 对包含 n 个元素的集合通过大小为 log n 的证明来证明某个元素的成员资格,从而泄露了集合的大小信息。此外,如果元素以排序顺序存储在叶节点中,则证明某个元素的成员资格会泄露其排名。
在本文中,我们定义了ZKL和PPAL的安全属性,并为其提供了高效构造方法。ZKL中针对验证者的隐私属性以及PPAL中针对客户端的隐私属性均为零知识,即答案和证明与模拟器生成的答案和证明是不可区分的。
除了先前和当前的查询及答案之外一无所知,因此不可能泄露任何超出这些信息的内容。尽管我们展示了PPAL可以使用我们的ZKL构造来实现,但我们还提供了一种直接的PPAL构造,由于客户端对列表所有者的信任,该构造在效率上要高得多。设 n为列表大小, m为查询大小,即待确定顺序的列表元素数量。我们的PPAL构造使用的证明大小为 O(m),并允许客户端在O(m)时间内验证一个证明。所有者在 O(n)时间和空间内执行设置。服务器使用O(n)空间来存储列表及相关认证信息,并在O(min(mlog n, n))时间内回答查询并生成证明。相比之下,在ZKL构造中,时间和存储需求的开销与安全参数呈线性关系。需要注意的是,ZKL还支持(非)成员查询。PPAL中的客户端和ZKL中的验证者每个查询仅需一轮通信。我们的ZKL构造基于零知识集合和同态整数承诺。我们的 PPAL构造采用了一种新颖的累加器盲化技术,并结合双线性聚合签名。两者在随机预言模型下都是安全的。
2 问题陈述、模型、相关工作和贡献
2.1 问题陈述和模型
设 L为一个由不同元素组成的全序列表。对 L的顺序查询定义如下:给定 L的一组元素,返回这些元素按照其在 L中的顺序重新排列的结果以及此顺序的证明。我们提出的两种模型PPAL和ZKL均支持该查询。除了支持顺序查询外, ZKL还支持可证明成员关系与非成员查询。这些证明除了提供真实性外,还要求不泄露答案以外的任何信息。
ZKL
:该模型包含两个参与方:证明者和验证者。证明者首先计算一个列表 L 的承诺,并将该承诺透露给验证者。之后,验证者对 L 提出成员和顺序查询,证明者则提供相应的证明。证明者和验证者都可能是恶意的:
– 证明者可能试图给出与初始承诺不一致的答案。
– 验证者可能试图从证明中获取超出其从答案中已推断出的关于L的额外信息。例如,如果验证者执行了两次顺序查询,得到的答案为 x< y和 x< z,他可能想要查明是 y< z还是 z< y。
ZKL的安全属性完备性、可靠性和零知识可确保其在面对恶意证明者和验证者时的安全性。完备性要求诚实生成的证明始终能通过验证测试。可靠性要求证明者无法构造出一个查询,以及与初始承诺不一致的相应答案和令人信服的证明。最后,零知识意味着每个证明仅揭示答案本身而无其他信息。换句话说,必须存在一个模拟器,在仅拥有对 L的预言机访问权限的情况下,能够模拟出与真实证明不可区分的成员和顺序查询的证明。
PPAL
:该模型包含三方:所有者、服务器和客户端。所有者生成列表 L并将 其外包给服务器。所有者还向服务器和客户端发送(可能不同)关于 L的摘要信息。当客户端发起顺序查询时,服务器利用服务器端的摘要信息构建答案及其证明,并将其返回给客户端,客户端则使用客户端的摘要信息验证该答案及其证明。服务器和客户端都可能是恶意的:
– 服务器可能会尝试为(顺序)查询的错误答案伪造证明,例如,证明元素对 L的错误顺序。
– 客户端类似于ZKL中的验证者,可能会试图从证明中获取关于列表 L的额外信息,超出其从答案中已推断的内容。
在典型的云数据库应用中,客户端只能受限地访问数据结构,服务器会强制执行访问控制策略,以防止客户端获取未授权查询的答案。这促使客户端可能表现出好奇甚至恶意的行为,试图提出格式错误的查询或违反访问控制策略的查询。然而,我们假设服务器通过拒绝回答非法查询来强制客户端遵守合法行为。因此,PPAL的安全模型定义如下。
PPAL的特性完备性、可靠性和零知识可确保其在面对恶意服务器和客户端时的安全性。这些特性与ZKL的特性相似,但可靠性有所不同。在PPAL中,它要求客户端不能接受由服务器伪造的、相对于所有者列表而言不正确的答案的证明。PPAL中的所有者和服务器可被视为ZKL中的一个单一实体,即证明者。因此,ZKL的可靠性用于防范试图提供与其初始承诺不一致的答案的证明者。而在PPAL模型中,所有者和服务器是独立的双方,其中所有者是可信的,可靠性仅用于防范恶意服务器。
为了理解零知识属性的强度,让我们说明一下这些证明在多大程度上是不泄露信息的。该属性保证了对静态列表进行自适应查询的客户端无法获知被查询元素的排名、它们之间的距离,甚至无法获知 L的大小。客户端无法推断出任何超出通过传递性规则从先前查询的顺序中可推导出的相对顺序信息。值得注意的是,在无泄漏可编辑签名方案的背景下,隐私属性已被使用基于游戏的定义来定义透明性[6,34]和隐私性[11,23]。然而,我们对查询响应的可模拟性的定义,即零知识属性,是捕捉无泄露性属性的一种更简单且更直观的方式。
效率 :我们将模型的理想效率目标描述如下,其中 L 是包含 n 个项目的列表,m 是查询大小。存储列表L 及其用于生成证明的辅助信息所需的空间应为 O(n)。与相关工作类似,元素大小的乘法因子 O(poly(k))(其中 k 是安全参数)未在 O(·)中显式表示。预处理列表 L的设置应花费 O(n) 时间。对查询答案的证明应具有 O(m) 的大小。处理查询以生成查询答案及其证明应花费 O(m) 时间。验证答案证明应花费 O(m) 时间。
顺序查询在顺序统计中的应用 :我们的PPAL顺序查询可作为构建模块,用于高效地以零知识方式(即返回的证明应是可模拟的)回答关于包含 n个元素的列表 L的许多有趣的统计查询。设成对顺序证明表示来自 L的两个元素之间的顺序证明。那么,PPAL客户端可以向服务器发送一个 m列表元素的子集S,并请求服务器返回 S相对于列表中元素顺序的最大值、最小值或中位数元素。这可以通过提供 m个成对顺序证明来实现。顺序查询还可以扩展为通过 t(m−t)个成对顺序证明返回 S的前 t个元素;如果允许揭示前 t个元素之间的顺序,则仅需m−1个成对顺序证明,其中 t< m。最后,对于 L中的某个元素 a,服务器可通过 m个成对顺序证明返回 S中高于(或低于)阈值 a的元素。需要强调的是,这些查询都不会泄露答案以外的任何信息。此外,每个查询返回的证明大小与查询大小成正比,并且在阈值查询中,证明大小与答案大小成正比,这是最优的。我们注意到,ZKL也支持这些统计查询。
2.2 相关工作
首先,我们讨论关于以零知识方式回答查询的数据结构的研究。我们的ZKL是将此项研究扩展到列表和顺序查询的首个实例。接着,我们提及可用于实例化外包数据结构的签名方案,这些方案需要保持隐私性和完整性。然而,此类实例化效率不高,因为它们基于不同的使用模型和底层数据。最后,我们概述了针对有序列表及其他结构化数据的无泄漏可编辑签名方案。这些签名方案不如我们的构造高效,并且其定义基于游戏模型,而我们的零知识定义则更为直观。最后,我们讨论了关于PPAL的后续工作。
零知识数据结构 :零知识字典和范围查询在文献中受到了广泛关注 [10,12,26,29,32]。我们提出的ZKL模型是支持顺序查询的此类研究的首个通用化扩展。
零知识集合(ZKS)模型由Micali等[29]提出,其中证明者以一种特定方式对一个有限集合 S进行承诺,使得之后她能够高效地(且非交互式地)证明形如x ∈ S或 x∈/ S的语句,而不会泄露关于 S的任何信息(除了已被查询的内容),甚至不会泄露 S的大小。证明者不应能对某一元素证明相互矛盾的陈述。Chase 等[12]对该方案进行了抽象,并将其表述为水银承诺的形式,随后该概念在[10,26]中被推广为 q‐陷门水银承诺,同时在[9]中提出了一个密切相关的思想——向量承诺。Kate 等[22]提出了一种较弱的原语,称为近零知识集合,其中集合大小不保密。Ostrovsky等[32]将(非)成员查询推广到多维数据集上的正交范围查询,并考虑在其协议中增加隐私性。然而,使用NP归约和概率可检查证明使其通用构造代价高昂。
我们注意到,戈德堡et al.[18]最近关于DNSSEC区域枚举的工作使用了一个与我们的PPAL模型相关的模型,并且是独立开发的。该框架仅支持集合(非)成员查询,并以 f‐零知识的方式回答这些查询。此性质确保了泄露给验证者的信息仅限于集合上的某个函数 f,例如 f是[18]中的集合大小。
签名方案 :一种三方模型,其中所有者对数据文档进行数字签名并将其外包给服务器,服务器仅向客户端披露已签名文档的一部分以及对该部分的合法派生签名(无需所有者的参与),可通过一系列签名方案实现,即 内容提取、可引用、算术、可删减、同态、可净化和传递签名[7,21,30,31,35,38]。此外,如果签名不泄露关于原始文档的任何信息,则该方法可用于增强隐私性。然而,对于大多数实际应用而言,使用未专门针对结构化数据设计的签名方案进行通用实例化效率较低。
Ahn 等[1]提出了一个在认证数据上进行计算的统一框架,其中第三方可以从父对象 x上的签名推导出对象 x′上的签名,只要 P(x, x′) = 1对某个谓词 P成立,该谓词描述了 x和 x′之间的可认证关系。此外,所推导出的签名不会泄露关于父对象 x的任何额外信息。这一研究方向在[2,37]中得到了进一步改进。[1]中的作者提出了一种基于RSA累加器的计算代价较高的方案,但未考虑特定数据结构的谓词。文献[13],中提出了一个相关的可延展签名方案概念,即给定消息 x上的签名 σ,可以在不访问私钥的情况下,高效地推导出消息 x′上的签名 σ′,使得 x′= T(x)对某个允许的变换T成立。[13]的隐私性定义(模拟上下文隐藏)比[1]更强,因为它允许敌手生成密钥和签名。然而,在我们的PPAL设定中,所有者是一个可信方,因此在此框架中更强的模拟上下文隐藏概念并不适用。此外,在我们的PPAL模型中,给定文档中的一段引文及其证明,客户端应能够验证该引文确实存在于文档中,这与[13]中的不可链接性概念相反。
结构化数据的无泄露签名方案 :一种无泄露可删减签名方案(LRSS)允许第三方在无需签名者参与的情况下删除或删减已签名文档的部分内容。验证者仅看到剩余的删减后文档,并能够验证其有效性和真实性。无泄露属性确保删减后文档及其签名不会泄露被删除部分的内容或位置信息。我们讨论了专门针对结构化数据和有序列表的LRSS。在表1中,我们展示了PPAL优于已知的LRSS构造方法。我们工作的另一个重要区别在于隐私性的定义。与LRSS文献中的基于游戏的定义相比,零知识属性更直观、更简单地刻画了无泄露属性[6,34]。
昆杜和贝尔蒂诺 [24]提出了针对有序树(包含有序列表)的结构签名概念,支持第三方对子树进行公开删减。这项工作随后被扩展到无向图和有向无环图 [25]。该概念后来在 [6] 中被形式化为LRSS,用于有序树,之后在 [6,33] 中也提出了针对 [24] 的若干攻击。[6] 中提出的 LRSS 方案的基本思想是对有序列表中所有可能的有序元素对 all possible ordered pairs 进行签名,因此其计算成本和存储空间均与列表中元素数量呈二次方关系。
[6,34]提出了一种用于列表的LRSS,其具有二次方的时间和空间复杂度。Poehls等[33]提出了一种具有线性时间和空间复杂度的列表LRSS方案,但该方案假设存在结合性非阿贝尔哈希函数,而其存在性尚未被正式证明。Kundu等[23],提出了一种在服务器端使用二次方空间的构造方法。Chang等[11]提出了一种字符串的无泄露可删减签名方案(可视为列表),该方案隐藏了字符串中被删减或删除部分的位置,但代价是验证成本为二次方。[11,23,24]的这些构造方法均未满足我们对零知识的定义。
后续工作 :最后我们注意到,在最近的研究中[16], Ghosh等已将本文提出的模型推广到支持查询和更新操作的通用抽象数据类型。此外,他们还提出了针对动态列表和有界维度偏序集的高效构造方法。
2.3 贡献与论文结构
我们的贡献在于提出了新颖的模型和高效构造方法。在回顾了预备概念和密码学原语之后,我们在第3节中引入了零知识列表(ZKL)模型。我们描述了我们的ZKL构造方法及其安全性以及第4节中的效率。在第5节中,我们介绍了隐私保护的认证列表(PPAL)模型。基于双线性映射的一种高效PPAL构造方法、其性能和安全属性在第6节中给出。在表1中,我们从性能和假设方面将我们的ZKL和PPAL构造方法与先前工作进行了比较。我们特别指出了哪些构造方法满足零知识属性。我们的 PPAL构造方法在基于广泛接受的假设[6,34]的情况下优于所有先前的工作( [33]的构造基于非标准假设)。
3 预备知识
3.1 数据类型
我们将线性有序列表 L视为所有者希望存储在服务器上的数据结构。列表是一组有序的元素 L={x1, x2,…, xn},其中每个 xi ∈{0, 1}∗, ∀x1, x2 ∈ L, x1 ≠ x2,且要么 x1< x2,要么 x2< x1。因此,<是 L元素集合上的严格顺序,具有反自反性、反对称性和传递性。
我们将列表 L 的元素集合表示为 Elements(L)。 L 的子列表 δ 定义为:δ={x | x ∈Elements(L)}。注意, δ 中元素的顺序可能不遵循 L 的顺序。我们用 πL(δ) 表示 δ 的元素在 L 顺序下的排列。 L(xi) 表示元素 xi 在 L 中的成员资格,即当 L(xi) = 为真时, xi ∈ L 成立;当 L(xi)= 为假时, xi∉ L 不成立。对于所有满足 xi 使得 L(xi) = 为真的情况,rank(L, xi) 表示元素 xi 在列表 L 中的排名。
3.2 密码学原语
我们现在介绍构造中所使用的密码学原语以及支撑我们方法安全性的密码学假设。具体而言,我们的零知识列表构造依赖于同态整数承诺、证明一个数为非负的零知识协议以及零知识集合,而隐私保护列表的构造则依赖于双线性聚合签名和 n‐双线性Diffie‐Hellman逆假设。
同态整数承诺方案 :我们使用一种统计隐藏且计算绑定的同态整数承诺方案 HomIntCom [5,14]。后者意味着存在一个陷门,因此可以利用该陷门“伪造承诺”(即,使用陷门将承诺打开为任意消息)。我们将对 x 的承诺表示为 C(x; r),其中 r 是承诺所使用的随机性。为简便起见,有时我们从记号中省略 r,并用 C(x) 表示对 x 的承诺。该方案的 同态 性质定义为 C(x+ y) = C(x)× C(y)。
在零知识中证明一个整数为非负:我们使用以下(交互式)协议,在证明者和验证者之间进行:证明者向验证者发送一个关于整数 c的 x ≥ 0承诺,并在不打开 c的情况下,以零知识方式证明该被承诺的整数是非负的。我们将此协议记为P ↔ V(x, r: c= C(x; r) ∧ x ≥ 0)。作为具体构造,我们采用[27]提出的协议,该协议是一种 Σ协议,即诚实验证者零知识,并且可以通过菲亚特‐沙米尔启发式在随机预言模型中转化为非交互式零知识(NIZK)[15]。
零知识集合方案 :设 D为一组键值对。如果(x, v)是 D中的一个键值对,则我们写作 D(x) = v,表示 v是对应于键 x的值。对于不存在于 D中的键 x∉ D,我们写作 D(x) = ⊥。一个零知识集合方案(ZKS)[29]由三个概率多项式时间算法组成:ZKS =(ZKSSetup, ZKSProver =(ZKSP1, ZKSP2) 和 ZKSVerifier),查询的形式为“键 x是否在 D中?”。ZKSSetup算法以安全参数作为输入,并生成该方案的公钥,供证明者(ZKSProver)和验证者( ZKSVerifier)共同使用。证明者ZKSProver由两个算法组成:ZKSP1以安全参数、公钥和集合 D作为输入,并生成针对D的一个简短摘要承诺com; ZKSP2接收查询 x,并生成对应的值 v= D(x)以及相应的(非)成员证明proofx。验证者ZKSVerifier接收安全参数、公钥、承诺c、查询 x、答案 D(x)和证明proofx,并返回一个比特 b,其中 b=表示接受,/表示拒绝。在我们构建零知识列表时,选择了一种基于水银承诺的[12]的ZKS构造。
双线性聚合签名方案 :我们的PPAL方案依赖于Boneh 等人的[4]双线性聚合签名方案。给定来自 n个不同用户 u1,…, un对不同消息 M1,…, Mn的签名 σ1,…, σn,可以将这些签名聚合成一个单独的短签名 σ,使得该签名(以及 n条消息)能使验证者信服这 n个用户确实签署了 n条原始消息(即用户 i签署了消息 Mi)。我们使用的是单个用户对 n不同消息 M1,…, Mn进行签名的特殊情况。聚合签名方案的安全要求保证了聚合签名 σ当且仅当聚合器使用了所有的 σi来构造它时才是有效的。
3.3 困难性假设
设 p是一个大的 k位素数,其中 k ∈ N是安全参数。令 n ∈ N为关于 k的多项式,即 n= poly(k)。令 e: G× G → G1为一个双线性映射,其中G和 G1是素数阶 p的群,且 g是 G的一个随机生成元。我们将运行时间为poly(k)的概率多项式时间(PPT)敌手 A称为概率多项式时间(PPT)敌手。我们使用Aal g(input ,…)表示敌手 A对算法alg的一个实例化具有预言机访问,其中第一个参数被设置为输入,…表示 A可以为其余参数提供任意输入。
定义1(n‐双线性Diffie‐Hellman逆问题(n‐BDHI)
。设 s是 Z∗ p的一个随机元素,且n为一个正整数。那么,对于任意概率多项式时间对手 A,存在一个可忽略函数 ν(.),使得:
Pr[s←−$ Z∗ p; y ← A(〈g, gs, gs2,…, gsn〉): y= e(g, g)1 s] ≤ ν(k).
4 零知识列表(ZKL)
我们将一致集合成员查询的概念推广[12,29]以支持在具有唯一元素的列表上进行零知识的成员和顺序查询零知识上的无重复元素。更具体地说,给定一个全序的唯一元素列表 L={y1, y2,…, yn},我们希望以非交互式且零知识的方式(证明不泄露查询答案以外的任何信息,甚至不泄露列表大小)支持以下形式的查询:
– yi ∈ L或 yi∉ L,即 L(yi)为真还是 L(yi)为假?
– 对于两个元素 yi, yj ∈ L,它们的相对顺序是什么,即在 L中是 yi< yj还是 yj< yi?
我们采用与[12,29,32]中相同的对抗模型。该模型包含两方:证明者和验证者。证明者最初对一组元素进行承诺,并将该承诺公开。现在我们正式描述该模型及其安全属性。
4.1 模型
零知识列表方案(ZKL)由三个概率多项式时间算法组成:(设置,证明者 = (P1,P2),验证者)。查询的形式为(δ,标志),其中 δ={z1,…, zm}, zi ∈{0, 1}∗ 是一组元素,标志 = 0 表示成员资格(非成员)查询,标志 = 1 表示顺序查询。在接下来的章节中,我们将使用状态来表示一个保存算法当前状态(当其执行结束时)的变量。
PK ←Setup(1k) 设置算法以安全参数作为输入,并生成该方案的公钥PK。证明者和验证者都以字符串PK 作为输入,该字符串可以是随机字符串(此时协议处于公共随机字符串模型中),也可以具有特定结构(此时协议处于可信参数模型中)。
(com,state) ← P1(1 k,PK L) P1以安全参数、公钥PK 和列表 L 作为输入,并为该列表生成一个短的摘要承诺com。
(成员,证明M,顺序,证明O) ← P2(公钥,状态 δ,标志) 其中 δ={z1,…, zm}且标志表示查询类型。P2生成被查询元素的成员信息,成员 ={L(z1)…, L(zm)}以及成员证明(和非成员证明),证明M。证明O根据标志设置:
标志 = 0: P2将顺序和证明 O设为 ⊥并返回 (成员,证明M,⊥,⊥)。
标志 = 1:令 δ˜={zi | i ∈[1, m] ∧ L(zi) =真}。P2生成 δ˜中元素之间的正确列表顺序,顺序 = πL(δ˜),以及顺序证明,证明O。
b ←Verifier(1k, PK, com δ,标志,成员,证明M,顺序,证明O) 验证者接收安全参数、公钥PK、承诺c 以及查询 (δ,标志) 和成员、证明M、顺序、证明O,并返回一个比特 b,其中 b=接受/拒绝。
示例 :让我们通过一个小例子来说明上述功能。设L={A, B, C}和(δ,标志) = ({B, D, A},1)为查询。对于该查询,P2返回成员={L(B) L(D) L(A)}={真,假,真},以及证明M中的成员资格和非成员资格的证明、顺序={A, B},以及 A和 B之间顺序关系的相应证明proofO。
4.2 安全属性
回想一下,ZKL 的安全属性——完备性、可靠性 和 零知识,可确保针对恶意证明者和验证者的安全性。完备性要求诚实生成的证明始终能通过验证测试。可靠性指出,证明者不应能够构造出一个查询及其相应与初始承诺不一致的答案和令人信服的证明。最后,零知识确保每个证明仅揭示答案而无其他信息。
定义2(完备性) 。对于每个列表 L,每个查询 δ以及每个 flag , Pr[公钥 ←设置(1k);(承诺,状态) ← P1(1 k,公钥 L);(成员,证明M,顺序,证明 O) ← P2(公钥,状态 δ,标志) :验证者(1k,公钥,承诺 δ,标志,成员,证明M,顺序,证明O) =接受]= 1
定义3(可靠性)
。对于每一个概率多项式时间的恶意证明者算法,Adv,对于每一个查询 δ以及每一个 flag ,存在一个可忽略函数 ν(.)使得:
Pr[PK ←Setup(1k); (com, member1, proof1M, order1, proof1O, member2,proof2M, order2, proof2O) ←敌手(1k, PK) : 验证者(1k, PK, com δ, 标志, member1, proof1M, order1, proof1O) =接受∧验证者(1k, PK, com δ, 标志, member2, proof2M, order2, proof2O) =接受∧ ((member1 ≠ member2) ∨(order 1 ≠ order2))] ≤ ν(k)
定义4(零知识)
。存在一个PPT模拟器 Sim =(Sim1,Sim2,Sim3) ,使得对于每个PPT恶意验证者 Adv= (敌手1,敌手2),存在一个可忽略函数 ν(.) 使得:
| Pr[PK← Setup(1k);(L, stateA) ← Adv1(1k, PK); (com, stateP) ← P1(1k, PK, L): AdvP2(PK,stateP,·) 2 (com, stateA)= 1]− Pr[(PK, stateS) ← Sim1(1k);(L, stateA) ← Adv1(1k, PK); (com, stateS) ← Sim2(1k, stateS): AdvSim3L(1k,stateS) 2 (com, stateA)= 1]| ≤ ν(k),
其中Sim3拥有对 L的预言机访问权限,即给定查询(δ,flag),Sim3可以查询列表 L,仅了解元素在 δ中的成员资格/非成员资格,如果flag= 1,则了解元素 δ在 L中的列表顺序。
4.3 ZKL 构造
该构造使用零知识集合方案、同态整数承诺方案、证明整数非负性的零知识协议以及抗碰撞性哈希函数 H :{0, 1}∗ →{0, 1}l,如果列表 L 的元素大于 l 位。具体而言,给定输入列表L ,证明者P1 创建一个集合 D ,其中对于每个元素 yj ∈ L,添加一个(键,值) 对(H(yj) C(j))。 H(yj) 是 yj 的哈希值,而 C(j) 是排名(rank(L, yj))的同态整数承诺(假设rank(L, yj) = j,不 失一般性)。P1 在 D 上使用来自零知识集合方案ZKS =(ZKSSetup, ZKSProver =(ZKSP1, ZKSP2),ZKSVerifier)[12] 的ZKSP1 设置一个零知识集合。ZKSP1 的输出是对 D 的承诺com,P1 将其发送给验证者。
P2的工作方式如下。形式为(δ,0)的成员查询和非成员查询以与零知识集合相同的方式进行回复,即通过对子列表 δ的每个元素的哈希值调用ZKSP2来实现。回顾一下,作为对某个键的成员查询的响应,ZKSP2会返回与此键对应的值。在我们的情况下,所查询的键是 H(yj),而ZKSP2, D(H(yj))返回的值是承诺 C(j), 其中 j是元素 yj在列表 L中的排名(如果 yj ∈ L)。如果yj∉ L,则返回的值为 ⊥。因此,验证者收到被查询成员元素的排名承诺。这些承诺永远不会被打开,而是作为顺序证明的一部分使用。
对于给定的顺序查询 (δ,1),在返回的顺序中每一对相邻元素之间,P2提供一个顺序证明。回顾一下,order 包含 δ 的成员元素,这些元素按照其在列表L中的顺序排列。P2对两个元素 yi 和 yj 之间的顺序证明如下:设rank(L,yi) =i,rank(L, yj) = j,且 C(i), C(j) 为相应的承诺,并且不失一般性地令 i< j。如上所述, C(i) 和 C(j) 已由P2作为成员资格证明的一部分返回。此外,P2返回一个对1 的承诺 C(1) 及其打开信息 ρ。注意,验证者可以自行计算 C(1),但随后证明者需要验证者计算出的 C(1),才能生成证明为了确保 C(j −i−1)的非负性。为了避免这种交互,我们让证明者发送 C(1)及其打开值。查询答案的验证过程如下。验证者利用整数承诺方案的同态性质,计算C(j −i−1) := C(j)/(C(i)C(1))。P2使用零知识协议 P ↔ V(x, r: c=C(x; r) ∧ x ≥ 0) 说服验证者 C(j − i−1) 是对值≥ 0的承诺。注意,我们使用了第3节中讨论的该协议的非交互式通用零知识版本。因此,查询阶段以单轮方式进行。
我们注意到,需要验证者验证 j − i −1 ≥ 0而非 j − i ≥0,否则作弊证明者Adv可以执行以下操作:在列表中的每个元素上存储相同的任意非负整数作为排名,因此C(j − i)和 C(i − j)是对0的承诺,Adv便总能成功证明任意顺序。然而,诚实证明者总能证明 C(j − i −1)的非负性,因为对于列表中任意排名 i, j均有 |j − i| ≥ 1。
此外,我们注意到,只要与排名序列存在一一对应关系,对排名的承诺就可以被对严格单调序列的承诺所替代。在这种情况下,两个元素之间的距离也将为正,因此上述协议仍然成立。
定理1
. 第4.3节中零知识列表(ZKL)的构造是一种满足完备性(定义2)、可靠性(定义3)和零知识性(定义4)安全属性的非交互式两方协议,该协议在随机预言模型下成立(继承自NIZK)。该构造具有以下性能,其中 n为列表大小, m为查询大小,列表中的每个元素均为 k位(若不是,则可使用哈希函数将每个元素缩减为k位字符串,如构造中所示)。
– 证明者在承诺阶段以 O(nk)的时间和空间执行,其中乘法因子 k继承自树的高度。
– 在查询阶段,证明者以 O(mk)时间计算答案的证明。
– 验证者以 O(mk)时间和空间验证证明。
ZKL方案的可靠性源于ZKS方案的可靠性、承诺方案的绑定性质以及协议P ↔ V(x, r: c= C(x; r) ∧ x ≥ 0) 的正确
零知识认证顺序查询和列表上的顺序统计
5 隐私保护认证列表 (PPAL)
在上一节中,我们提出了一个模型和一种新原语的构造方法,该原语称为零知识列表。正如我们之前注意到的,ZKL模型提供了所需的功能,以验证列表上的顺序查询。然而,相应的该构造无法提供在云计算环境中所期望的效率,其中验证者(客户端)的内存资源有限,正如我们在第5.3节中讨论的那样。在本节中,我们针对此场景定义了一种隐私保护认证列表PPAL模型,该模型在三方之间执行。该模型 arguably 更符合云环境场景,并且我们将看到,我们的构造也更加高效。
5.1 模型
PPAL 是一个由三个概率多项式时间算法(设置,查询,验证)组成的元组,这些算法在数据列表 L 的所有者、存储 L 并回答客户端查询的服务器以及对列表中的元素发起查询并验证相应答案的客户端之间执行。我们注意到,该模型假设查询针对的是列表的成员元素,即对于任何查询 δ,Elements(δ) ⊆ Elements(L)。换句话说,该模型不支持非成员资格的证明,类似于其他仅支持正向成员资格证明的数据结构,例如 [6,8,9,11,23,24,33]。
(摘要SC,摘要SS) ← 设置(1k, L) 该算法以安全参数和源列表 L作为输入,并为该列表生成两个摘要S,即摘要SC和摘要SS。此算法由所有者运行。摘要 SC发送给客户端,摘要SS发送给服务器。
(顺序,证明) ← 查询(摘要S, L, δ)该算法以所有者生成的服务器摘要 digestS、源列表 L 和被查询的子列表 δ 作为输入,其中列表的子列表 L 定义为:元素(δ) ⊆ 元素(L)。该算法生成子列表中元素的顺序 order = πL(δ),以及对应结果的证明 proof。此算法由服务器运行。不失一般性,我们假设 |δ| > 1。在 |δ| = 1 的平凡情况下,服务器返回一个空证明,即 (order = δ,proof = ⊥)。
b ← 验证(digestC, δ,顺序,证明) 该算法接收摘要C、一个被查询的子列表δ、顺序和证明,并返回一个比特 b,其中 b=接受当且仅当元素(δ) ⊆ 元素(L)且顺序 = πL(δ)。否则, b=拒绝。该算法由客户端执行。
5.2 安全属性
PPAL 具有三个重要的安全属性。回顾一下,PPAL 的属性——完备性、可靠性和零知识——可确保针对恶意服务器和客户端的安全性。这些属性与 ZKL 的属性类似,但可靠性有所不同。对于 PPAL 而言,它要求客户端不会接受服务器针对所有者列表的错误答案所伪造的证明。我们将在下方形式化地描述每个安全定义。
第一个性质是完备性。该性质确保对于任意列表 L以及 L的任意子列表 δ,如果摘要C、摘要S、顺序、证明都是诚实生成的,即所有者和服务器诚实地执行协议,则客户端将始终确信 δ的正确列表顺序。
定义5 (完备性)
。对于所有列表 L 以及 L 的所有子列表 δ
Pr[(digestC, digestS) ← 设置(1k, L);(顺序,证明) ← 查询(digestS, L, δ):验证(digestC, δ,顺序,证明) = 接受 ∧ 顺序 = πL(δ)]= 1
第二个安全性属性是可靠性。该属性确保一旦诚实的所有者为列表 L生成 一对(摘要C,摘要S),即使恶意服务器也无法说服客户端接受属于列表 L的元素的错误顺序。该属性保证了方案的完整性。
定义6 (可靠性)
。对于所有PPT的恶意查询算法敌手,对于所有列表 L以及 L的所有查询子列表 δ,存在一个可忽略函数 ν(.),使得:
Pr[(digestC, digestS) ← Setup(1k, L);(order, proof) ← Adv(digestS, L): Verify(digestC, δ, order, proof)= ACCEPT ∧ order≠ πL(δ)] ≤ ν(k)
最后一个性质是零知识。该性质表明,即使恶意客户端也无法获知有关列表(及其大小)的任何信息,除非该信息是客户端已查询的内容。非正式地说,该性质要求证明存在一个模拟器,使得对于敌手选择的任意列表 L,任何对抗性客户端(验证者)都无法区分其正在与知晓 L并基于 L进行回答的诚实所有者和诚实服务器通信,还是正在与仅具有对列表 L的预言机访问的模拟器通信。
定义7 (零知识)
。 存在一个PPT模拟器 Sim =(Sim1, Sim2),使得对于所有 PPT恶意验证者 Adv=(Adv1,Adv2),存在一个可忽略函数 ν(.),使得:
| Pr[(L, stateA) ← Adv1(1k);(digestC, digestS) ← Setup(1k, L): AdvQuery(digestS ,L,.) 2 (digestC, stateA)= 1]− Pr[(L, stateA) ← Adv1(1k);(digestC, stateS) ← Sim1(1k): Adv Sim2L(1 k ,stateS) 2 (digestC, stateA)= 1]| ≤ ν(k)
这里 Sim2 具有对 L 的预言机访问权限,即给定 L 的一个子列表 δ,Sim2 可以查询列表 L 以仅学习该子列表 δ的正确顺序,但无法查看 L。
5.3 通过ZKL构造PPAL
我们展示如何在定理2和 3中通过ZKL实例化PPAL,然后讨论由此得到的构造未能达到期望的效率。
定理2
。 给定一个非交互式ZKL方案 ZKL=(设置,证明者 =(P1 , P 2), 验证者),其支持在列表 L 上进行形式为 (δ,标志)的查询,我们可以实例化一个用于列表 L 的PPAL方案, PPAL=(设置,查询,验证),其支持形式为 δ 的查询,其中 δ 是 L 的子列表,具体如下:
PPAL.设置(1k, L):调用 PK ← ZKL.设置(1k) 并 (com,状态) ← ZKL.P1(1k, PK L)。返回 (digestC=(PK, com), digestS=(PK,com,状态))。
PPAL.查询 (digestS, L, δ):调用 (成员, 证明M, 顺序, 证明O) ← ZKL.P2(PK, 状态 δ, 1)。返回 (顺序, 证明 =(证明M, 证明O))。
PPAL.验证(digestC, δ, 顺序, 证明M, 证明O):设置 成员 = {1, 1,…, 1} 使得 |成员 | = |δ| = |顺序 |。返回比特 b ,其中 b ←ZKL.验证者(1k, PK, com δ, 1, 成员, 证明M, 顺序, 证明O)。
定理3
。 使用 ZKL方案 实例化的 PPAL方案,ZKL=(设置,证明者 =(P1,P2), 验证者) 具有以下性能:
– 所有者的运行时间和空间与ZKL.设置和 ZKL.P1,的运行时间和空间成正比。
– 服务器的运行时间和空间与 ZKL.P2的运行时间和空间成正比。
– 客户端的运行时间和空间与ZKL.验证者的运行时间和空间成正比。
定理2和 3的正确性由PPAL和ZKL模型的定义得出。在使用第4节中ZKL 构造实例化的PPAL中,所有者运行的时间和空间为 O(kn),服务器所需空间为 O(kn),其中n为列表大小,列表中每个元素长度为 k比特。对于大小为 m的 查询,服务器运行时间为 O(km),客户端的验证时间为O(km)。
如我们所见,由于存在乘法因子 O(k)以及复杂的密码学原语,这种通用构造的效率并不高。在第6节中,我们提出了一种直接PPAL构造,与第4节中我们的ZKL构造的适配方案相比,在空间和计算需求上效率提高了 O(k)倍。
6 PPAL构造
我们首先介绍构建隐私保护认证列表(PPAL)的直觉。接下来,我们将详细介绍相关算法,并分析该构造的安全性和效率。
直觉 : 列表中的每个元素都关联一个成员见证,其中成员见证是双线性累加器公钥的盲化组件。这使得我们能够将元素的排名信息编码到成员见证中,然后利用随机性对排名信息进行盲化。每一对(元素, 成员见证)由所有者签名,并使用双线性聚合签名方案[4],对这些签名进行聚合,以计算出列表摘要签名。签名和摘要被发送到服务器,服务器可在响应客户端查询时利用它们来证明真实性。所有者还将列表摘要签名和双线性聚合签名方案的公钥发送给客户端。使用聚合签名的优势在于,使服务器能够计算一个有效的通过利用聚合签名的同态特性,客户端无需所有者参与即可为源列表的任何子列表生成摘要签名。此外,客户端可以通过一次聚合签名验证调用来验证其中的个人签名。
所有者还会向服务器发送线性数量(相对于列表大小)的随机元素,这些随机元素用于成员证明的编码。这些随机元素使得服务器能够在无需所有者参与的情况下,计算查询元素的顺序证明。顺序证明对两个元素之间的距离(即元素排名之间的差值)进行编码,但不会泄露任何相关信息。客户端随后可结合成员证明,利用双线性映射来验证元素的顺序。
构造 : 我们提出的 PPAL构造如图1所示。我们将 成员证明 记为 xi ∈ L,表示为 txi∈L。对于两个元素 xi, xj ∈ L,若满足 xi< xj在L中成立,则 txi<xj是 顺序证明 ,用于证明 xi与 xj之间的顺序关系。该构造的工作方式如下。
在设置阶段,所有者生成私钥(v, s)和公钥 gv,其中 v用于签名。所有者为列表 L中的每个元素 xi从群组 Z∗ p中选取一个唯一的随机元素 ri, i ∈[1, n]。该元素 ri用于计算成员见证 txi∈L。在后续协议中,它还将与 rj一起被服务器 用来计算顺序证明 txi<xj。所有者还为每个元素计算单独的签名 σi,并将它们聚合成列表的摘要签名σL。它返回 ΣL中 L的每个元素的签名和成员证明,以及为每个索引选取的随机数集合,用于 ΩL中的顺序证明。所有者将摘要C=(gv, σL)发送给客户端,将摘要S=(gv, σL,〈g, gs, gs2, . . . , gsn〉, ΣL, ΩL)和 L发送给服务器。
给定一个查询 δ,服务器返回一个响应列表顺序,其中包含 δ中的元素,顺序与它们在 L中出现的顺序一致。服务器使用 ΣL中的信息来计算子列表 σorder的摘要签名及其成员资格验证单元 λL′,这些是证明中 Σorder组件的一部分。为了计算证明的 Ωorder组件,服务器使用 ΩL中的相应盲化值和元素 g s d,其中 d对应于被查询元素排名之间的距离。
客户端首先检查所有返回的元素是否均由所有者使用 Σorder进行签名,然后使用 Ωorder验证返回元素的顺序。因此,客户端将双线性映射用于两个目的:首先是成员验证,其次是验证顺序。查询阶段中客户端与服务器之间进行单轮通信。
我们现在描述服务器端的预处理步骤,该步骤将对大小为 n的列表进行大小为 m的查询的查询时间从 O(n)降低至 O(min{mlog n, n})。令 ψ i = H(txi ∈L||xi)适用于 xi ∈ L。服务器计算并存储一个具有 n个叶节点的平衡二叉树,其中第 i个叶节点对应于 xi并存储 ψ i 。树的每个内部节点存储其子节点值的乘积。在响应大小为 m的查询时,服务器可通过使用对应于查询中元素之间区间的部分乘积来计算 λL′。这样的部分乘积共有m+ 1个。由于每个部分乘积均可通过使用在树中预计算了O(log n)个乘积,计算其中 m+ 1个乘积的乘积需要 O(mlog n)时间。服务器预处理耗时 O(n),查询时间减少至 O(min{mlog n, n})。
我们在定理 4 中总结了我们的PPAL构造的性质和效率。
定理4
。图1中隐私保护认证列表(PPAL)构造满足随机预言模型(继承自[4]) 下的完备性(定义5)、可靠性(定义6)和零知识(定义7)安全属性,并基于 n-BDHI假设(定义1)。此外,该构造具有以下性能,其中 n表示列表大小, m表示查询大小。
– 所有者和服务器使用 O(n)空间。
– 所有者在 O(n)时间内执行设置阶段, 然后下线。
– 服务器在 O(n)时间内执行预处理阶段。
– 查询阶段是服务器与客户端之间的单轮协议。
– 服务器在 O(min{m log n, n})时间内计算查询答案及其证明。
– 客户端在 O(m)时间和空间内验证证明。
由于空间限制,形式化证明被省略,详见[17]。此处我们重点介绍可靠性与零知识 性的证明。为了证明可靠性,我们假设存在一个恶意服务器Adv,它对列表 L的一个非平凡子列表 δ={x1,…, xm}(其中 m ≥ 2)伪造了顺序。那么在Adv的伪造结果中,至少存在一对逆序对(xi, xj),其顺序被颠倒。不失一般性,假设 u< v,其中 u= rank(L, xi)且 v= rank(L, xj)。此时,Adv必须伪造了一个通过验证的证据 txj <xi =(g s (u−v) )r1 r −1 2 ,其中r1、 r2 ∈ Z ∗ p分别是元素 xi和 xj的盲化组件。我们表明,通过调用Adv并利用其伪造的证据 txj <xi ,可以构造一个概率多项式时间对手,该对手通过输出 e(txj <xi ,(g s v−u−1 )r1 −1 r 2)= e(g, g) 1 s成功破解 g s v−u−1 ‐BDHI困难性假设[3],其中 g s v−u−1是 n‐BDHI问题的输入的一部分。
对于零知识性质,我们编写一个模拟器,该模拟器仅通过获得对列表的预言机访问,并利用我们的PPAL构造使用在指数上被盲化的证据这一事实,即可生成与真实证据分布相同的证据。
86万+

被折叠的 条评论
为什么被折叠?



