Краткият отговор е, че няма други начини за достъп до данните за шифровани текстове в SEAL. Указателят, върнат от Ciphertext::data
ще ви даде директен достъп до данните за шифрования текст и в този смисъл ви позволява да правите всякакъв вид изчисление върху тях, напр. преобразуване в четим от човека низ, ако по някаква причина искате да го направите.
Разбира се, за да направите нещо разбираемо, трябва да знаете разположението на данните на шифрования текст. В схемата BFV шифротекстът се състои от двойка полиноми (c0 , c1 ) с голям (размер coeff_modulus
). ) коефициенти. Тъй като работата с полиноми с такива големи коефициенти е неудобна, SEAL 2.3.1 вместо това използва съставен coeff_modulus
и съхранява и двете c0 и c1 модул на всеки от основните фактори, посочени в coeff_modulus
(означете тези фактори q1 ,q2 ,...,qk ). Всяко qi се вписва в 64-битова дума, така че всички тези 2k полиноми имат коефициенти за размер на думата.
Оформлението на данните за коефициента на шифротен текст е както следва (последователно в паметта):
[ c0 мод q1 ][ c0 мод q2 ]...[ c0 мод qk ][ c1 мод q1 ][ c1 мод q2 ]...[ c1 мод qk ]
където всеки [ ci мод qj ] изглежда като
[ c0 [0] мод qj ][ c1 [0] мод qj ]...[ cn-1 [0] мод qj ]
Тук използвах ci [k] за означаване на коефициента на степен k на ci . Имайте предвид, че всеки коефициент се съхранява в uint64_t
.
Ciphertext::data
връща указател към постоянния коефициент на c0 полином по отношение на първия модул във вашия coeff_modulus
, т.е. до c0 [0] мод q1 . В допълнение към тези данни за коефициента, шифрованият текст съдържа няколко други полета, които можете да прочетете с помощта на функциите-членове.