Jawaban singkatnya adalah tidak ada cara lain untuk mengakses data ciphertext di SEAL. Pointer yang dikembalikan oleh Ciphertext::data
akan memberi Anda akses langsung ke data ciphertext dan dalam pengertian itu memungkinkan Anda untuk melakukan segala jenis perhitungan di atasnya, mis. mengonversi ke string yang dapat dibaca manusia jika karena alasan tertentu Anda ingin melakukannya.
Tentu saja untuk melakukan sesuatu yang dapat dipahami, Anda perlu mengetahui tata letak data ciphertext. Dalam skema BFV sebuah ciphertext terdiri dari sepasang polinomial (c0 , c1 ) dengan besar (ukuran coeff_modulus
) koefisien. Karena operasi pada polinomial dengan koefisien besar seperti itu tidak nyaman, SEAL 2.3.1 sebagai gantinya menggunakan coeff_modulus
komposit dan menyimpan keduanya c0 dan c1 modulo masing-masing faktor prima yang ditentukan dalam coeff_modulus
(sebutkan faktor-faktor ini q1 ,q2 ,...,qk ). Setiap qi cocok dengan kata 64-bit, jadi semua polinomial 2k ini memiliki koefisien ukuran kata.
Tata letak data koefisien ciphertext adalah sebagai berikut (bersebelahan di memori):
[ c0 mod q1 ][ c0 mod q2 ]...[ c0 mod qk ][ c1 mod q1 ][ c1 mod q2 ]...[ c1 mod qk ]
di mana setiap [ ci mod qj ] sepertinya
[ c0 [0] mod qj ][ c1 [0] mod qj ]...[ cn-1 [0] mod qj ]
Di sini saya menggunakan ci [k] untuk menyatakan koefisien derajat k dari ci . Perhatikan bahwa setiap koefisien disimpan dalam uint64_t
.
Ciphertext::data
mengembalikan pointer ke koefisien konstan c0 polinomial sehubungan dengan modulus pertama di coeff_modulus
. Anda , yaitu ke c0 [0] mod q1 . Selain data koefisien ini, Ciphertext berisi beberapa bidang lain yang dapat Anda baca menggunakan fungsi anggota.