Secure Outsourced Matrix Computation

二.准备工作

同态加密

密文包装技术

线性变换

alt text
例如
alt text

三.基于同态加密的安全矩阵乘法

矩阵乘法的置换

$\sigma$ 矩阵的行向左旋转
$\tau$ 矩阵的列向上旋转
$\phi$ 矩阵的整列向左旋转
$\psi$ 矩阵的整行向上旋转
alt text
alt text
alt text

矩阵编码方法

把矩阵转换为一个向量序列
alt text
a和A是同构的,故对二者的操作是等价的

3.3压缩密文上的矩阵乘法

调整排列

表示 $\sigma$ $\tau$ $\phi$ $\psi$ 的矩阵
alt text
alt text

同态矩阵乘法

alt text
alt text

改进

主要对旋转次数进行了改进
alt text
alt text
其中 ai,j
alt text
alt text是重复的

四.同态矩阵计算的高级运算

压缩密文上的矩阵转置

alt text
alt text
alt text
alt text

矩形矩阵乘法

矩形矩阵乘法的改进

A是l*d的,并且d|l
alt text

这个公式表达的是对B分块分别和A计算,然后再把计算的结果合并起来
alt text
alt text
转换成了方阵的乘法

同态矩形矩阵乘法

alt text
在累加过程中,使用到了归并来优化。
d/llog(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;
}

五.同态矩阵运算的实现

参数设置

矩阵运算的性能

posted @ 2026-03-14 12:47  JosephWater  阅读(1)  评论(0)    收藏  举报