บทช่วยสอน "How to Simulate It" ของ Lindell ใช้สิ่งที่เรียกว่า แบบสแตนด์อโลน โมเดลความปลอดภัย ดูหัวข้อ 10.1 สำหรับการสนทนา
โมเดลแบบสแตนด์อโลนจะวิเคราะห์ความปลอดภัยของอินสแตนซ์โปรโตคอลโดยแยกจากกัน โมเดล UC วิเคราะห์ความปลอดภัยในที่ที่มี "สิ่งอื่นๆ ที่เกิดขึ้นในโลก" ตามอำเภอใจพร้อมกับอินสแตนซ์ของโปรโตคอล "สิ่งอื่น" เหล่านั้นถูกจับโดยสิ่งนี้ สิ่งแวดล้อม เครื่องในคำจำกัดความของ UC
ในรูปแบบสแตนด์อโลน เรากำหนดความปลอดภัยเป็น "สำหรับศัตรูทุกคนที่โจมตีโปรโตคอล จะมีตัวจำลองที่เหมือนจริง $\ประมาณ$ ในอุดมคติ" โปรดทราบว่าโปรแกรมจำลองสามารถพึ่งพาฝ่ายตรงข้ามได้ด้วยวิธีตามอำเภอใจ โดยเฉพาะอย่างยิ่ง สิ่งหนึ่งที่โปรแกรมจำลองสามารถทำได้คือเรียกใช้โปรแกรมของฝ่ายตรงข้ามหลายๆ ครั้ง บ่อยครั้ง กรอกลับ โปรแกรมปฏิปักษ์ไปสู่สถานะก่อนหน้า
ในแบบจำลอง UC คำจำกัดความความปลอดภัยจะขยายออกไป: "สำหรับศัตรูทุกคนที่โจมตีโปรโตคอล จะมีตัวจำลองที่ สำหรับทุกสภาพแวดล้อม, จริง $\ประมาณ$ ในอุดมคติ" ตอนนี้โปรแกรมจำลองแบบเดียวกันต้องใช้งานได้กับทุกสภาพแวดล้อม ซึ่งจำกัดความสามารถของมันอย่างมาก สภาพแวดล้อมอาจคาดหวังที่จะพูดคุยกับโปรแกรมของฝ่ายตรงข้ามในระหว่างการดำเนินการของโปรโตคอล การย้อนกลับของฝ่ายตรงข้ามในกรณีนี้จะทำให้โลกในอุดมคติดู แตกต่างจากโลกแห่งความเป็นจริงมาก เนื่องจากเครื่องจำลองไม่สามารถย้อนกลับสภาพแวดล้อมได้เช่นกันเป็นไปได้ที่จะแสดงว่าโปรแกรมจำลองต้องดำเนินการโปรแกรมของฝ่ายตรงข้ามใน "เส้นตรง" (ไม่มีการย้อนกลับ)
นี่คือตัวอย่างของฟังก์ชันที่สามารถคำนวณได้อย่างปลอดภัยในรูปแบบสแตนด์อโลน แต่ไม่ใช่ UC ตัวอย่างมาจาก กระดาษแผ่นนี้. ฝ่ายหนึ่งเลือกแถวและอีกฝ่ายหนึ่งเลือกคอลัมน์ และผลลัพธ์จะถูกกำหนดโดยตารางนี้:
$$
\begin{อาร์เรย์}{cccc}
0 & 0 & 1 & 1 \
2 & 3 & 2 & 3
\end{อาร์เรย์}
$$
โปรโตคอลแบบสแตนด์อโลนนั้นง่ายมาก: ผู้เล่นแถวประกาศอินพุตของพวกเขา จากนั้นผู้เล่นคอลัมน์ (ตอนนี้รู้อินพุตของทั้งสองฝ่าย) คำนวณเอาต์พุตและประกาศ
ทำไมถึงปลอดภัย? เครื่องจำลองสำหรับผู้เล่นแถวที่เสียหายนั้นเป็นเรื่องเล็กน้อย -- สิ่งแรกที่เกิดขึ้นในโปรโตคอลคือผู้เล่นแถวประกาศการป้อนข้อมูล ดังนั้นเครื่องจำลองสามารถดึงข้อมูลได้อย่างง่ายดาย
การจำลองสำหรับผู้เล่นคอลัมน์ที่เสียหายนั้นยุ่งยากกว่าเล็กน้อย เนื่องจากการเลือกข้อความโปรโตคอลอาจขึ้นอยู่กับสิ่งที่ผู้เล่นแถวพูดในข้อความโปรโตคอลแรก! อย่างไรก็ตาม ตัวจำลองสามารถเรียกใช้ฝ่ายตรงข้ามได้สองครั้ง (เช่น กรอกลับ) และดูว่ามันจะตอบสนองต่อข้อความแรก "แถวบนสุด" (ตอบกลับด้วย 0 หรือ 1) และข้อความแรก "แถวล่าง" (ตอบกลับด้วย 2 หรือ 3) อย่างไร มี 4 วิธีที่เป็นไปได้ที่โปรแกรมเล่นคอลัมน์ที่เสียหายอาจตอบสนองโดยรวม และเนื่องจากโครงสร้างของฟังก์ชันนี้ แต่ละวิธีจะสอดคล้องกับอินพุตที่ถูกต้องสำหรับฟังก์ชันนี้สำหรับโปรแกรมเล่นคอลัมน์ ดังนั้นตัวจำลองจึงสามารถแยกอินพุตของผู้เล่นคอลัมน์ได้อีกครั้ง
อย่างไรก็ตาม เป็นไปได้ที่จะพิสูจน์ (แต่ไม่ใช่เรื่องเล็กน้อย) ว่าไม่มีโปรโตคอลที่ปลอดภัยสำหรับฟังก์ชันนี้ในแบบจำลอง UC กลยุทธ์การย้อนกลับที่ฉันอธิบายนั้นหลีกเลี่ยงไม่ได้สำหรับฟังก์ชันนี้