เรามาเริ่มกันที่ผมหมายถึงสัญญาณสุ่มแบบเข้ารหัส (RB)
RB เป็นโปรโตคอลระหว่างบางฝ่ายที่สร้างค่าแบบสุ่มทั้งหมดเพื่อให้:
- ฝ่ายเหล่านี้ไม่ไว้วางใจซึ่งกันและกัน
- ผลลัพธ์นั้นสามารถตรวจสอบได้แบบสาธารณะ (ทุกคนสามารถตรวจสอบได้ว่าผลลัพธ์นั้นถูกสร้างขึ้นอย่างถูกต้องโดยโปรโตคอล)
- ผลลัพธ์ไม่เป็นกลาง: ไม่มีฝ่ายใดสามารถสร้างอคติในผลลัพธ์ได้
- ผลลัพธ์นั้นไม่สามารถคาดเดาได้: ไม่มีตัวใดที่สามารถทำนายเอาต์พุตถัดไปจากเอาต์พุตปัจจุบันได้
วิธีแรกที่ใช้ง่ายคือคอมมิชชันและเปิดเผย ซึ่งใช้ไม่ได้!
ทุกคนเลือกค่าสุ่มลับ $s_i$ และมุ่งมั่นกับมัน จากนั้นในรอบที่สองพวกเขาจะเปิดเผยความลับของพวกเขา
ผลลัพธ์เป็นแบบสุ่ม คาดเดาไม่ได้ และตรวจสอบได้ต่อสาธารณะ แต่ไม่เป็นกลาง
ผู้ประสงค์ร้ายสามารถรอจนกว่าร่างกายทุกส่วนจะเปิดเผยความลับ จากนั้นเธอก็ตัดสินใจว่าสิ่งนี้ดีสำหรับเธอที่จะเปิดเผยหรือไม่ และเธออาจถอนตัวจากการเปิดเผยความลับของมัน
จากนั้นมีวิธีแก้ปัญหาหลายอย่างตามฟังก์ชันการหน่วงเวลาแบบสุ่มหรือการเข้ารหัสเกณฑ์ (สำหรับฉัน วิธีหนึ่งที่เข้าใจได้มากที่สุดคือวิธีตามลายเซ็น BSL เกณฑ์จากบริษัท Dfinity)
ตอนนี้สามารถใช้การเข้ารหัสได้ที่ไหน? เหตุใด Oracle แบบสุ่ม (+ Fiat-Shamir) จึงไม่เพียงพอ
ฉันเข้าใจว่าสิ่งนี้มีประโยชน์ในแอปพลิเคชันที่ไม่ควรทราบความท้าทายในการประทับเวลาพิเศษ
ตัวอย่างเช่น หากผู้จัดเก็บข้อมูลต้องการพิสูจน์ว่า ณ เวลาประทับ $t$ ยังคงมีข้อมูลอยู่ ควรใช้ความท้าทายที่สร้างโดย RB ณ เวลาประทับ $t$ และให้พิสูจน์ตามความท้าทายนี้ มิฉะนั้นสามารถสร้างความท้าทายได้ด้วยตัวเอง (โดย RO เช่น) ลบข้อมูลและประทับเวลา $t$ อ้างว่ามีข้อมูลเพราะสามารถสร้างหลักฐานตามข้อมูลและความท้าทาย
แต่ถ้าไม่มีการประทับเวลา ผมก็ไม่เห็นประโยชน์อะไรที่จะใช้ RB แทน RO ฉันคิดว่าสำหรับแอปพลิเคชันที่ไม่ใช่การประทับเวลา RO นั้นใช้งานได้จริงมากกว่า
ดังนั้นความเข้าใจของฉันถูกต้องหรือไม่? ฉันยังคงเห็นเอกสารบางฉบับที่ใช้ผลลัพธ์ของ RB เป็นความท้าทาย (หรือเพียงสำหรับการสร้างแบบสุ่ม) แทนที่จะใช้ RO (ในขณะที่ไม่มีแนวคิดเรื่องเวลา) และฉันไม่รู้ว่าทำไม!