Шифрование с секретным ключом в HElib
Речь идет о шифровании с симметричным ключом в HElib и гомоморфном выполнении некоторых сложений и умножений.
В некоторых случаях мы ожидаем использовать секретный ключ для шифрования сообщения, а затем выполнять операции (открытый ключ не требуется). Однако дополнительной информации об этом в HElib почти нет.
Некоторые данные кода в HElib перечислены ниже:
// Encryption using the secret key, this is useful, e.g., to put an
// encryption of the secret key into the public key.
long SecKey::skEncrypt(Ctxt& ctxt,
const NTL::ZZX& ptxt,
long ptxtSpace,
long skIdx) const
{....}
Для этой функции, когда я тестировал производительность между этими двумя реализациями, я обнаружил, что временные затраты на версию с секретным ключом почти равны стоимости версии с открытым ключом.
HELIB_NTIMER_START(Enc_testSecKeyEnc);
// Ctxt ctxt1(publicKey);
// ea.encrypt(ctxt1, publicKey, cmsg1);
Ctxt ctxt1(secretKey);
EncodedPtxt eptxt;
ea.encode(eptxt, cmsg1);
secretKey.Encrypt(ctxt1, eptxt);
HELIB_NTIMER_STOP(Enc_testSecKeyEnc);
printNamedTimer(cout, "Enc_testSecKeyEnc");
vector<long> res1(ea.size());
HELIB_NTIMER_START(Dec_testSecKeyEnc);
ea.decrypt(ctxt1, secretKey, res1);
HELIB_NTIMER_STOP(Dec_testSecKeyEnc);
printNamedTimer(cout, "Dec_testSecKeyEnc");
Полученные результаты;
Public-Key:
Enc_testSecKeyEnc: 0.023451 / 1 = 0.023451 [/Users/qifanwang/code/ePPDSC/ePPDSC/tests/HEmatrix_test.cpp:102]
Dec_testSecKeyEnc: 0.115884 / 1 = 0.115884 [/Users/qifanwang/code/ePPDSC/ePPDSC/tests/HEmatrix_test.cpp:110]
Secret-Key:
Enc_testSecKeyEnc: 0.030688 / 1 = 0.026804 [/Users/qifanwang/code/ePPDSC/ePPDSC/tests/HEmatrix_test.cpp:102]
Dec_testSecKeyEnc: 0.114252 / 1 = 0.114252 [/Users/qifanwang/code/ePPDSC/ePPDSC/tests/HEmatrix_test.cpp:114]
Parameters:
m = 18944, p = 127, phi(m) = 9216
ord(p) = 36
normBnd = 1.27247
polyNormBnd = 1.27247
factors = [2 37]
generator 3 has order (!= Z_m^*) of 64
generator 1153 has order (== Z_m^*) of 4
r = 1
nslots = 256
hwt = 0
ctxtPrimes = [6,7,8]
specialPrimes = [9,10]
number of bits = 262
security level = 118.653