Het korte antwoord is dat er geen andere manieren zijn om toegang te krijgen tot de cijfertekstgegevens in SEAL. De aanwijzer die wordt geretourneerd door Ciphertext::data
geeft u directe toegang tot de cijfertekstgegevens en stelt u in die zin in staat er elke vorm van berekening op uit te voeren, b.v. converteren naar een door mensen leesbare string als je dat om de een of andere reden zou willen doen.
Om iets begrijpelijks te kunnen doen, moet u natuurlijk de gegevenslay-out van de cijfertekst kennen. In het BFV-schema bestaat een cijfertekst uit een paar polynomen (c0 , c1 ) met grote (maat coeff_modulus
) coëfficiënten. Omdat werken op polynomen met zulke grote coëfficiënten onhandig is, gebruikt SEAL 2.3.1 in plaats daarvan een samengestelde coeff_modulus
en slaat beide c0 . op en c1 modulo elk van de priemfactoren gespecificeerd in de coeff_modulus
(noteer deze factoren q1 ,q2 ,...,qk ). Elke qi past in een 64-bits woord, dus al deze 2k-polynomen hebben coëfficiënten voor woordgrootte.
De gegevensindeling van de cijfertekstcoëfficiënt is als volgt (aangrenzend in het geheugen):
[ c0 mod q1 ][ c0 mod q2 ]...[ c0 mod qk ][ c1 mod q1 ][ c1 mod q2 ]...[ c1 mod qk ]
waarbij elke [ ci mod qj ] ziet eruit als
[ c0 [0] mod qj ][ c1 [0] mod qj ]...[ cn-1 [0] mod qj ]
Hier gebruikte ik ci [k] om de graad k-coëfficiënt van ci . aan te duiden . Merk op dat elke coëfficiënt wordt opgeslagen in een uint64_t
.
Ciphertext::data
geeft een pointer terug naar de constante coëfficiënt van de c0 polynoom met betrekking tot de eerste modulus in uw coeff_modulus
, d.w.z. naar c0 [0] mod q1 . Naast deze coëfficiëntgegevens bevat een cijfertekst een aantal andere velden die u kunt lezen met behulp van de lidfuncties.