一、理论基础-PSI
之前参加了隐语第2期,对隐语SecretFlow框架有了大致的了解,这次参加隐语第4期,学习下PSI和PIR。
一、PSI定义
首先介绍PSI的定义,PSI(隐私集合求交,Private Set Intersection即PSI)是安全多方计算(Multi-Party Computation,MPC)领域的一类专有协议,针对两个或以上参与者之间私有集合共同计算集合交集,参与者之间只能看到共同交集的内容,而无法看到交集以外的内容,从而保证参与者交集以外元素信息的泄露。
二、分类
在分类上,根据参与者数量不同,一般分为两方和多方,两方只需保证两者的交集元素信息可共同计算即可,而多方则需保证所有参与者之间的交集元素可见,其中任意两者的交集元素信息是不包含在PSI内的。
根据对交集的重解释下可分为传统交集PSI、阈值交集PSI、超阈值交集PSI
另外,如果从敌手行为方式来分的话,还可以分为半诚实安全PSI协议、恶意安全PSI协议,这两个敌手行为方式基本是密码学分析安全性经常用的两种模型。
- 半诚实安全:参与者在交互时能够严格遵守并执行双方的协议,但会主动收集和分析协议消息
- 恶意安全:攻击者可任意偏离协议规则执行协议。
目前在两方半诚实安全PSI协议中有三个问题:
-
隐藏非交集元素。在 PSI 协议中,任何非交集的元素(即集合 X X X 和 Y Y Y中 X ∩ Y X∩Y X∩Y 的元素)都必须对对方保持隐私。这要求协议能够有效隐藏非交集元素的内容,防止它们被推断或计算。如果只是仅简单地传输数据进行比较地话,攻击者可能通过暴力攻击如穷举法或数据推测来恢复非交集元素,造成数据泄露,特别是对一些低熵数据(身份证号、手机号等),这种攻击成功率很高。可以引入单项哈希函数、伪随机函数、差分隐私等来避免非交集元素信息泄露
单向哈希函数:- 将元素通过加密哈希映射到随机值,以隐藏其原始内容。
- 哈希函数的单向性能够确保对方无法反推出原始数据。
伪随机加密:
- 使用伪随机生成器对非交集元素加密,增加其不可预测性。
差分隐私结合:
- 对非交集元素的处理加入噪声,降低推断可能性。
-
确保只计算交集元素。在进行交集计算时,需要满足3个条件,一是在密码学安全的前提下,协议需要确保只有相等的而元素才能被标记为交集;二是在交集计算过程中要避免附加信息泄露,不能泄露元素的额外属性或关联信息;三是要避免参与方伪造数据进行攻击,破坏交集的真实性和机密性。一般也有以下三种方法:
基于 Diffie-Hellman 密钥交换的比较:
- 通过加密和交换密钥确保交集元素的验证,仅当密钥匹配时才能揭示相等性。
基于 Oblivious PRF(OPRF) 的比较:
- 使用 OPRF 对每个元素进行伪随机映射,然后比较映射值是否相等。
- 这种方法避免泄露原始值,且计算高效。
零知识证明:
- 双方可通过零知识证明协议证明交集元素的相等性,而无需披露其内容。
-
效率问题。这个问题基本也是密码学面临的通用问题,目前密码学在实际应用中经常面临安全性和效率成本的平衡问题,既要适用于大规模数据集,能够处理百万甚至数十亿级别的数据,还要能够高效计算,降低通信开销。不同的角度也有不同的方法。
计算复杂度:Cuckoo Hashing 优化:- 使用 Cuckoo 哈希将数据映射到多个小的哈希桶中,仅比较桶内元素。
- 减少了不必要的比较次数,提高效率。
通信开销:基于 OT-extension 的方法:
- 使用 OT-extension(如 IKNP 协议)减少 Oblivious Transfer 的通信开销。
计算效率:并行计算和硬件加速:
- 使用并行化的计算框架或硬件加速(如 GPU 或 FPGA)提高协议的计算速度。
三、技术路线
接下来是实现PSI的三个基本路线
1:基于Hash的PSI
原理:先利用哈希函数对输入数据进行转换,再通过参与者之间的交互式比较,得到哈希值相等的交集元素,算法如下:
输入:参与方A拥有的集合 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn,参与方B拥有的集合 y 1 , y 2 , . . . , y n y_1,y_2,...,y_n y1,y2,...,yn.
输出:集合的交集
输入:参与方 A 拥有的集合 x 1 , x 2 , . . . , x n ,参与方 B 拥有的集合 y 1 , y 2 , . . . , y n . 输出:集合的交集 1 、 A 和 B 协商一个共同的哈希函数 2 、 A 和 B 分别对各自的输入执行哈希运算,即 U = H ( x 1 ) , . . . , H ( x n ) 、 V = H ( y 1 ) , . . . , H ( y n ) 。 3 、 A 将 U 发送给 B ; B 将 V 发送给 A 。 4 、 A 判断 H ( x i ) 和 H ( y i ) 是否相等。 5 、 B 判断 H ( y i ) 和 H ( x i ) 是否相等。 6 、如果哈希值相等,则 A 和 B 分别输出相等元素。 \begin{align*} &输入:参与方A拥有的集合x_1,x_2,...,x_n,参与方B拥有的集合y_1,y_2,...,y_n.\\ &输出:集合的交集\\ &1、A和B协商一个共同的哈希函数 \\ &2、A和B分别对各自的输入执行哈希运算,即U=H(x_1),...,H(x_n)、V=H(y_1),...,H(y_n)。\\ &3、A将U发送给B;B将V发送给A。\\ &4、A判断H(x_i)和H(y_i)是否相等。\\ &5、B判断H(y_i)和H(x_i)是否相等。\\ &6、如果哈希值相等,则A和B分别输出相等元素。\\ \end{align*} 输入:参与方A拥有的集合x1,x2,...,xn,参与方B拥有的集合y1,y2,...,yn.输出:集合的交集1、A和B协商一个共同的哈希函数2、A和B分别对各自的输入执行哈希运算,即U=H(x1),...,H(xn)、V=H(y1),...,H(yn)。3、A将U发送给B;B将V发送给A。4、A判断H(xi)和H(yi)是否相等。5、B判断H(yi)和H(xi)是否相等。6、如果哈希值相等,则A和B分别输出相等元素。
这种方法的优势是计算速度很快,只需哈希做比较即可,但只适用于高熵即无序混乱没有规律的数据,现实中大多数数据往往是有规律性的低熵数据,如身份证号、手机号、地址等。安全性上不够高,也无法防止暴力攻击,如果有攻击者通过伪造数据进行哈希比较那么就能推测出对方的数据。此外在通信上存在安全问题,如果遇到中间人攻击,也可能会泄露数据。
2:基于Diffie-Hellman Key Exchange的PSI
原理:利用Diffie-Hellman密钥交换协议在不安全的信道中协商一个会话密钥,并用该密钥加密通信内容。也就是双重加密,在哈希函数加密元素的基础上,再利用会话密钥再进行一次加密来保证这个会话信息的安全。算法如下:
输入:参与方 A 拥有的集合 x 1 , x 2 , . . . , x n ,参与方 B 拥有的集合 y 1 , y 2 , . . . , y n , A 和 B 协商出的一个共同的哈希函数 H 输出:集合的交集 1 、 A 生成密钥 a ,并对自己的数据执行哈希运算,得到 H ( x 1 ) , . . . , H ( x n ) 。 2 、 B 生成密钥 b ,并对自己的数据执行哈希运算,得到 H ( y 1 ) , . . . , H ( y n ) 。 3 、 A 计算 U = H ( x 1 ) a , . . . , H ( x n ) a ,并将 U 发送给 B 。 4 、 B 计算 V = H ( y 1 ) b , . . . , H ( y n ) b 和 U ′ = H ( x 1 ) a b , . . . , H ( x n ) a b ,并将 V 和 U ′ 发送给 A 。 5 、 A 计算 V ′ = H ( y 1 ) b a , . . . , H ( y n ) b a 。 6 、 A 判断 H ( x i ) a b 和 H ( y i ) b a 是否相等。 7 、如果计算值相等,则 A 和 B 分别输出相等元素。 \begin{align*} &输入:参与方A拥有的集合x_1,x_2,...,x_n,参与方B拥有的集合y_1,y_2,...,y_n,A和B协商出的一个共同的哈希函数H\\ &输出:集合的交集\\ &1、A生成密钥a,并对自己的数据执行哈希运算,得到H(x_1),...,H(x_n)。\\ &2、B生成密钥b,并对自己的数据执行哈希运算,得到H(y_1),...,H(y_n)。\\ &3、A计算U=H(x_1)^a,...,H(x_n)^a,并将U发送给B。\\ &4、B计算V=H(y_1)^b,...,H(y_n)^b和U^{'}=H(x_1)^{ab},...,H(x_n)^{ab},并将V和U^{'}发送给A。\\ &5、A计算V^{'}=H(y_1)^{ba},...,H(y_n)^{ba}。\\ &6、A判断H(x_i)^{ab}和H(y_i)^{ba}是否相等。\\ &7、如果计算值相等,则A和B分别输出相等元素。\\ \end{align*} 输入:参与方A拥有的集合x1,x2,...,xn,参与方B拥有的集合y1,y2,...,yn,A和B协商出的一个共同的哈希函数H输出:集合的交集1、A生成密钥a,并对自己的数据执行哈希运算,得到H(x1),...,H(xn)。2、B生成密钥b,并对自己的数据执行哈希运算,得到H(y1),...,H(yn)。3、A计算U=H(x1)a,...,H(xn)a,并将U发送给B。4、B计算V=H(y1)b,...,H(yn)b和U′=H(x1)ab,...,H(xn)ab,并将V和U′发送给A。5、A计算V′=H(y1)ba,...,H(yn)ba。6、A判断H(xi)ab和H(yi)ba是否相等。7、如果计算值相等,则A和B分别输出相等元素。
这种方法的安全性是基于Diffie-Hellman的离散对数难题,在通信安全性上是有保障的。
成本:
- 计算开销:因为每个元素都要进行模幂运算( g x ⋅ a g^{x·a} gx⋅a mod p p p),随着集合大小的增加,指数计算次数呈线性增长,成本较大
- 通信成本:交换数据量与参与者所拥有的集合大小呈线程关系,计算复杂度一般是 O ( n ) O(n) O(n)级
目前这种方法也是使用比较多的。但是依然无法防止伪造数据的猜测碰撞攻击。此外,当参与者所拥有的数据量不平衡时,对于较大集合的参与者来说,效率可能比较低。
3、基于OPRF的PSI
在OPRF之前先讲下基于OT(Oblivious Transfer,不经意传输)的PSI。
OT最初在1981年由Rabin提出来时,是为了解决如下问题产生的:
Alice 拥有秘密 S A S_A SA,Bob 拥有秘密 S B S_B SB。Alice 和 Bob 想要交换秘密,要求两方都有可能得到秘密并且秘密拥有方不知道对方是否得到秘密。简单来说,在A向B传输时传输多条数据,实现A不知道B选了什么,B除了要获取的消息外,不知道A所传输的其他内容。
当参与方A和参与方B分别只拥有一个元素时,此时的隐私集合求交就变成了隐私等值比较;在不泄露用户隐私的情况下,比较双方持有的元素是否相等。假设A拥有 x = 010 x=010 x=010,B拥有 y = 001 y=001 y=001,隐私等值比较协议能够在不泄露各自输入的条件下比较 x = y x=y x=y这个等式是否成立。在仅有一个元素的情况下进行等值比较的核心思想是通过OT协议,对 x x x和 y y y进行逐比特位比较。
算法如下:
输入:参与方 A 拥有 x = 010 ,参与方 B 拥有 y = 001 ,且 x 和 y 的比特串长度均为 λ , k 为安全参数 输出:判断 x = y 是否成立 1 、 B 为数据的每一位生成两个长度为 k 比特的字符串(分别对应 0 和 1 ,简称比特串),即 λ 个字符串对。 2 、 A 对需要比较的字符串 x 中的每一位使用 O T 协议,不经意地获取 B 地每个字符串对中地一个长度为 k 地比特串。 3 、 A 对收到的 λ 个比特串做异或操作,得到字符串 K x 。 4 、 B 对其待比较字符串 y 中的每一位执行异或操作,得到字符串 K y 并发送给 A 。 5 、 A 比较 K x 和 K y 。 6 、如果 K x = K y 成立,则 x = y 成立,否则 x = y 不成立。 \begin{align*} &输入:参与方A拥有x=010,参与方B拥有y=001,且x和y的比特串长度均为λ,k为安全参数\\ &输出:判断x=y是否成立\\ &1、B为数据的每一位生成两个长度为k比特的字符串(分别对应0和1,简称比特串),即λ个字符串对。\\ &2、A对需要比较的字符串x中的每一位使用OT协议,不经意地获取B地每个字符串对中地一个长度为k地比特串。\\ &3、A对收到的λ个比特串做异或操作,得到字符串K_x。\\ &4、B对其待比较字符串y中的每一位执行异或操作,得到字符串K_y并发送给A。\\ &5、A比较K_x和K_y。\\ &6、如果K_x=K_y成立,则x=y成立,否则x=y不成立。\\ \end{align*} 输入:参与方A拥有x=010,参与方B拥有y=001,且x和y的比特串长度均为λ,k为安全参数输出:判断x=y是否成立1、B为数据的每一位生成两个长度为k比特的字符串(分别对应0和1,简称比特串),即λ个字符串对。2、A对需要比较的字符串x中的每一位使用OT协议,不经意地获取B地每个字符串对中地一个长度为k地比特串。3、A对收到的λ个比特串做异或操作,得到字符串Kx。4、B对其待比较字符串y中的每一位执行异或操作,得到字符串Ky并发送给A。5、A比较Kx和Ky。6、如果Kx=Ky成立,则x=y成立,否则x=y不成立。
采用OT协议在A和B之间不经意地传输数据,A(B)无法知道B(A)所拥有的数据。同时,应为采用异或操作得到B的字符串,A也无法反推出B的数据。
虽然借助OT协议能够显著提高PSI过程中的安全性,但也带来了效率低下的问题。例如,当两个参与方分别拥有n个数据时,如果借助隐私等值比较来实现n个数据间的PSI,那么就需要比较 O ( n 2 ) O(n^2) O(n2)次,并且每一次比较时都需要使用λ次OT协议来不经意地传输数据,计算开销显然是非常大的。
为了减少OT协议使用的次数,可以采用不经意伪随机函数(Oblivious Pseudo Random Function,OPRF)来构造隐私等值比较协议。将输入数据的二进制看作一个整体,在每次比较时只需要使用一次OPRF即可实现隐私等值比较。与每次比较使用λ次OT协议相比,OPRF通过不限制参与方输入字符的长度,从根本上减少了OT的使用次数。
接收方输入数据 x i x_i xi,发送方输入密钥 k i k_i ki,在OPRF执行完毕后,接收方会收到 x i x_i xi的伪随机函数值,记为 F ( k i , x i ) F(k_i,x_i) F(ki,xi)。接收方能够在密钥 k i k_i ki的作用下,对其输入数据 y i y_i yi直接进行计算,产生 F ( k i , y i ) F(k_i,y_i) F(ki,yi)并发送给接收方。接收方通过比较 F ( k i , x i ) F(k_i,x_i) F(ki,xi)和 F ( k i , y i ) F(k_i,y_i) F(ki,yi),即可实现隐私等值比较。在该过程中,接收方只能获取 F ( k i , x i ) F(k_i,x_i) F(ki,xi),对密钥 k i k_i ki一无所知;同时,发送方对输入数据 x i x_i xi也一无所知。如果 x ≠ y x≠y x=y,那么 f ( k i , y i ) f(k_i,y_i) f(ki,yi)对接收方来说是随机的。
这里基于KKRT16 [ 1 ] ^{[1]} [1]的文章扩展下OPRF。这部分内容需要一些基础知识~,这篇文章里,作者提出了一种方法BaRK-OPRF(batched,related-key OPRF)
Oblivious Pseudo-Random Functions(OPRF),是一种改进的OPRF协议,基于IKNP OT-extension框架的优化,目标是在接收方能够计算 F ( s , r ) F(s,r) F(s,r)的情况下:
- 发送方拥有种子 s s s,从而能够评估伪随机函数$ F(s,\cdot)$的任何值;
- 接收方仅能获取其选择输入 r r r 对应的伪随机函数值$ F(s,r)$,而无法推断其他值。
原理:
- OT-extension 框架:
- 利用 IKNP OT-extension 扩展初始 OT 实例
- 接收方通过选择位 r r r 生成矩阵 T T T 和 U U U,满足:$ t_j \oplus u_j = r_j \cdot 1_k$
- 发送方选择随机种子 s s s,并通过 OT 交互获取矩阵 Q Q Q,其中: q j = t j ⊕ [ r j ⋅ s ] q_j = t_j \oplus [r_j \cdot s] qj=tj⊕[rj⋅s]
- 伪随机函数计算:
- 使用哈希函数 H H H 计算伪随机值: F ( ( q j , s ) , r ) = H ( q j ⊕ [ C ( r ) ⋅ s ] ) F((q_j, s), r) = H(q_j \oplus [C(r) \cdot s]) F((qj,s),r)=H(qj⊕[C(r)⋅s])
- 伪随机编码:
- 替代传统错误校验码的伪随机编码 C ( r ) C(r) C(r),满足最低汉明距离要求,从而提供安全性。
安全性上,发送方无法得知接收方的选择输入 r r r,接收方只能获得单个伪随机函数输出,无法推断其他值。
依赖假设:哈希函数的相关性鲁棒性和伪随机编码的汉明距离安全性。
在上述OPRF的隐私等值比较中,利用一次OPRF协议可以取代每次比较时使用λ次OT协议,效率得到提升。但是在n个数据间进行求交操作时,将接收方的每个数据和发送方的每个数据通过利用一次OPRF协议进行隐私比较的方式,得到两个集合的交集,其比较次数仍为 O ( n 2 ) O(n^2) O(n2)。
可以结合布谷鸟哈希,利用OPRF思想,能够将隐私集合求交的计算复杂度降低到 O ( n ) O(n) O(n)级。
算法如下:
输入:参与方 A 持有的一组输入 X ,参与方 B 持有的一组输入 Y ,其中 ∣ X ∣ = ∣ Y ∣ = n ; A 和 B 共同选择的 3 个哈希函数 h 1 、 h 2 、 h 3 。 输出:集合的交集 1 、 B 对其持有的 n 个元素使用布谷鸟哈希,并入 1.2 n 个桶与一个大小为 s 的储藏桶中; B 构造假数据,将这些桶和储藏桶都填满,使每个桶中均有一个元素,且储藏桶中有 s 个元素。 2 、 A 产生 1.2 n + s 个 O P R F 密钥 k i 。 3 、 B 作为接收方,为其桶中的每一个元素执行 O P R F 。对于 B 的输入数据来说,如果 y 被放在 i 号桶中,则获得 F ( k i , y i ) ;如果 y 被放在储藏桶中的第 j 个位置,则获得 F ( k 1.2 n + j , y 1.2 n + j ) 。 4 、 A 作为发送方,为其输入 x 任意地计算伪随机函数 F ( k i , ⋅ ) ,得到以下两个集合: H = F ( k h i ( x ) ) ∣ x ∈ X , i ∈ 1 , 2 , 3 S = F ( k 1.2 n + j , x ) ∣ x ∈ X , j ∈ 1 , 2 , . . . , s 5 、 A 将集合 H 和集合 S 中地元素打乱,并发送给 B 。 6 、对于 B 来说,如果一个元素 y 被映射到储藏桶中,则 B 可以在集合 S 中查找是否包含 y 对应的 O P R F 输出;否则,就在集合 H 中查找。 7 、 B 通过查找地方式得到 X 与 Y 的交集 \begin{align*} &输入:参与方A持有的一组输入X,参与方B持有的一组输入Y,其中|X|=|Y|=n;A和B共同选择的3个哈希函数h_1、h_2、h_3。\\ &输出:集合的交集\\ &1、B对其持有的n个元素使用布谷鸟哈希,并入1.2n个桶与一个大小为s的储藏桶中;B构造假数据,将这些桶和储藏桶都填满,使每个桶中均有一个元素,且储藏桶中有s个元素。\\ &2、A产生1.2n+s个OPRF密钥k_i。\\ &3、B作为接收方,为其桶中的每一个元素执行OPRF。对于B的输入数据来说,如果y被放在i号桶中,则获得F(k_i,y_i);如果y被放在储藏桶中的第j个位置,则获得F(k_{1.2n+j},y_{1.2n+j})。\\ &4、A作为发送方,为其输入x任意地计算伪随机函数F(k_i,\cdot),得到以下两个集合:\\ &H={F(k_{h_{i}(x)})|x∈X,i∈{1,2,3}}\\ &S={F(k_{1.2n+j},x)|x∈X,j∈{1,2,...,s}}\\ &5、A将集合H和集合S中地元素打乱,并发送给B。\\ &6、对于B来说,如果一个元素y被映射到储藏桶中,则B可以在集合S中查找是否包含y对应的OPRF输出;否则,就在集合H中查找。\\ &7、B通过查找地方式得到X与Y的交集\\ \end{align*} 输入:参与方A持有的一组输入X,参与方B持有的一组输入Y,其中∣X∣=∣Y∣=n;A和B共同选择的3个哈希函数h1、h2、h3。输出:集合的交集1、B对其持有的n个元素使用布谷鸟哈希,并入1.2n个桶与一个大小为s的储藏桶中;B构造假数据,将这些桶和储藏桶都填满,使每个桶中均有一个元素,且储藏桶中有s个元素。2、A产生1.2n+s个OPRF密钥ki。3、B作为接收方,为其桶中的每一个元素执行OPRF。对于B的输入数据来说,如果y被放在i号桶中,则获得F(ki,yi);如果y被放在储藏桶中的第j个位置,则获得F(k1.2n+j,y1.2n+j)。4、A作为发送方,为其输入x任意地计算伪随机函数F(ki,⋅),得到以下两个集合:H=F(khi(x))∣x∈X,i∈1,2,3S=F(k1.2n+j,x)∣x∈X,j∈1,2,...,s5、A将集合H和集合S中地元素打乱,并发送给B。6、对于B来说,如果一个元素y被映射到储藏桶中,则B可以在集合S中查找是否包含y对应的OPRF输出;否则,就在集合H中查找。7、B通过查找地方式得到X与Y的交集
在这个算法里,集合H的大小为3n,集合S的大小为sn,因此A和B之间的通信开销为(s+3)n,比较计算的复杂度将为 O ( n ) O(n) O(n)
四、应用
比较简单的一个就是黑白名单的对比,在多个组织之间通过PIS来对比验证黑名单(欺诈账户列表)、白名单合法用户,而无需泄露各自的信息。
也可以通过PSI来进行数据库的撞库,来进行比如密码是否匹配一致。
比较大的场景应用是联邦学习数据集的处理,在联邦学习中,通常需要受限对数据进行对齐,而PSI及其变体就可以在联邦学习的数据对齐的过程中,不透漏给对方额外信息的情况下对齐数据,从而保护隐私。
另外一个应用是在可搜索加密场景中保护查询模式和访问模式,可搜索加密允许用户将加密数据上传后,向不可信的服务器发起查询请求,在密文环境中进行搜索,并保证查询的正确性和数据的安全性。但实际上,在交互过程中或多或少会泄漏一些查询模式和访问模式给服务器来完成查询或者加快查询任务速度,目前许多工作表明,只要有部分的查询模式或访问模式,并对数据库有一部分的先验知识,云服务器就可以恢复用户的查询隐私或最终的结果。为了避免这个问题,就可以利用PSI的安全性来保护查询模式和访问模式
五、PSI和其他隐私计算技术结合
PSI严格上来说属于安全多方计算的内容,也可以和其他隐私计算技术结合起来进行互补,如差分隐私、TEE等。
1、安全求交集+差分隐私
通过差分隐私给元素信息添加噪音,在保护交集中的个体的同时但不影响交集整体的统计属性
2、安全求交集+可信执行环境
TEE是一种硬件隔离环境,能够在硬件级别的安全性
- TEE 创建 Salt(随机盐值):
- TEE 内部生成一个随机的 salt,用于对参与方的数据进行哈希操作。
- 该 salt 在 TEE 内部是安全的,未被外界泄露。
- 参与方对数据加盐后哈希:
- 各方使用 TEE 生成的 salt 对各自的数据集合进行哈希处理。
- 加盐哈希确保即使数据相同,外部无法直接推测出原始数据。
- TEE 内完成 PSI 计算:
- 各方将加盐后的哈希值上传到 TEE,TEE 内部通过比对哈希值完成 PSI 计算。
- 交集计算仅发生在 TEE 内,数据在 TEE 外部始终是加密或哈希形式。
- 结果返回参与方:
- 交集结果从 TEE 返回给参与方。
- TEE 可以配置为只返回交集统计信息(如交集大小),或返回完整的交集内容。
六、References
[1]Kolesnikov V, Kumaresan R, Rosulek M, et al. Efficient batched oblivious PRF with applications to private set intersection[C]//Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. 2016: 818-829.
相关文章:
一、理论基础-PSI
之前参加了隐语第2期,对隐语SecretFlow框架有了大致的了解,这次参加隐语第4期,学习下PSI和PIR。 一、PSI定义 首先介绍PSI的定义,PSI(隐私集合求交,Private Set Intersection即PSI)是安全多方计算&#x…...
C++学习0.2: RAII
引用: 【代码质量】RAII在C编程中的必要性_raii 在c中的重要性-CSDN博客 C RAII典型应用之lock_guard和unique_lock模板_raii lock-CSDN博客 前言: 常用的线程间同步/通信(IPC)方式有锁(互斥锁、读写锁、自旋锁)、…...
机器学习基础
了解机器学习的基本概念,如监督学习、无监督学习、强化学习、模型评估指标(准确率、召回率、F1分数等)。 机器学习(Machine Learning,ML)是人工智能(AI)的一个分支,它使计…...
传输层TCP_三次握手四次挥手的过程
三次握手四次挥手 三次握手 三次握手...
AI主流的生成式工作流框架
根据搜索结果,以下是一些2024年比较主流的生成式工作流框架: 1. LangChain:LangChain是一个用于构建生成式AI工作流的开发框架,它支持多种语言模型、工具、数据源及其他系统的集成。 2. DSPy:DSPy是一个生成式AI工作…...
【WRF后处理】WRF时区(UTC)需转化为北京时间(CST)!!!
目录 WRF运行时间标准注意事项-本地时区问题 输入数据:ERA5时间标准ERA5数据和WRF模型需要转换为北京时间!!!北京时间(CST)与协调世界时(UTC)的关系转换方法 参考 WRF运行时间标准 …...
Qt 2D绘图之五:图形视图框架的结构、坐标系统和框架间的事件处理与传播
参考文章链接: Qt 2D绘图之五:图形视图框架的结构和坐标系统 Qt 2D绘图之六:图形视图框架的事件处理与传播 图形视图框架的结构 在前面讲的基本绘图中,我们可以自己绘制各种图形,并且控制它们。但是,如果需要同时绘制很多个相同或不同的图形,并且要控制它们的移动、…...
游戏引擎学习第34天
仓库:https://gitee.com/mrxiao_com/2d_game #这天内容比较多 开场介绍 游戏开发行业的基础是使用C和C编程,这是当今几乎所有游戏的开发标准。市面上广受欢迎的游戏,如《使命召唤》或《侠盗猎车手》,它们的底层代码和引擎几乎无一例外地采…...
深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)
本文详细介绍模型训练完成后的压缩和优化技术:蒸馏、剪枝、量化。 文章目录 1. 知识蒸馏 (Knowledge Distillation)基本概念工作流程关键技术类型应用场景优势与挑战优势挑战 总结 2. 权重剪枝 (Model Pruning)基本原理二分类1. 非结构化剪枝(Unstructur…...
[在线实验]-RabbitMQ镜像的下载与部署
镜像下载 docker的rabbitmq镜像资源-CSDN文库 加载镜像 docker load --input rabbitmq.tar 给镜像打标签 这里发现镜像名为none,需要给镜像重命名下 docker tag [镜像id] [新镜像名称]:[新镜像标签] docker tag ebaf409ffbe2 rabbitmq:management 运行镜像…...
Netty 入门应用:结合 Redis 实现服务器通信
在上篇博客中,我们了解了 Netty 的基本概念和架构。本篇文章将带你深入实践,构建一个简单的 Netty 服务端,并结合 Redis 实现一个数据存取的示例。在这个场景中,Redis 作为缓存存储,Netty 作为服务端处理客户端请求。通…...
推荐 编译器c++
网页型 https://www.acgo.cn/playground C 在线工具 | 菜鸟工具 AcWing - 在线题库 ZJYYC在线测评系统 少儿编程竞赛在线学习 登录 - JOYSKID 余博士教编程_酷哥OJ_酷哥爱编程_酷哥创客AI编程 登录 - Luogu Spilopelia 软件型 DEV-c Dev C软件下载...
【新品发布】ESP32-P4开发板 —— 启明智显匠心之作,为物联网及HMI产品注入强劲动力
核心亮点: ESP32-P4开发板,是启明智显精心打造的一款高性能物联网开发板。它专为物联网项目及HMI(人机界面)产品而设计,旨在为您提供卓越的性能和稳定可靠的运行体验。 强大硬件配置: 双核400MHz RISC-V处…...
MeterSphere 使用脚本处理数据
1、前置/后置脚本 支持BeanShell(JSR223)、python、groovy、JavaScript脚本语言,推荐BeanShell(JSR223)。 在前置脚本中可以直接引用JMeter 预定义对象,例如: -- log:用于在脚本执行过程中打印日志 //打印“Hello World!”到info…...
如何获取谷歌新闻API密钥?
在信息获取和新闻传播领域,快速获取最新的新闻动态至关重要。谷歌新闻API为开发者提供了强大的工具,能够方便地集成全球各类新闻内容。通过使用该API,开发者可以实现对新闻的实时访问和管理,为用户提供丰富的信息服务。本文将指导…...
【全网最新】若依管理系统基于SpringBoot的前后端分离版本开发环境配置
目录 提前准备: 下载源代码 设置依赖 设置后台连接信息 运行后台 运行前端 安装npm依赖 启动前端 登录网页客户端 提前准备: 1、安装mysql 5以上就可以。 2、安装redis. 3、安装npm npm下载地址:https://nodejs.org/dist/v22.12…...
备赛蓝桥杯--算法题目(3)
1. 2的幂 231. 2 的幂 - 力扣(LeetCode) class Solution { public:bool isPowerOfTwo(int n) {return n>0&&n(n&(-n));} }; 2. 3的幂 326. 3 的幂 - 力扣(LeetCode) class Solution { public:bool isPowerOfT…...
如何解决 java.nio.charset.CoderMalfunctionError: 编码器故障错误问题?亲测有效的解决方法!
java.nio.charset.CoderMalfunctionError 是一个在 Java 中相对较少遇到的异常,通常与字符编码转换过程中的错误有关。当 Java 程序在进行字符编码转换时,遇到无法处理的字符或编码故障时,就会抛出该异常。 1. 问题描述 java.nio.charset.C…...
电气自动化 基于PLC控制的四路抢答器设计
摘要 本文描述了一款用三菱FX3U-48M可编程控制器设计的四路抢答器的系统构成、设计思路和功能。此抢答系统除了有基本抢答功能之外,还有计时、计算得分、亮灯提提示以及蜂鸣提醒功能。程序中设定答题时间,在主持人未按下开始抢答按钮之前,选…...
GA优化后的RBF神经网络
遗传算法(Genetic Algorithm, GA)优化后的RBF(Radial Basis Function)神经网络是一种结合进化算法与神经网络的混合模型,用于改进RBF神经网络的性能。以下是该模型的基本原理和相关公式: clear all close a…...
Scala:正则表达式
object test03 {//正则表达式def main(args: Array[String]): Unit {//定义一个正则表达式//1.[ab]:表示匹配一个字符,或者是a,或者是b//2.[a-z]:表示从a到z的26个字母中的任意一个//3.[A-Z]:表示从A到Z的26个字母中的任意一个//4.[0-9]:表示从0到9的10…...
vulnhub靶场之【hacksudo】1.0.1
前言 靶机:hacksudo 192.168.1.45 攻击:kali 192.168.1.16 都是虚拟机环境,桥接模式 主机发现 使用netdiscover或者arp-scan -l扫描 netdiscover -r 192.168.1.1/24信息收集 使用nmap扫描 因为看到2222是ssh服务,所以又扫…...
第4章:颜色和背景 --[CSS零基础入门]
在 CSS 中,颜色和背景属性是用于美化网页元素的重要工具。你可以通过多种方式定义颜色,并且可以设置元素的背景颜色、图像、渐变等。以下是关于如何在 CSS 中使用颜色和背景的一些关键点和示例。 1.颜色表示法 当然!以下是使用不同颜色表示…...
Python实现PBKDF2_SHA256加密密码
加密保存格式:pbkdf2_sha256$迭代次数$盐$哈希值 admin可能的结果:pbkdf2_sha256$10000$yzsusUJwrGfonwZzVxlnA$vgf/OgLf5C4wtQLtfNY9d68Hhxgv8eqZ0mwfxCqqeU import os import hashlib import base64 def password_encrypt(password, saltNone, iterations1000…...
React第十三节开发中常见问题之(视图更新、事件处理)
一、视图更新有哪些方案? 1、对于数据变量 正常的增删改查,只会让数据更新,但是不会触发 React 视图的更新; 如: <script lang"jsx">const baseTable [{name:Andy, age: 18, id: 1},{name:Jack, a…...
PyTorch 深度学习框架简介:灵活、高效的 AI 开发工具
PyTorch 深度学习框架简介:灵活、高效的 AI 开发工具 PyTorch 作为一个深度学习框架,以其灵活性、可扩展性和高效性广受欢迎。无论是在研究领域进行创新实验,还是在工业界构建生产级的深度学习模型,PyTorch 都能提供所需的工具和…...
Vue 3 中的计算属性(Computed Properties)详解
目录 Vue 3 中的计算属性(Computed Properties)详解 引言 什么是计算属性? 创建和使用计算属性 示例 1:基本用法 示例 2:带有 getter 和 setter 的计算属性 计算属性 vs 方法 Vue 3 中的计算属性(Co…...
RocketMQ 过滤消息 基于tag过滤和SQL过滤
RocketMQ 过滤消息分为两种,一种tag过滤,另外一种是复杂的sql过滤。 tag过滤 首先创建producer然后启动,在这里创建了字符串的数组tags。字符串数组里面放置了多个字符串,然后去发送15条消息。 15条消息随着i的增长,…...
AI开发: 知识图谱的初识,学会制作知识图谱- Python 机器学习
一、知识图谱的概念 知识图谱是一个通过图结构来表示和组织知识的工具,它将事物、概念和它们之间的关系以图的形式呈现出来,图中的节点代表实体(比如人物、地点、事件等),而边代表这些实体之间的各种关系(…...
windows系统的环境变量(系统变量)不能编辑可能是这个原因
有些电脑从开始菜单那搜索“环境变量”后是没法编辑系统变量的,只能从设置里面进”环境变量“来进行编辑。 可以观察到系统环境变量即便是点击到了,但还是无法进行编辑...
各种服务器使用 yum 安装 nginx
1. 在Red Hat Enterprise Linux (RHEL) 及其衍生版本(如CentOS, Oracle Linux, Rocky Linux, AlmaLinux)上安装Nginx的步骤如下: 安装前提条件 首先,确保系统已安装yum-utils工具,这将有助于管理软件包和仓库&#x…...
基于BesselJ函数,构建AI中的卷积神经网络之新型卷积核
原创:daode3056(daode1212) BesselJ函数,来自微分方程: 它有通解有以下形式: 就取J0--J5的函数图像,如下: 现取J1(x),也就是红色的这支,作新的函数: 这一函数的导数与不定积分如下:…...
容器镜像仓库
文章目录 1、docker hub1_注册2_登录3_创建容器镜像仓库4_在本地登录Docker Hub5_上传容器镜像6_下载容器镜像 2、harbor1_获取 docker compose二进制文件2_获取harbor安装文件3_获取TLS文件4_修改配置文件5_执行预备脚本6_执行安装脚本7_验证运行情况8_访问harborUI界面9_harb…...
qtcanpool 知 08:Docking
文章目录 前言口味改造后语 前言 很久以前,作者用 Qt 仿照前端 UI 设计了一个 ministack(https://gitee.com/icanpool/qtcanpool/blob/release-1.x/src/libs/qcanpool/ministack.h) 控件,这个控件可以折叠。部分用户体验后&#…...
车载VR可视化解决方案
车载VR可视化解决方案是通过融合跟踪用户头部运动的特殊预测算法与惯性测量数据而开发的。该系统将大范围虚拟现实跟踪技术与IMU传感器相结合,为VR和AR应用打造了一套全面的运动跟踪与渲染流程,极大地方便了虚拟现实头显制造商定制可视化流程。 该车载VR…...
hhdb数据库介绍(10-43)
安全 密码安全管理 密码安全管理为用户提供了对计算节点数据库用户与存储节点的连接用户、备份用户的密码有效期监控提醒。到期后自动提示用户修改密码以提升系统的安全性。 数据库用户密码 (一)密码修改 用户可以在“安全->密码安全管理->数据…...
【优选算法 二分查找】二分查找入门详解:二分查找 & 在排序数组中查找元素的第一个和最后一个位置
二分查找 题目描述 题目解析 暴力解法 我们可以从左往右遍历一次数组,如果存在 target 则返回数组的下标,否则返回 -1; 时间复杂度 O(N),因为没有利用数组有序的特点,每次比较只能舍弃一个要比较的数&…...
Python导入moviepy找不到editor 视频没有声音设置audio_codec参数
moviepy合成视频出错: 问题一:导入moviepy.editor找不到editor,No module named moviepy.editor问题二:合成的视频没有声音 问题一:导入moviepy.editor找不到editor,No module named moviepy.editor from …...
FreeSWITCH auto-rtp-bugs 研究
还在探索中... 抓一个现场的包, Fs 收 rtp 包正常,但 发 rtp 包有问题,比如上次 ts 是 1 万 ,而这次是 1000,并且居然没有 marker。百思不得解。 vars.xml 增加一个全局变量的配置: <X-PRE-PROCESS …...
TypeScript 在 React 中的应用
文章目录 前言一、为什么要在 React 中使用 TypeScript?二、如何在React中使用 TypeScript三、高级类型结语 前言 随着前端开发的复杂度不断提升,开发者对于代码质量、可维护性和开发效率的要求也日益增高。TypeScript 作为一种为 JavaScript 添加静态类…...
汇编和C语言访问存储器
一、汇编语言访问存储器 1、读存储器 LDR R1, [R2] 2、写存储器 STR R1, [R2] 二、C语言访问存储器 1、读存储器 data *ADDR; 2、写存储器 *ADDR data;...
14.3、特洛伊木马分析与防护
目录 特洛伊木马概念与分类特洛伊木马运行机制特洛伊木马植入技术特洛伊木马隐藏技术特洛伊木马存活技术特洛伊木马防范技术Rootkit是什么? 特洛伊木马概念与分类 病毒不具备传播能力,但是蠕虫具备 特洛伊木马运行机制 木马攻击过程主要分为五个部分: ① 寻找攻…...
SpringBoot 分层解耦
从没有分层思想到传统 Web 分层,再到 Spring Boot 分层架构 1. 没有分层思想 在最初的项目开发中,很多开发者并没有明确的分层思想,所有逻辑都堆砌在一个类或一个方法中。这样的开发方式通常会导致以下问题: 代码混乱࿱…...
不一样的CSS(4)--icon图标系列之svg
序言 上一节内容我们讲解了如何利用css去画一个五角星,其中包括了使用svg的方法,有些小伙伴们对svg的使用不是很了解,那么本节内容我们主要来讲一下,关于svg标签的的使用。 目录 序言一、svg的介绍二、安装SVG扩展插件三、SVG基…...
Go-知识依赖管理2
Go-知识依赖管理2 1. go.sum1.1 go.sum 文件记录1.2 生成1.3 校验1.4 校验和数据库2. 模块代理2.1 GOPROXY 介绍2.2 代理协议2.2.1 获取模块列表2.2.2 获取模块元素数据2.2.3 获取 go.mod 文件2.2.4 获取代码压缩包2.2.5 获取模块的最新可用版本2.2.6 下载过程2.3 观察下载步骤…...
el-select的搜索功能
el-select的相关信息: 最基本信息 v-model的值为当前被选中的el-option的 value 属性值 :label是选择器可以看到的内容 过滤搜索 普通过滤搜索 <el-selectv-model"selectedCountry"placeholder"请选择国家"filterable:loading"lo…...
批量将不同的工作簿合并到同一个Excel文件
批量将不同的工作簿合并到同一个Excel文件 下面是一个示例,展示如何批量将不同的工作簿合并到同一个Excel文件,并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下: 步骤 1: 安装必要的库 首先确保你已安装 pan…...
git遇见冲突怎么解决?
问: 回答:...
Spring和SpringBoot的关系和区别?
大家好,我是锋哥。今天分享关于【Spring和SpringBoot的关系和区别?】面试题。希望对大家有帮助; Spring和SpringBoot的关系和区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring和Spring Boot是两种相关但有所…...
python学习——字符串的编码和解码
在Python中,字符串的编码和解码是处理文本数据时非常重要的概念。以下是对字符串编码和解码的详细解释: 字符串编码 字符串编码是将字符串转换成字节序列的过程。Python中的字符串是Unicode编码的,所以在将字符串转换成字节序列时ÿ…...