Câu hỏi này là về tuần tự hóa của pk
, sk
, và bối cảnh
trong HElib.
Trong trường hợp của tôi, có hai bên đáng tin cậy (A và B), hai bên này có thể mã hóa tin nhắn và giải mã bản mã.
Vì vậy, A sẽ gửi bối cảnh
, pk
, và sk
cho B. Sau đó, A mã hóa tin nhắn và gửi ctxtA
đến B, B giải mã ctxtA
và gửi một cái khác ctxtB
đến A. Ví dụ này chỉ để giải thích.
Nhưng thật khó hiểu khi triển khai HElib, gặp lỗi: bối cảnh không phù hợp
, mã mẫu được hiển thị bên dưới:
Bối cảnh* bối cảnh mới;
unique_ptr<SecKey> newSecKey;
unique_ptr<PubKey> newPubKey;
kiểm tra khoảng trống::testStruct(){
dài không dấu p = 127;
dài không dấu m = 12800;
dài không dấu r = 1;
bit dài không dấu = 119;
dài không dấu c = 2;
helib::Context context = helib::ContextBuilder<helib::BGV>()
.m(m)
.p(p)
.r(r)
.bits(bit)
.c(c)
.xây dựng();
helib::SecKey oldSk(bối cảnh);
oldSk.GenSecKey();
helib::addSome1DMatrices(oldSk);
const helib::PubKey& oldPk = oldSk;
chuỗi dòng ss;
context.writeTo(ss);
newContext = Bối cảnh::readPtrFrom(ss);
cout << "Ngữ cảnh bằng nhau: " << (newContext == bối cảnh) << endl; // kết quả: 1
// pk và sk mới được tạo
newSecKey = make_unique<SecKey>(*newContext);
newSecKey->GenSecKey();
addSome1DMatrices(*newSecKey);
newPubKey = make_unique<PubKey>(*newSecKey);
mã hóa (*newContext, *newPubKey, *newSecKey); // những công việc này
// mã hóa (*newContext, *newPubKey, oldSk); thất bại do bối cảnh không phù hợp
// hoặc mã hóa (*newContext, oldPk, *newSecKey); thất bại do bối cảnh không phù hợp
}
void test::encryptt(const Context& con, const PubKey& pk, const SecKey& sk){
vector<long> inputtest(256);
for (dài i = 0; i< 256; i++) {
đầu vào[i] = i % 2;
}
cout << inputtest << endl;
Ctxt ct(pk);
vector<dài> kiểm tra đầu ra;
// Mã hóa
con.getEA().encrypt(ct, pk, inputtest);
// Giải mã
con.getEA().decrypt(ct, sk, outputtest);
cout << kết quả kiểm tra << endl;
}
Tổng thể, (cũContext, oldSk, oldPk)
và (bối cảnh mới, Skk mới, Pk mới)
không thể trộn lẫn.
mã hóa (*newContext, *newPubKey, oldSk); thất bại do bối cảnh không phù hợp
// hoặc mã hóa (*newContext, oldPk, *newSecKey); thất bại do bối cảnh không phù hợp
Tuy nhiên, chúng ta có thể thấy rằng bối cảnh mới và cũ bằng nhau theo mã:
cout << "Ngữ cảnh bằng nhau: " << (newContext == bối cảnh) << endl; // kết quả: 1
Tái bút Ghi vào và đọc từ tệp không được xem xét, chỉ có chuỗi.
HElib