同态加密+安全多方计算+TEE:隐私计算完整方案 同态加密安全多方计算TEE隐私计算完整方案一、引言数据是AI时代的石油但隐私法规(GDPR/个保法)要求数据可用不可见。隐私计算三大技术派系**同态加密(HE)**在密文上计算、**安全多方计算(MPC)**多方联合计算不泄露各自数据、TEE硬件可信执行环境。本文将实现三者的核心算法和工程集成。二、同态加密(HE)2.1 Paillier半同态frompheimportpaillier# 生成密钥对public_key,private_keypaillier.generate_paillier_keypair()# 加密x,y42,7enc_xpublic_key.encrypt(x)enc_ypublic_key.encrypt(y)# ★ 密文上直接计算enc_sumenc_xenc_y# E(427) E(49)enc_prod_scalarenc_x*3# E(42×3) E(126)enc_linearenc_x*2enc_y# E(42×27) E(91)# 解密print(private_key.decrypt(enc_sum))# 49print(private_key.decrypt(enc_prod_scalar))# 126# ★ 不能做密文乘法那是全同态的领域# 应用场景联邦学习中的安全梯度聚合# 各方加密梯度 → 服务器密文求和 → 解密得全局梯度2.2 CKKS近似全同态# CKKS: 支持浮点数 密文乘法用于AI推理# 使用Microsoft SEAL库# 加密AI模型权重importtensealasts contextts.context(ts.SCHEME_TYPE.CKKS,poly_modulus_degree8192,coeff_mod_bit_sizes[60,40,40,60])context.global_scale2**40context.generate_galois_keys()# 加密模型encrypted_weightts.ckks_tensor(context,model.weight)encrypted_biasts.ckks_tensor(context,model.bias)# ★ 密文推理encrypted_inputts.ckks_tensor(context,user_data)# 线性层: y Wx bencrypted_outputencrypted_weight.mm(encrypted_input)encrypted_bias# ReLU用多项式近似: relu(x) ≈ 0.5x 0.5|x|encrypted_reluencrypted_output.polyval([0.5,0.5])# 简化的多项式近似# 解码resultencrypted_relu.decrypt()print(fCKKS推理结果:{result})# 局限精度损失~0.1%速度慢1000x三、安全多方计算(MPC)3.1 秘密共享importrandomdefsecret_share(secret,n_parties3,field2**61-1):Shamir秘密共享(t,n)门限方案# 至少t1方才能重构秘密t1# 2-of-3# 随机多项式: f(x) secret a1*x a2*x^2 ...coeffs[secret][random.randint(1,field-1)for_inrange(t)]# 每方获得一个点 (i1, f(i1))shares[]foriinrange(n_parties):xi1ysum(c*(x**j)forj,cinenumerate(coeffs))%field shares.append((x,y))returnsharesdefsecret_reconstruct(shares,field2**61-1):拉格朗日插值恢复秘密secret0fori,(xi,yi)inenumerate(shares):# 拉格朗日基多项式在x0处的值li_01forj,(xj,_)inenumerate(shares):ifi!j:li_0(li_0*(0-xj)*pow(xi-xj,-1,field))%field secret(secretyi*li_0)%fieldreturnsecret# 测试secret12345sharessecret_share(secret)print(fShares:{shares})# 任意2方可恢复recoveredsecret_reconstruct(shares[:2])print(fRecovered:{recovered})# 123453.2 SPDZ安全计算协议# SPDZ: 离线预计算 在线计算分离# 核心Beaver三元组 (a,b,cab) 用于乘法classSPDZComputation:def__init__(self,n_parties3,field2**61-1):self.nn_parties self.fieldfield self.triples[]# Beaver Triples池defgenerate_triple(self):离线生成Beaver Triplesarandom.randint(0,self.field-1)brandom.randint(0,self.field-1)c(a*b)%self.field# 秘密共享a,b,ca_sharessecret_share(a,self.n)b_sharessecret_share(b,self.n)c_sharessecret_share(c,self.n)self.triples.append((a_shares,b_shares,c_shares))defsecure_multiply(self,x_shares,y_shares):在线安全乘法不泄露x,ya_shares,b_shares,c_sharesself.triples.pop()# 1. 各方本地计算 d x - a, e y - bd_shares[(xi-ai)%self.fieldfor(_,xi),(_,ai)inzip(x_shares,a_shares)]e_shares[(yi-bi)%self.fieldfor(_,yi),(_,bi)inzip(y_shares,b_shares)]# 2. 重构d, e不泄露x,y因为用了随机a,b掩码dsecret_reconstruct(list(enumerate(d_shares,1)))esecret_reconstruct(list(enumerate(e_shares,1)))# 3. 各方本地计算: z c d·b e·a d·ez_shares[]foriinrange(self.n):zi(c_shares[i][1]d*b_shares[i][1]e*a_shares[i][1])%self.fieldifi0:zi(zid*e)%self.field# 只有一方加d·ez_shares.append((i1,zi))returnz_shares# z x·y的秘密共享四、TEE可信执行环境4.1 Intel SGX// SGX Enclave: 加密内存区域OS/VMM不可见#includesgx_eid.h#includesgx_urts.h// 不可信代码主程序intmain(){sgx_enclave_id_teid;sgx_status_tret;// 创建Enclaveretsgx_create_enclave(enclave.signed.so,SGX_DEBUG_FLAG,NULL,NULL,eid,NULL);// 调用Enclave内的函数加密通道intresult;retecall_secure_computation(eid,result,encrypted_input,input_size);sgx_destroy_enclave(eid);returnresult;}// 可信代码Enclave内intecall_secure_computation(int*result,uint8_t*encrypted_input,size_tsize){// ★ 在这个函数内内存是加密的// OS/VMM/DMA攻击都无法读取// 1. 解密输入密钥硬编码在Enclave中uint8_t*plaintextdecrypt(encrypted_input,size);// 2. 执行计算*resultai_model_inference(plaintext);// 3. 加密输出uint8_t*encrypted_outputencrypt(result);// 结果通过安全通道返回returnSGX_SUCCESS;}4.2 Confidential Containers# Kata Containers TEE: 容器级机密计算# 整个Pod运行在加密虚拟机中# runtime-class: kata-qemu-tdxapiVersion: v1 kind: Pod metadata: name: confidential-inference spec: runtimeClassName: kata-qemu-tdx# Intel TDX加密VMcontainers: - name: inference image: my-ai-model:encrypted# 加密镜像resources: limits: memory:8GivolumeMounts: - name: encrypted-storage mountPath: /data# 加密存储五、三大技术对比与选型技术安全性性能开销适用场景HE (Paillier)算法安全100-1000x聚合统计/梯度求和HE (CKKS)算法安全1000-10000xAI密文推理MPC (SPDZ)信息论安全10-100x联合建模/隐私SQLTEE (SGX/TDX)硬件信任5%数据中台/机密计算六、总结隐私计算选型指南简单聚合→ Paillier加法同态联合建模→ SPDZ安全多方计算AI推理→ TEE(首选) / CKKS(无硬件依赖)合规要求→ 组合方案(HETEE)