PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Simple Encrypted Arithmetic Library (SEAL) et la variable seal ::Ciphertext

La réponse courte est qu'il n'y a pas d'autres moyens d'accéder aux données de texte chiffré dans SEAL. Le pointeur renvoyé par Ciphertext::data vous donnera un accès direct aux données du texte chiffré et, en ce sens, vous permettra d'effectuer tout type de calcul dessus, par ex. convertir en une chaîne lisible par l'homme si, pour une raison quelconque, vous voudriez le faire.

Bien sûr, pour faire quoi que ce soit d'intelligible, vous devez connaître la disposition des données du texte chiffré. Dans le schéma BFV, un texte chiffré consiste en une paire de polynômes (c0 , c1 ) avec grand (taille coeff_modulus ) coefficients. Étant donné qu'il n'est pas pratique d'opérer sur des polynômes avec des coefficients aussi grands, SEAL 2.3.1 utilise à la place un composé coeff_modulus et stocke à la fois c0 et c1 modulo chacun des facteurs premiers spécifiés dans le coeff_modulus (notons ces facteurs q1 ,q2 ,...,qk ). Chaque qi tient dans un mot de 64 bits, donc tous ces polynômes 2k ont ​​des coefficients de taille de mot.

La disposition des données de coefficient de texte chiffré est la suivante (contiguës en mémoire) :

[ c0 modq1 ][ c0 modq2 ]...[ c0 modqk ][ c1 modq1 ][ c1 modq2 ]...[ c1 modqk ]

où chaque [ ci mod qj ] ressemble

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

Ici, j'ai utilisé ci [k] pour désigner le degré k coefficient de ci . Notez que chaque coefficient est stocké dans un uint64_t .

Ciphertext::data renvoie un pointeur sur le coefficient constant du c0 polynôme par rapport au premier module de votre coeff_modulus , c'est-à-dire à c0 [0] mod q1 . En plus de ces données de coefficient, un texte chiffré contient quelques autres champs que vous pouvez lire à l'aide des fonctions membres.