簡単に言うと、SEALの暗号文データにアクセスする方法は他にありません。 Ciphertext::data
によって返されるポインタ 暗号文データに直接アクセスできるようになり、その意味で、あらゆる種類の計算を実行できるようになります。何らかの理由でそれを実行したい場合は、人間が読める文字列に変換します。
もちろん、わかりやすいことを行うには、暗号文のデータレイアウトを知っている必要があります。 BFVスキームでは、暗号文は1対の多項式(c 0 )で構成されます。 、c 1 )大きい(サイズcoeff_modulus
)係数。このような大きな係数を持つ多項式を操作するのは不便なので、SEAL2.3.1は代わりに複合coeff_modulus
を使用します。 両方のc0を格納します およびc1 coeff_modulus
で指定された各素因のモジュロ (これらの要因q 1を示します 、q 2 、...、q k )。各qi 64ビットワードに収まるため、これらの2k多項式はすべてワードサイズ係数を持ちます。
暗号文係数データのレイアウトは次のとおりです(メモリ内で連続):
[c 0 mod q 1 ] [c 0 mod q 2 ] ... [c 0 mod q k ] [c 1 mod q 1 ] [c 1 mod q 2 ] ... [c 1 mod q k ]
ここで、各[c i mod q j ]のように見えます
[c 0 [0] mod q j ] [c 1 [0] mod q j ] ... [c n-1 [0] mod q j ]
ここではciを使用しました [k] c iの次数k係数を示します 。各係数はuint64_t
に格納されていることに注意してください 。
Ciphertext::data
c 0の定数係数へのポインタを返します coeff_modulus
の最初のモジュラスに関する多項式 、つまりc 0 [0] mod q 1 。この係数データに加えて、暗号文には、メンバー関数を使用して読み取ることができる他のいくつかのフィールドが含まれています。