Krótka odpowiedź brzmi, że nie ma innych sposobów dostępu do danych szyfrogramu w SEAL. Wskaźnik zwrócony przez Ciphertext::data
da Ci bezpośredni dostęp do danych zaszyfrowanego tekstu i w tym sensie pozwoli Ci na wykonywanie na nich dowolnych obliczeń, np. konwertowanie na ciąg czytelny dla człowieka, jeśli z jakiegoś powodu chciałbyś to zrobić.
Oczywiście, aby zrobić cokolwiek zrozumiałego, musisz znać układ danych zaszyfrowanego tekstu. W schemacie BFV zaszyfrowany tekst składa się z pary wielomianów (c0 , c1 ) z dużymi (rozmiar coeff_modulus
) współczynniki. Ponieważ operowanie na wielomianach o tak dużych współczynnikach jest niewygodne, SEAL 2.3.1 używa zamiast tego złożonego coeff_modulus
i przechowuje oba c0 i c1 modulo każdy z czynników pierwszych określonych w coeff_modulus
(oznacz te czynniki q1 ,q2 ,...,qk ). Każde qi pasuje do 64-bitowego słowa, więc wszystkie te wielomiany 2k mają współczynniki rozmiaru słowa.
Układ danych współczynnika szyfrogramu jest następujący (ciągły w pamięci):
[ c0 mod q1 ][ c0 mod q2 ]...[ c0 mod qk ][ c1 mod q1 ][ c1 mod q2 ]...[ c1 mod qk ]
gdzie każdy [ ci mod qj ] wygląda jak
[ c0 [0] mod qj ][ c1 [0] mod qj ]...[ cn-1 [0] mod qj ]
Tutaj użyłem ci [k] oznacza współczynnik stopnia k ci . Zauważ, że każdy współczynnik jest przechowywany w uint64_t
.
Ciphertext::data
zwraca wskaźnik do stałego współczynnika c0 wielomian w odniesieniu do pierwszego modułu w twoim coeff_modulus
, czyli do c0 [0] mod q1 . Oprócz tych danych współczynników, szyfrogram zawiera kilka innych pól, które można odczytać za pomocą funkcji składowych.