sql >> Base de Datos >  >> RDS >> PostgreSQL

Biblioteca aritmética cifrada simple (SEAL) y la variable seal::Ciphertext

La respuesta corta es que no hay otras formas de acceder a los datos de texto cifrado en SEAL. El puntero devuelto por Ciphertext::data le dará acceso directo a los datos del texto cifrado y, en ese sentido, le permitirá realizar cualquier tipo de cálculo, p. convertir a una cadena legible por humanos si por alguna razón desea hacer eso.

Por supuesto, para hacer algo inteligible, debe conocer el diseño de datos del texto cifrado. En el esquema BFV, un texto cifrado consta de un par de polinomios (c0 , c1 ) con tamaño grande (coeff_modulus ) coeficientes. Dado que operar con polinomios con coeficientes tan grandes es inconveniente, SEAL 2.3.1 utiliza un coeff_modulus compuesto. y almacena tanto c0 y c1 módulo cada uno de los factores primos especificados en el coeff_modulus (denotar estos factores q1 ,q2 ,...,qk ). Cada qi cabe en una palabra de 64 bits, por lo que todos estos polinomios de 2k tienen coeficientes de tamaño de palabra.

El diseño de los datos del coeficiente del texto cifrado es el siguiente (contiguos en la memoria):

[ c0 módulo q1 ][ c0 mod q2 ]...[ c0 mod qk ][ c1 módulo q1 ][ c1 mod q2 ]...[ c1 mod qk ]

donde cada [ ci mod qj ] parece

[ c0 [0] mod qj ][ c1 [0] mod qj ]...[ cn-1 [0] mod qj ]

Aquí usé ci [k] para denotar el coeficiente de grado k de ci . Tenga en cuenta que cada coeficiente se almacena en un uint64_t .

Ciphertext::data devuelve un puntero al coeficiente constante de c0 polinomio con respecto al primer módulo en tu coeff_modulus , es decir, a c0 [0] módulo q1 . Además de estos datos de coeficiente, un texto cifrado contiene algunos otros campos que puede leer usando las funciones miembro.