How do you implement truncation in homomorphic encryption libraries like HELib or SEAL when no division operation is allowed?
I have two floating point numbers a=2.3,b=1.5
which I scale to integers with 2-digit precision. Hence my encoder looks basically like this encode(x)=x*10^2
. Assuming enc(x)
is the encryption function, then enc(encode(a))=enc(230)
and enc(encode(b))=enc(150)
.
Upon multiplication we obtain the huge value of a*b=enc(23*15)=enc(34500)
because the scaling factors multiply too. This means that my inputs grow exponentially unless I can truncate the result, so that trunate(enc(34500))=truncate(enc(345))
.
I assume such a truncation function is not possible because it cant be represented by a polynomial. Nonetheless, I wonder if there is any trick on how to perform this truncation mathematically or whether it is just an unsolved problem?