Score:0

HElib: ส่ง sk และ pk ไปยังบุคคลอื่นเพื่อถอดรหัสและเข้ารหัส

ธง bb

คำถามนี้เกี่ยวกับการทำให้เป็นอนุกรมของ พีเค, สก, และ บริบท ใน HElib. ในสถานการณ์ของฉัน มีสองฝ่ายที่เชื่อถือได้ (A และ B) ทั้งสองฝ่ายสามารถเข้ารหัสข้อความและถอดรหัสข้อความเข้ารหัสได้

ดังนั้น A จะส่ง บริบท, พีเค, และ สก ถึง B จากนั้น A จะเข้ารหัสข้อความและส่ง ctxtA ถึง B, B ถอดรหัส ctxtA และส่งอีก ctxtB ถึง A ตัวอย่างนี้เป็นเพียงการอธิบายเท่านั้น

แต่มันทำให้เกิดความสับสนในการใช้งาน HElib ได้รับข้อผิดพลาด: ความไม่ตรงกันของบริบทโค้ดตัวอย่างแสดงด้านล่าง:

    บริบท* newContext;
    unique_ptr<SecKey> newSecKey;
    unique_ptr<PubKey> newPubKey;

โมฆะการทดสอบ :: testStruct () {
    ยาว p = 127;
    m ยาวที่ไม่ได้ลงชื่อ = 12800;
    ยาวที่ไม่ได้ลงชื่อ r = 1;
    บิตยาวที่ไม่ได้ลงชื่อ = 119;
    ยาว c = 2;
    
    helib::Context บริบท = helib::ContextBuilder<helib::BGV>()
                                .ม.(ม.)
                                .p(พี)
                                .r(ร)
                                .bits(บิต)
                                .ค(ค)
                                .สร้าง();
    helib::SecKey oldSk (บริบท);
    oldSk.GenSecKey();
    helib::addSome1DMatrices(oldSk);
    const helib::PubKey& oldPk = oldSk;
    
    เอสเอสสตริงสตรีม;
    บริบท.writeTo(ss);

    newContext = บริบท :: readPtrFrom (ss);
    ศาล << "บริบทเท่ากับ:" << (บริบทใหม่ == บริบท) << endl; // ผลลัพธ์:1

    // pk และ sk ที่สร้างขึ้นใหม่
    newSecKey = make_unique<SecKey>(*newContext);
    newSecKey->GenSecKey();
    addSome1DMatrices(*newSecKey);
    newPubKey = make_unique<PubKey>(*newSecKey);

    เข้ารหัส (*newContext, *newPubKey, *newSecKey); // งานนี้
    // เข้ารหัส (*newContext, *newPubKey, oldSk); ล้มเหลวเนื่องจากบริบทไม่ตรงกัน
// หรือเข้ารหัส (*newContext, oldPk, *newSecKey); ล้มเหลวเนื่องจากบริบทไม่ตรงกัน
}

การทดสอบเป็นโมฆะ :: เข้ารหัส (const Context& con, const PubKey& pk, const SecKey& sk){
    เวกเตอร์ <ยาว> อินพุตทดสอบ (256);
    สำหรับ (ผมยาว = 0; ผม< 256; i++) {
        การทดสอบอินพุต [i] = ฉัน % 2;
    }
    ศาล << อินพุตทดสอบ << endl;
    
    Ctxt กะรัต(pk);
    เวกเตอร์ <long> เอาต์พุตทดสอบ;

    // การเข้ารหัส
    con.getEA().เข้ารหัส(ct, pk, ทดสอบอินพุต);
    // ถอดรหัส
    con.getEA().decrypt(ct, sk, การทดสอบเอาต์พุต);

    ศาล << outputtest << endl;
}

โดยรวม, (oldContext, oldSk, oldPk) และ (บริบทใหม่, newSk, newPk) ไม่สามารถผสมได้

เข้ารหัส (*newContext, *newPubKey, oldSk); ล้มเหลวเนื่องจากบริบทไม่ตรงกัน
// หรือเข้ารหัส (*newContext, oldPk, *newSecKey); ล้มเหลวเนื่องจากบริบทไม่ตรงกัน

แต่เราจะเห็นว่าบริบทใหม่และเก่ามีความเท่าเทียมกันตามรหัส:

 ศาล << "บริบทเท่ากับ:" << (บริบทใหม่ == บริบท) << endl; // ผลลัพธ์:1

ป.ล. ไม่พิจารณาการเขียนและอ่านจากไฟล์ เฉพาะ stringstream

เฮลิบ

Land avatar
in flag
ฉันคิดว่าคุณควรโพสต์ปัญหานี้ใน `HElib repository` บน GitHub
Dylan avatar
bb flag
@Land ไม่มีใครดูแลปัญหาในที่เก็บ HElib บน GitHub อีกต่อไป.....คำถามมากมายไม่ได้รับคำตอบ...ในกรณีที่มีคนใช้สถานการณ์นี้และสามารถตอบฉันได้ ฉันโพสต์ที่นี่...

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา