Zero-knowledge proof หรือ zero-knowledge proof of knowledge?

Aug 29 2020

เป็นคำถามที่อยู่ในใจของฉันเสมอว่าการพิสูจน์ความรู้เป็นศูนย์ ($\mathrm{ZKP}$) เหมือนกับการพิสูจน์ความรู้ที่เป็นศูนย์ ($\mathrm{ZKPoK}$) แต่ไม่ใช่ตั้งแต่วันนี้ที่แนวคิดเหล่านี้สร้างปัญหาในความเข้าใจของฉันเกี่ยวกับการเข้ารหัส

ดังนั้นอะไรคือความแตกต่างที่แท้จริง (ถ้ามี) ระหว่าง $\mathrm{ZKP}$ และก $\mathrm{ZKPoK}$เหรอ? ผู้คนใช้แนวคิดทั้งสองอย่างแยกไม่ออกหรือไม่?

นี่คือความแตกต่างของคำตอบที่ตอบคำถามของฉันบางส่วน แต่ฉันกำลังรอคำตอบโดยตรงสำหรับฉัน

คำตอบ

2 GeoffroyCouteau Sep 24 2020 at 17:16

เนื่องจากคุณอ้างอิงคำตอบของฉันสำหรับคำถามที่คล้ายกันมากฉันจึงถือว่าคุณได้อ่านแล้วดังนั้นคุณจึงรู้ว่าความแตกต่างระหว่าง ZK และ ZKPoK อยู่ที่ระดับเทคนิคอย่างไร หากต้องการจำสั้น ๆ : ZK มาตรฐานพิสูจน์การมีอยู่ของพยานในขณะที่ ZKPoK พิสูจน์ว่าผู้พูดรู้จักพยานจริงซึ่งเป็นทางการโดยบอกว่ามีตัวแยกที่มีประสิทธิภาพซึ่งสามารถกู้คืนพยานจากรหัสของผู้ประกาศได้ อันที่จริงชื่อเต็มที่ดีกว่าสำหรับ "zero-knowledge proof" จะเป็น "zero-knowledge proof of Members" (พิสูจน์ได้ว่าคำ$x$ เป็นของภาษา $L$ซึ่งเทียบเท่ากับการบอกว่ามีอยู่เป็นพยานสำหรับคำสั่งที่เป็น "$x$ เป็นของ $L$").

เพื่อตอบคำถามหลักของคุณ:

ความแตกต่างที่แท้จริง (ถ้ามี) ระหว่าง ZKP กับ ZKPoK คืออะไร? ผู้คนใช้แนวคิดทั้งสองอย่างแยกไม่ออกหรือไม่?

มีความแตกต่างที่ชัดเจนในระดับเทคนิคและสิ่งนี้แปลเป็นความแตกต่างที่ชัดเจนในการใช้งาน ประการแรกการพิสูจน์แบบไม่มีความรู้จะถูกใช้เป็นส่วนประกอบในการสร้างอ็อบเจ็กต์การเข้ารหัสที่มีขนาดใหญ่ขึ้น (มีหลายร้อยตัวอย่าง แต่เพียงเพื่อตั้งชื่อไม่กี่อย่าง: การเข้ารหัสที่ตรวจสอบได้, การคำนวณที่ปลอดภัยโดยประสงค์ร้าย, ข้อมูลประจำตัวที่ไม่ระบุตัวตน ฯลฯ ) ในการประยุกต์ใช้การพิสูจน์ ZK จำนวนมากการพิสูจน์คุณสมบัติความรู้มีความสำคัญมาก นี่เป็นตัวอย่างเช่นกรณีในการเข้ารหัสที่ตรวจสอบได้และข้อมูลรับรองที่ไม่ระบุตัวตน - แต่ไม่ใช่ในการคำนวณที่ปลอดภัยโดยประสงค์ร้ายโดยที่ไม่มีความรู้มาตรฐานเพียงพอ

เพื่อให้คุณเห็นสัญชาตญาณว่าเมื่อใดที่ความแตกต่างมีความสำคัญนี่คือหลักการง่ายๆ:

  • หากคุณเพียงแค่ต้องการพิสูจน์ว่า "คุณสมบัติบางอย่างได้รับการยืนยันแล้ว" (ตัวอย่างเช่น: "รหัสลับที่คุณส่งให้ฉันมีบิต") การพิสูจน์ความรู้ที่เป็นศูนย์ (จากการเป็นสมาชิก) ก็เพียงพอแล้ว
  • หากคุณต้องการรับรองความถูกต้องของสุภาษิตไม่ว่าด้วยวิธีใดก็ตามคุณต้องมีการพิสูจน์ความรู้แบบศูนย์

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