Secure Outsourced Matrix Computation
二.准备工作
同态加密
密文包装技术
线性变换

例如

三.基于同态加密的安全矩阵乘法
矩阵乘法的置换
$\sigma$ 矩阵的行向左旋转
$\tau$ 矩阵的列向上旋转
$\phi$ 矩阵的整列向左旋转
$\psi$ 矩阵的整行向上旋转



矩阵编码方法
把矩阵转换为一个向量序列

a和A是同构的,故对二者的操作是等价的
3.3压缩密文上的矩阵乘法
调整排列
表示 $\sigma$ $\tau$ $\phi$ $\psi$ 的矩阵


同态矩阵乘法


改进
主要对旋转次数进行了改进


其中 ai,j

是重复的
四.同态矩阵计算的高级运算
压缩密文上的矩阵转置




矩形矩阵乘法
矩形矩阵乘法的改进
A是l*d的,并且d|l

这个公式表达的是对B分块分别和A计算,然后再把计算的结果合并起来


转换成了方阵的乘法
同态矩形矩阵乘法

在累加过程中,使用到了归并来优化。
从d/l到log(d/l)
并行矩阵计算
HEMAt/HEMatrix.cpp/HEmatmul_Parallel
void HEmatrix::HEmatmul_Parallel(Ciphertext& res, Ciphertext& Actxt, Ciphertext& Bctxt, ZZX**& Initpoly, ZZX*& shiftpoly){
Ciphertext* Actxts = new Ciphertext[HEmatpar.dim];
Ciphertext* Bctxts = new Ciphertext[HEmatpar.dim];
//! 1. Generate the initial ciphertexts
genInitCtxt_Parallel(Actxts[0], Bctxts[0], Actxt, Bctxt, Initpoly);
//! 2. Column shifting of Actxt[0], Row shifting of Bctxt[0]
long unit = HEmatpar.dim * HEmatpar.nbatching;
NTL_EXEC_RANGE(HEmatpar.dim1, first, last);
for(int i = first; i < last; ++i){
long i1 = (i + 1);
shiftBycols_Parallel(Actxts[i1], Actxts[0], i1, shiftpoly);
Bctxts[i1] = scheme.leftRotate(Bctxts[0], unit * (i1));
}
NTL_EXEC_RANGE_END;
//! 3. Hadamard mult : Actxts[0] * Bctxts[0] + ... + Actxts[d-1] * Bctxts[d-1]
HEmatmul_Hadamard(res, Actxts, Bctxts, HEmatpar.dim);
delete[] Actxts;
delete[] Bctxts;
}
浙公网安备 33010602011771号