Kort svar er, at der ikke er andre måder at få adgang til chiffertekstdataene i SEAL. Markøren returneret af Ciphertext::data
vil give dig direkte adgang til chiffertekstdataene og giver dig i den forstand mulighed for at lave enhver form for beregning på dem, f.eks. konvertere til en menneskelig læsbar streng, hvis du af en eller anden grund ønsker at gøre det.
For at gøre noget forståeligt skal du selvfølgelig kende chiffertekstens datalayout. I BFV-skemaet består en chiffertekst af et par polynomier (c0 , c1 ) med stor (størrelse coeff_modulus
) koefficienter. Da det er ubelejligt at arbejde på polynomier med så store koefficienter, bruger SEAL 2.3.1 i stedet en sammensat coeff_modulus
og gemmer både c0 og c1 modulo hver af primfaktorerne specificeret i coeff_modulus
(betegn disse faktorer q1 ,q2 ,...,qk ). Hver qi passer ind i et 64-bit ord, så alle disse 2k polynomier har koefficienter for ordstørrelse.
Chiffertekstkoefficientdatalayoutet er som følger (sammenhængende i hukommelsen):
[ c0 mod q1 ][ c0 mod q2 ]...[ c0 mod qk ][ c1 mod q1 ][ c1 mod q2 ]...[ c1 mod qk ]
hvor hver [ ci mod qj ] ser ud som
[ c0 [0] mod qj ][ c1 [0] mod qj ]...[ cn-1 [0] mod qj ]
Her brugte jeg ci [k] for at angive graden k-koefficienten af ci . Bemærk, at hver koefficient er gemt i en uint64_t
.
Ciphertext::data
returnerer en pointer til den konstante koefficient for c0 polynomium med hensyn til det første modul i din coeff_modulus
, dvs. til c0 [0] mod q1 . Ud over disse koefficientdata indeholder en Ciphertext et par andre felter, som du kan læse ved hjælp af medlemsfunktionerne.