简单加密算术库(SEAL)和seal :: Ciphertext变量 [英] Simple Encrypted Arithmetic Library (SEAL) and the seal::Ciphertext variable

查看:447
本文介绍了简单加密算术库(SEAL)和seal :: Ciphertext变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用简单加密算术Microsoft密码研究小组的Library(SEAL)库。有没有办法获取 seal :: Ciphertext变量的内容?我试图了解ciphertext.h和ciphertext.cpp并找到了:

I'm using the Simple Encrypted Arithmetic Library (SEAL) library from Microsoft Cryptography Research Group. Is there a way to get the content of seal::Ciphertext variable? I've tried to understand the ciphertext.h and ciphertext.cpp and found the:

/**
Saves the ciphertext to an output stream. The output is in binary format and not 
human-readable. The output stream must have the "binary" flag set.

@param[in] stream The stream to save the ciphertext to
@see load() to load a saved ciphertext.
*/
void save(std::ostream &stream) const;

/**
Loads a ciphertext from an input stream overwriting the current ciphertext.

@param[in] stream The stream to load the ciphertext from
@see save() to save a ciphertext.
*/
void load(std::istream &stream);

但我找不到其他方法来获取任何密封件的内容:: Ciphertext变量不是二进制流,也不是指向某个内存地址的指针,而是将其保存为字符串。

But I coudn't find another option to get the content of anyseal::Ciphertext variable that is not a binary stream or just a pointer to some memory address and save it a string.

如果有人从上面的链接下载了SEAL库并提取了它,而没有进行任何更改。您可以在 SEAL_2.3.1\SEAL\seal\ciphertext.h 中的 seal :: Ciphertext 上找到所有允许的操作> SEAL_2.3.1\SEAL\seal\ciphertext.cpp

If any of you have download the SEAL library from the link above and extracted it without changing anything. You can find all the allowed operations on seal::Ciphertext in SEAL_2.3.1\SEAL\seal\ciphertext.h and SEAL_2.3.1\SEAL\seal\ciphertext.cpp

推荐答案

简短的答案是:没有其他方法可以在SEAL中访问密文数据。 Ciphertext :: data 返回的指针将使您可以直接访问密文数据,从这种意义上讲,您可以对其进行任何类型的计算,例如

Short answer is that there are no other ways of accessing the ciphertext data in SEAL. The pointer returned by Ciphertext::data will give you direct access to the ciphertext data and in that sense allows you to do any kind of computation on it, e.g. converting to a human-readable string if for some reason you would want to do that.

当然,要执行任何可理解的操作,您需要了解密文的数据布局。在BFV方案中,密文由一对多项式(c 0 ,c 1 )组成,其大小较大( coeff_modulus )系数。由于对具有如此大系数的多项式进行运算很不方便,因此SEAL 2.3.1改为使用复合 coeff_modulus 并存储c 0 和c 1 coeff_modulus 中指定的每个主要因子取模(表示这些因子q 1 ,q 2 ,...,q k )。每个q i 都适合一个64位单词,因此所有这2k多项式都具有单词大小系数。

Of course to do anything intelligible you need to know the data layout of the ciphertext. In the BFV scheme a ciphertext consists of a pair of polynomials (c0, c1) with large (size coeff_modulus) coefficients. Since operating on polynomials with such large coefficients is inconvenient, SEAL 2.3.1 instead uses a composite coeff_modulus and stores both c0 and c1 modulo each of the prime factors specified in the coeff_modulus (denote these factors q1,q2,...,qk). Each qi fits into a 64-bit word, so all of these 2k polynomials have word-size coefficients.

密文系数数据布局如下(在内存中连续):

The ciphertext coefficient data layout is as follows (contiguous in memory):

[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 ]

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

其中每个[c i mod q j ]看起来像

where each [ ci mod qj ] looks like

[c 0 [0] mod q j ] [c 1 [0] mod q j ] ... [c n-1 [0] mod q j ]

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

在这里,我使用c i [k]表示c i 的度k系数。请注意,每个系数都存储在 uint64_t 中。

Here I used ci[k] to denote the degree k coefficient of ci. Note that each coefficient is stored in a uint64_t.

Ciphertext :: data 返回指向c 0 的常数系数的指针关于 coeff_modulus 中的第一个模的多项式,即c 0 [0] mod q 1 。除此系数数据外,密文还包含其他一些可以使用成员函数读取的字段。

Ciphertext::data returns a pointer to the constant coefficient of the c0 polynomial with respect to the first modulus in your coeff_modulus, i.e. to c0[0] mod q1. In addition to this coefficient data, a Ciphertext contains a few other fields that you can read using the member functions.

这篇关于简单加密算术库(SEAL)和seal :: Ciphertext变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆