PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Biblioteca Aritmética Criptografada Simples (SEAL) e a variável seal::Ciphertext


A resposta curta é que não há outras maneiras de acessar os dados de texto cifrado no SEAL. O ponteiro retornado por Ciphertext::data lhe dará acesso direto aos dados de texto cifrado e, nesse sentido, permite que você faça qualquer tipo de cálculo nele, por exemplo. convertendo em uma string legível se por algum motivo você quiser fazer isso.

Claro que para fazer qualquer coisa inteligível você precisa conhecer o layout de dados do texto cifrado. No esquema BFV um texto cifrado consiste em um par de polinômios (c0 , c1 ) com grande (tamanho coeff_modulus ) coeficientes. Como operar em polinômios com coeficientes tão grandes é inconveniente, o SEAL 2.3.1 usa um coeff_modulus composto e armazena tanto c0 e c1 módulo cada um dos fatores primos especificados no coeff_modulus (denote esses fatores q1 ,q2 ,...,qk ). Cada qi cabe em uma palavra de 64 bits, então todos esses polinômios de 2k têm coeficientes de tamanho de palavra.

O layout de dados do coeficiente de texto cifrado é o seguinte (contíguo na memória):

[c0 mod q1 ][c0 mod q2 ]...[ c0 mod qk ][c1 mod q1 ][c1 mod q2 ]...[ c1 mod qk ]

onde cada [ci mod qj ] parece

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

Aqui eu usei ci [k] para denotar o grau k coeficiente de ci . Observe que cada coeficiente é armazenado em um uint64_t .

Ciphertext::data retorna um ponteiro para o coeficiente constante de c0 polinômio em relação ao primeiro módulo em seu coeff_modulus , ou seja, para c0 [0] mod q1 . Além desses dados de coeficiente, um texto cifrado contém alguns outros campos que você pode ler usando as funções de membro.