PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Simple Encrypted Arithmetic Library (SEAL) und die Variable seal::Ciphertext

Kurze Antwort ist, dass es keine anderen Möglichkeiten gibt, auf die Chiffretextdaten in SEAL zuzugreifen. Der von Ciphertext::data zurückgegebene Zeiger gibt Ihnen direkten Zugriff auf die Chiffretextdaten und erlaubt Ihnen in diesem Sinne, jede Art von Berechnung damit durchzuführen, z. Konvertieren in eine für Menschen lesbare Zeichenfolge, wenn Sie dies aus irgendeinem Grund tun möchten.

Um etwas verständlich zu machen, müssen Sie natürlich das Datenlayout des Geheimtextes kennen. Im BFV-Schema besteht ein Geheimtext aus einem Polynompaar (c0 , c1 ) mit großer (Größe coeff_modulus ) Koeffizienten. Da das Arbeiten mit Polynomen mit solch großen Koeffizienten unbequem ist, verwendet SEAL 2.3.1 stattdessen einen zusammengesetzten coeff_modulus und speichert sowohl c0 und c1 modulo jeden der in coeff_modulus angegebenen Primfaktoren (Bezeichne diese Faktoren mit q1 ,q2 ,...,qk ). Jedes qi passt in ein 64-Bit-Wort, also haben alle diese 2k-Polynome Wortgrößenkoeffizienten.

Das Layout der Chiffretext-Koeffizientendaten ist wie folgt (kontinuierlich im Speicher):

[c0 mod q1 ][c0 mod q2 ]...[c0 mod qk ][c1 mod q1 ][c1 mod q2 ]...[c1 mod qk ]

wo jedes [ci mod qj ] sieht aus wie

[c0 [0] mod qj ][c1 [0] mod qj ]...[cn-1 [0] mod qj ]

Hier habe ich ci verwendet [k], um den Koeffizienten des Grades k von ci zu bezeichnen . Beachten Sie, dass jeder Koeffizient in einem uint64_t gespeichert wird .

Ciphertext::data gibt einen Zeiger auf den konstanten Koeffizienten von c0 zurück Polynom in Bezug auf den ersten Modul in Ihrem coeff_modulus , also auf c0 [0] mod q1 . Zusätzlich zu diesen Koeffizientendaten enthält ein Chiffretext einige andere Felder, die Sie mit den Mitgliedsfunktionen lesen können.