Score:0

ควบคุมข้อผิดพลาดที่ผูกไว้เมื่อใช้ HElib CKKS

ธง bb

ฉันใช้ HElib CKKS เพื่อทำการทดลองและสงสัยว่าเป็นไปได้ไหมที่จะควบคุมขอบเขตข้อผิดพลาดในการดำเนินการพื้นฐานแต่ละอย่าง เช่น การคูณ การเข้ารหัส และการหมุน

ฉันมีคำถามนี้เพราะฉันพบว่าดูเหมือนว่าการเพิ่มขึ้นของข้อผิดพลาดใน HElib นั้นเร็วกว่าการใช้งาน HEAAN

ต่อไปนี้คือตัวอย่างการตรวจสอบข้อผิดพลาดที่ผูกไว้หลังจากการดำเนินการสแควร์แต่ละรายการจาก HElib:

  // ค *= ค;
  c.ความจุ=328.497 c.errorBound=1.28242e-06
  c.ความจุ=289.748 c.errorBound=2.69423e-06
  c.ความจุ=252.063 c.errorBound=5.71405e-06
  c.ความจุ=213.502 c.errorBound=1.1591e-05
  c.ความจุ=176.579 c.errorBound=2.37053e-05
  c.ความจุ=139.634 c.errorBound=4.79147e-05
  ระยะทาง=1.84256e-05

เราจะเห็นว่าข้อผิดพลาด Bound เพิ่มขึ้นประมาณ 2 เท่า (เช่น เราสูญเสียความแม่นยำไปหนึ่งบิต)

สำหรับการประยุกต์ใช้การคูณเมทริกซ์ (รวมถึงการหมุน การเข้ารหัส และการคูณ ในที่นี้ ไม่ได้ให้รายละเอียดโดยละเอียด) การใช้งานใน HEAAN ทำงานได้ดี แต่ขอบเขตข้อผิดพลาดเกิน 200 และความลึกไม่เพียงพอเมื่อฉันเขียนแอปพลิเคชันใหม่โดยใช้ HElib

โดยรวมแล้ว แอปพลิเคชันเดียวกัน (เช่น มีจำนวนการคูณและสล็อตเท่ากัน) ใน HElib ต้องการบิตมากกว่าใน HEAAN และสุดท้ายส่งผลให้ระดับความปลอดภัยน้อยกว่า 80 บิต

คำถาม

ใน CKKS ของ HElib หากเราจำเป็นต้องควบคุม (และอย่างไร) ข้อผิดพลาดที่ผูกไว้เมื่อทำการคูณ (หรือหมุน) อย่างแม่นยำ

พารามิเตอร์

นี่คือตัวอย่างพารามิเตอร์ที่ฉันใช้:

พารามิเตอร์(/*m=*/16 * 1024, /*bits=*/235, /*ความแม่นยำ=*/20, /*c=*/2);

ข้อผิดพลาดที่ผูกไว้หลังจากการดำเนินการหนึ่งตาราง (การคูณ):

ct_Ck[0].capacity=256.968 ct_Ck[0].isCorrect=1 ct_Ck[0].errorBound=8.6898e-08
ct_Ck[0].capacity=207.74 ct_Ck[0].isCorrect=1 ct_Ck[0].errorBound=8.6348e-06

ข้อมูลเพลนเท็กซ์มีลักษณะดังนี้:

-0.23801321 0.30014116 -0.0636206 0.21583742

อัปเดต

ฉันพบฟังก์ชันใน HElib เพื่อลดขอบเขตข้อผิดพลาด แต่ฉันไม่ทราบเหตุผลว่ามันทำงานอย่างไร

// ผลลัพธ์ก่อนที่จะเรียกใช้ bumpNoiseBound ()
ct_F.ความจุ=38.4047 ct_F.isCorrect=1 ct_F.errorBound=201.848

ct_F.bumpNoiseBound(0.5);
ct_F.ความจุ=38.4047 ct_F.isCorrect=1 ct_F.errorBound=100.884

ct_F.bumpNoiseBound(0.00001);
ct_F.ความจุ=38.4047 ct_F.isCorrect=1 ct_F.errorBound=0.00202069

ผลการถอดรหัส:

[1.04830407 -3.209778495 -2.074653964 -1.684939538 -1.000400425 -4.124713608 -0.3628963567 -3.134082967 -3.801171699 -1.00385792 -1.472975371 -1.121783172 -5.484577652 -1.89848471 -1.517289034 -0.228743587 -1.226775781 3.901777677 1.575880583 -2.008799017 -1.980024549 3.465674733 -1.105679235 -3.594262482 0.1332798533 -7.012550198 0.5623979679 -4.254105028 -0.9447986134 -0.3755929384 -0.906013134 0.5607877395 -2.309902189 -4.112943726 -4.208302789 -2.742109602 -3.230622867 0.6365211006 -1.909193898 -1.761926501 0.07531637181 0.5945984313 -2.727958762 -2.45710736 -2.225926303 0.2915942006 -0.5207882104 -1.719778064 -3.581110672 0.9300763124 1.395581211 0.7434900004 -3.202471826 1.109593845 -5.68517439 0.2502367768 0.6176019573 -1.632018488 -0.3558288489 -1.87408586 3.322116753 -3.055094277 -1.437400739 -3.61812068]

ผลลัพธ์ข้อความธรรมดา:

[1.048074533 -3.209868922 -2.075044009 -1.683690789 -0.9997621728 -4.124967495 -0.3629476429 -3.1339527 -3.801350955 -1.003947321 -1.473256614 -1.121510668 -5.484447105 -1.89821005 -1.517648893 -0.2295971341 -1.227429856 3.90224666 1.576020144 -2.008567349 -1.98010648 3.464794098 -1.105909147 -3.595045121 0.1335162434 -7.012703056 0.5623665673 -4.2541547 -0.9454690736 -0.3750930498 -0.9075913974 0.5602374826 -2.30977449 -4.11252574 -4.208385862 -2.742450262 -3.230891732 0.6371578519 -1.909217106 -1.76218525 0.07590385029 0.5945647743 -2.727895366 -2.457126412 -2.225143547 0.2917448084 -0.5201044894 -1.719980727 -3.580159571 0.9294232572 1.396138592 0.7433848735 -3.202827843 1.108926304 -5.68442001 0.2495510754 0.6176213132 -1.630955343 -0.35625627 -1.874107776 3.321633929 -3.054599105 -1.438421851 -3.618478743]

ผลลัพธ์หลังการใช้ ชนเสียงผูกพัน () เกือบเท่ากับผลลัพธ์ของข้อความธรรมดา ดังนั้นฟังก์ชั่นนี้จึงช่วยให้เราได้ค่าความแม่นยำกลับคืนมา?

Dylan avatar
bb flag
BTW เราไม่รู้ว่า `rescale' ทำงานอย่างไรใน HElib ดังที่ชายห์กล่าวไว้ [HElib ดูแลการปรับขนาด CKKS ด้วยตัวมันเอง ดังนั้นคุณจึงไม่ต้องกังวลเกี่ยวกับเรื่องนี้ อย่างไรก็ตาม ยังไม่รองรับการบูต CKKS](https://github.com/homenc/HElib/issues/341#issuecomment-581880535) แต่ใน HEAAN เราทำด้วยตัวเอง เช่น:`reScaleByAndEqual(ctxt, cBits); reScaleByAndEqual(ctxt, ctxt.logp);` นี่คือเหตุผลที่พารามิเตอร์เดียวกันใน HElib รองรับการคำนวณน้อยกว่าหรือไม่
Hilder Vitor Lima Pereira avatar
การสลับคีย์ทำอย่างไรในการใช้งาน HEAAN นั้น หากใช้อัลกอริธึมการสลับคีย์ที่แตกต่างจาก HElib ต้นทุนและการเติบโตของสัญญาณรบกวนของการคูณแบบโฮโมมอร์ฟิคจะแตกต่างกัน
Dylan avatar
bb flag
@HilderVitorLimaPereira มันอาจจะใช้วิธีอื่น ตามที่อธิบายไว้ในเอกสารต้นฉบับ [HEAAN](https://eprint.iacr.org/2016/421.pdf), `P3`: เพื่อจัดการกับโมดูลัสของข้อความไซเฟอร์ เราขอแนะนำเทคนิคใหม่ - เรียกว่าการปรับขนาด - ที่จัดการข้อความไซเฟอร์เท็กซ์ในทางเทคนิคแล้ว ดูเหมือนว่าจะคล้ายกับวิธีการเปลี่ยนโมดูลัสที่แนะนำโดย Brakerski และ Vaikuntanatan แต่ มีบทบาทที่แตกต่างไปจากเดิมอย่างสิ้นเชิงในการก่อสร้างของเรา
Dylan avatar
bb flag
นอกจากนี้ HEAAN ยังรองรับการบูตเครื่องโดยใช้ CRT + NTT ซึ่งอธิบายไว้ใน [github](https://github.com/snucrypto/HEAAN/issues/7#issuecomment-419614271)
Hilder Vitor Lima Pereira avatar
แต่ฉันถามเกี่ยวกับการสลับคีย์ ไม่ใช่การสลับม็อด... มีการแลกเปลี่ยนเสียงรบกวนรันไทม์เมื่อเราคีย์สวิตช์ ตัวอย่างเช่น หากคุณแยกย่อยไซเฟอร์เท็กซ์โดยใช้พื้นฐานที่เล็กลง คุณก็จะได้ส่วนประกอบมากขึ้นและสวิตช์คีย์จะทำงานช้าลง แต่สัญญาณรบกวนจะน้อยลง หาก Helib และ HEAAN ใช้การสลายตัวที่แตกต่างกัน การเติบโตของเสียงจะแตกต่างกันอยู่แล้ว

โพสต์คำตอบ

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