Krátká odpověď je, že neexistují žádné jiné způsoby přístupu k datům šifrovaného textu v SEAL. Ukazatel vrácený Ciphertext::data
vám poskytne přímý přístup k datům šifrovaného textu a v tomto smyslu vám umožní s nimi provádět jakýkoli druh výpočtů, např. převod na lidsky čitelný řetězec, pokud to z nějakého důvodu chcete udělat.
Samozřejmě, abyste mohli dělat cokoli srozumitelného, musíte znát rozložení dat šifrovaného textu. Ve schématu BFV se šifrový text skládá z dvojice polynomů (c0 , c1 ) s velkým (velikost coeff_modulus
) koeficienty. Protože práce s polynomy s tak velkými koeficienty je nepohodlná, SEAL 2.3.1 místo toho používá složený coeff_modulus
a ukládá obě c0 a c1 modulo každý z prvočísel uvedených v coeff_modulus
(označte tyto faktory q1 ,q2 ,...,qk ). Každé qi vejde do 64bitového slova, takže všechny tyto 2k polynomy mají koeficienty velikosti slova.
Rozložení dat koeficientu šifrového textu je následující (v paměti spojité):
[ c0 mod q1 ][ c0 mod q2 ]...[ c0 mod qk ][ c1 mod q1 ][ c1 mod q2 ]...[ c1 mod qk ]
kde každé [ ci mod qj ] vypadá jako
[ c0 [0] mod qj ][ c1 [0] mod qj ]...[ cn-1 [0] mod qj ]
Zde jsem použil ci [k] k označení stupně k koeficientu ci . Všimněte si, že každý koeficient je uložen v uint64_t
.
Ciphertext::data
vrátí ukazatel na konstantní koeficient c0 polynom s ohledem na první modul ve vašem coeff_modulus
, tj. do c0 [0] mod q1 . Kromě těchto dat koeficientů obsahuje šifrový text několik dalších polí, která můžete číst pomocí členských funkcí.