OnmyojiAutoScript:一键解放双手的阴阳师智能自动化方案
2026/7/25 0:44:16
数据是AI时代的石油,但隐私法规(GDPR/个保法)要求"数据可用不可见"。隐私计算三大技术派系:**同态加密(HE)**在密文上计算、**安全多方计算(MPC)**多方联合计算不泄露各自数据、TEE硬件可信执行环境。本文将实现三者的核心算法和工程集成。
frompheimportpaillier# 生成密钥对public_key,private_key=paillier.generate_paillier_keypair()# 加密x,y=42,7enc_x=public_key.encrypt(x)enc_y=public_key.encrypt(y)# ★ 密文上直接计算!enc_sum=enc_x+enc_y# E(42+7) = E(49)enc_prod_scalar=enc_x*3# E(42×3) = E(126)enc_linear=enc_x*2+enc_y# E(42×2+7) = E(91)# 解密print(private_key.decrypt(enc_sum))# 49print(private_key.decrypt(enc_prod_scalar))# 126# ★ 不能做密文乘法(那是全同态的领域)# 应用场景:联邦学习中的安全梯度聚合# 各方加密梯度 → 服务器密文求和 → 解密得全局梯度# CKKS: 支持浮点数 + 密文乘法,用于AI推理# 使用Microsoft SEAL库# 加密AI模型权重importtensealasts context=ts.context(ts.SCHEME_TYPE.CKKS,poly_modulus_degree=8192,coeff_mod_bit_sizes=[60,40,40,60])context.global_scale=2**40context.generate_galois_keys()# 加密模型encrypted_weight=ts.ckks_tensor(context,model.weight)encrypted_bias=ts.ckks_tensor(context,model.bias)# ★ 密文推理!encrypted_input=ts.ckks_tensor(context,user_data)# 线性层: y = Wx + bencrypted_output=encrypted_weight.mm(encrypted_input)+encrypted_bias# ReLU用多项式近似: relu(x) ≈ 0.5x + 0.5|x|encrypted_relu=encrypted_output.polyval([0.5,0.5])# 简化的多项式近似# 解码result=encrypted_relu.decrypt()print(f"CKKS推理结果:{result}")# 局限:精度损失~0.1%,速度慢1000ximportrandomdefsecret_share(secret,n_parties=3,field=2**61-1):"""Shamir秘密共享:(t,n)门限方案"""# 至少t+1方才能重构秘密t=1# 2-of-3# 随机多项式: f(x) = secret + a1*x + a2*x^2 + ...coeffs=[secret]+[random.randint(1,field-1)for_inrange(t)]# 每方获得一个点 (i+1, f(i+1))shares=[]foriinrange(n_parties):x=i+1y=sum(c*(x**j)forj,cinenumerate(coeffs))%field shares.append((x,y))returnsharesdefsecret_reconstruct(shares,field=2**61-1):"""拉格朗日插值恢复秘密"""secret=0fori,(xi,yi)inenumerate(shares):# 拉格朗日基多项式在x=0处的值li_0=1forj,(xj,_)inenumerate(shares):ifi!=j:li_0=(li_0*(0-xj)*pow(xi-xj,-1,field))%field secret=(secret+yi*li_0)%fieldreturnsecret# 测试secret=12345shares=secret_share(secret)print(f"Shares:{shares}")# 任意2方可恢复recovered=secret_reconstruct(shares[:2])print(f"Recovered:{recovered}")# 12345# SPDZ: 离线预计算 + 在线计算分离# 核心:Beaver三元组 (a,b,c=ab) 用于乘法classSPDZComputation:def__init__(self,n_parties=3,field=2**61-1):self.n=n_parties self.field=field self.triples=[]# Beaver Triples池defgenerate_triple(self):"""离线:生成Beaver Triples"""a=random.randint(0,self.field-1)b=random.randint(0,self.field-1)c=(a*b)%self.field# 秘密共享a,b,ca_shares=secret_share(a,self.n)b_shares=secret_share(b,self.n)c_shares=secret_share(c,self.n)self.triples.append((a_shares,b_shares,c_shares))defsecure_multiply(self,x_shares,y_shares):"""在线:安全乘法(不泄露x,y)"""a_shares,b_shares,c_shares=self.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掩码)d=secret_reconstruct(list(enumerate(d_shares,1)))e=secret_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.fieldifi==0:zi=(zi+d*e)%self.field# 只有一方加d·ez_shares.append((i+1,zi))returnz_shares# z = x·y的秘密共享// SGX Enclave: 加密内存区域,OS/VMM不可见#include"sgx_eid.h"#include"sgx_urts.h"// 不可信代码(主程序)intmain(){sgx_enclave_id_teid;sgx_status_tret;// 创建Enclaveret=sgx_create_enclave("enclave.signed.so",SGX_DEBUG_FLAG,NULL,NULL,&eid,NULL);// 调用Enclave内的函数(加密通道)intresult;ret=ecall_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*plaintext=decrypt(encrypted_input,size);// 2. 执行计算*result=ai_model_inference(plaintext);// 3. 加密输出uint8_t*encrypted_output=encrypt(result);// 结果通过安全通道返回returnSGX_SUCCESS;}# 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:"8Gi"volumeMounts: - name: encrypted-storage mountPath: /data# 加密存储| 技术 | 安全性 | 性能开销 | 适用场景 |
|---|---|---|---|
| HE (Paillier) | 算法安全 | 100-1000x | 聚合统计/梯度求和 |
| HE (CKKS) | 算法安全 | 1000-10000x | AI密文推理 |
| MPC (SPDZ) | 信息论安全 | 10-100x | 联合建模/隐私SQL |
| TEE (SGX/TDX) | 硬件信任 | <5% | 数据中台/机密计算 |
隐私计算选型指南: