PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Simple Encrypted Arithmetic Library (SEAL) e la variabile seal::Ciphertext

La risposta breve è che non ci sono altri modi per accedere ai dati del testo cifrato in SEAL. Il puntatore restituito da Ciphertext::data ti darà accesso diretto ai dati del testo cifrato e in tal senso ti consentirà di eseguire qualsiasi tipo di calcolo su di esso, ad es. la conversione in una stringa leggibile dall'uomo se per qualche motivo vorresti farlo.

Ovviamente per fare qualcosa di intelligibile è necessario conoscere il layout dei dati del testo cifrato. Nello schema BFV un testo cifrato è costituito da una coppia di polinomi (c0 , c1 ) con grande (dimensione coeff_modulus ) coefficienti. Poiché operare su polinomi con coefficienti così grandi è scomodo, SEAL 2.3.1 utilizza invece un coeff_modulus composito e memorizza entrambi c0 e c1 modulo ciascuno dei fattori primi specificati nel coeff_modulus (indica questi fattori q1 ,q2 ,...,qk ). Ogni qi si inserisce in una parola a 64 bit, quindi tutti questi 2k polinomi hanno coefficienti di dimensione della parola.

Il layout dei dati del coefficiente del testo cifrato è il seguente (contiguo in memoria):

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

dove ogni [ ci mod qj ] assomiglia a

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

Qui ho usato ci [k] per indicare il coefficiente di grado k di ci . Nota che ogni coefficiente è memorizzato in un uint64_t .

Ciphertext::data restituisce un puntatore al coefficiente costante di c0 polinomio rispetto al primo modulo nel tuo coeff_modulus , ovvero in c0 [0] mod q1 . Oltre a questi dati sui coefficienti, un Ciphertext contiene alcuni altri campi che puoi leggere utilizzando le funzioni membro.