摘要
本文介绍如何使用小步大步(Baby-Step-Giant-Step,BSGS)加速同态加密的多项式求值,尽量减少密文和密文乘法的次数。
公式
假设我们需要求多项式 p ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n p(x)=a_0+a_1x+a_2x^2+\cdots+a_nx^n p(x)=a0+a1x+a2x2+⋯+anxn 在某一点 x x x 的值。
如果直接计算,需要计算 x 1 , x 2 , ⋯ , x n x^1,x^2,\cdots,x^n x1,x2,⋯,xn,需要 n n n次密文乘法。
即使使用Horner法则计算:
p ( x ) = ( ⋯ ( ( a n x + a n − 1 ) x + a n − 2 ) x + ⋯ ) x + a 0 p(x)=(\cdots((a_nx+a_{n-1})x+a_{n-2})x+\cdots)x+a_0 p(x)=(⋯((anx+an−1)x+an−2)x+⋯)x+a0
也需要 n n n次的密文乘法。
在同态加密中, a i a_i a<