Điểm:0

HElib: gửi sk và pk cho một bên khác để giải mã và mã hóa

lá cờ bb

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)(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

Land avatar
lá cờ in
Tôi nghĩ bạn nên đăng vấn đề này lên `kho lưu trữ HElib` trên GitHub.
Dylan avatar
lá cờ bb
@Land không ai duy trì các vấn đề trên kho lưu trữ HElib trên GitHub nữa.....nhiều câu hỏi chưa được trả lời...Trong trường hợp ai đó cũng thực hiện kịch bản này và có thể trả lời tôi, tôi đăng ở đây...

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.