在HElib上使用AES实现; addCtxt函数失败

时间:2015-04-20 13:03:37

标签: c++ encryption cryptography aes

目前我正在使用同态库HElib,我对AES实现存在问题。

一方面,我成功地对明文进行了简单的HE加密,并对密文进行了一些操作。这很好用。 另一方面,我使用HElib上的AES实现来加密数据并对其进行解密,并且它也能很好地工作。

现在我希望能够充分利用此实现的所有功能:对通过此AES加密的数据执行一些HE操作。

在简单的HE加密上,操作是在对象Ctxt上进行的,但是当我们使用AES的实现时,所有密文都是Ctxt的向量,我无法弄清楚如何对这些向量进行操作。

我以Test_AES.cpp文件为例,我使用相同的参数来制作上下文并生成密钥。(这里我只会把我认为重要的部分放在一边,假设你知道一点点这个库,但是如果你需要我可以编写的所有代码)

所以首先我加密1的简单向量。

Vec<uint8_t> ptxt(INIT_SIZE,nBlocks*16); //Vector of 1
vector<Ctxt> doublyEncrypted;
hAES.homAESenc(doublyEncrypted,encryptedAESkey,ptxt); // Encryption of the vector store
                                                      //in doublyEncrypted

因此,正如图书馆所说,我们有双重加密= Enc_HE(Enc_AES(myvector))。

现在解密

hAES.homeAESdec(doublyEncrypted,encryptedAESkey);

现在我们的doublelyEncrypted是一个Enc_HE(myvector)。 此时我应该可以对加密的矢量进行一些操作。 由于doublyEncrypted是Ctxt的向量,我试过像:

for(long i=0;i<(long)doublyEncrypted.size();i++){
    doublyEncrypted[i].addCtxt(doublyEncrypted[i]);
}

但是当我用密钥对其进行解密并对其进行解码时,我得到的是0的向量(我应该得到2的向量)。 我还尝试添加一个不同的加密矢量,但我得到了一个随机十六进制值的矢量。

所以我的问题是,是否可以通过HElib上的AES实现对密文进行一些操作,并且是否有人使用这个库来做这样的思考。

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果有人碰到过这个:

海报显然似乎误解了同态加密是如何工作的。在代码示例中,他们首先使用HElib对纯文本进行同态加密。然后使用同态属性将该密文操纵成表示明文的AES加密的密文。在此AES加密中添加内容显然会产生无意义的结果。 HElib并没有将AES神奇地转换为同态密码系统。