ฉันกำลังทำแบบฝึกหัดต่อไปนี้จาก Introduction of Modern Cryptography จาก Katz และ Lindell:
อนุญาต $F$ เป็นฟังก์ชัน pseudorandom รักษาความยาว สำหรับการสร้างฟังก์ชันคีย์ต่อไปนี้ $F' : \{0,1\}^n \times \{0,1\}^{n-1} \rightarrow \{0,1\}^{2n}$, ระบุว่า $F'$ เป็นฟังก์ชันสุ่มเทียม ถ้าใช่ พิสูจน์เลย; ถ้าไม่แสดงการโจมตี
(ง) $F'_k(x) \stackrel{def}{=} F_k(0||x) || F_k(x||1)$
ฉันเข้าใจว่าในกรณีนี้ $F'_k$ ไม่ใช่ฟังก์ชันสุ่มเทียมเนื่องจากเราสามารถแยกความแตกต่างได้อย่างมีประสิทธิภาพและด้วยความน่าจะเป็นที่ไม่สำคัญ $F'$ จากฟังก์ชันสุ่มโดยการสอบถาม $x = 0^{n-2}||1$ และ $x = 0^{n-1}$และตรวจสอบว่าซ้ายสุด $n$ บิตของแบบสอบถามแรกมีค่าเท่ากับด้านขวาสุด $n$ บิตของข้อความค้นหาที่สอง
อย่างไรก็ตาม ฉันยังสามารถเป็นศัตรูได้ $A$ ที่ทำให้เห็นความแตกต่าง $F'$ จากฟังก์ชันสุ่ม และใช้เป็นรูทีนย่อยในการโจมตี $F$. สำหรับคำถามใด ๆ $x$ จาก $A$, ฉันสอบถาม $0||x$ และ $x||1$เชื่อมผลลัพธ์และส่งคืนให้ $A$. อะไรก็ตาม $A$ คำตอบนั่นจะเป็นคำตอบของฉัน
ขออภัย ฉันไม่สามารถให้เหตุผลได้ว่าเหตุใดการพิสูจน์จึงผิด อาจเป็นเพราะมีความเป็นไปได้ต่ำที่ฉันสามารถใช้ผลลัพธ์ได้ $A$ ที่จะทำลาย $F$? แต่ฉันจะทำพิธีได้อย่างไรถ้าฉันไม่รู้อะไรเลย $A$?