Score:15

สำรับไพ่ที่ยุติธรรมที่พิสูจน์ได้ซึ่งลูกค้าและเซิร์ฟเวอร์ใช้

ธง cn

สมมติว่าเซิร์ฟเวอร์เล่นเกมแบล็คแจ็คกับลูกค้า และไพ่จะถูกสับและแจกโดยเซิร์ฟเวอร์ การสับไพ่เองอาจหรือไม่ยุติธรรมก็ได้ แต่สิ่งที่ต้องแสดงให้เห็นก็คือไพ่ที่แจกจะไม่ถูกเปลี่ยนแปลงในระหว่างการเล่นเกม กล่าวคือ: หลังจากเริ่มมือ ไพ่ในสำรับไม่ได้แอบมี การสั่งซื้อเปลี่ยนแปลงโดยเซิร์ฟเวอร์

ฉันกำลังคิดวิธีแก้ปัญหาต่อไปนี้โดยใช้การเข้ารหัสและต้องการได้รับข้อเสนอแนะว่าระบบการผลิตจะยอมรับได้หรือไม่ ถ้าไม่ใช่ เพราะเหตุใด:

ขั้นตอนที่ 1) เซิร์ฟเวอร์จะสับสำรับไพ่อย่างลับๆ โดยเรียงลำดับดังนี้ (เราไม่ใส่ไพ่เพื่อความง่าย): [3, 9, 2, ..., A]

จากนั้นจะสร้างข้อความต่อไปนี้ M:
M = "สับไพ่: [3, 9, 2, ..., A] เลขสุ่ม: A96A...QT3"

หมายเลขสุ่มคือหมายเลขสุ่มที่เซิร์ฟเวอร์สร้างขึ้นภายในและเก็บเป็นความลับจนกว่าเกมจะจบลง ความยาวจะยาวพอที่จะป้องกันไม่ให้แฮชถูกแฮ็กโดยไคลเอนต์โดยใช้กำลังเดรัจฉาน (สมมติว่ามีความยาว 512 อักขระ)

ตอนนี้เซิร์ฟเวอร์จะแฮช M โดยใช้ sha-256 หรืออัลกอริธึมการแฮชที่เชื่อถือได้อื่นๆ เช่น: hash(M)

ขั้นตอนที่ 2) ก่อนเริ่มเกม เซิร์ฟเวอร์จะส่งแฮช (M) นี้ไปยังไคลเอนต์ ซึ่งไคลเอ็นต์เก็บไว้ ลูกค้าไม่มีทางรู้ M จากสิ่งที่ฉันรวบรวมได้

ขั้นตอนที่ 3) เกมเริ่มต้นขึ้น ไพ่จะถูกแจกตามลำดับการสับ ผู้เล่นทำการตัดสินใจ และเกมจะจบลงในที่สุด

ขั้นตอนที่ 4) ลูกค้าต้องการทราบว่าเกมมีความยุติธรรม กล่าวคือ เซิร์ฟเวอร์ไม่ได้โกงโดยการเปลี่ยนไพ่ระหว่างมือ ขณะนี้เซิร์ฟเวอร์ส่งข้อความ "M" ไปยังไคลเอนต์ในรูปแบบข้อความธรรมดาเพื่อแสดงสิ่งนี้

ขั้นตอนที่ 5) ไคลเอนต์เรียกใช้แฮช (M) และดูว่าตรงกับแฮช (M) ที่ได้รับในขั้นตอนที่ 1

นี่เป็นวิธีที่ยุติธรรมหรือไม่ในการพิสูจน์ว่าเกมมีความยุติธรรม โดยที่ไคลเอนต์หรือเซิร์ฟเวอร์ไม่สามารถโกงได้ ยกเว้นความเป็นไปได้ที่การสับเปลี่ยนนั้นไม่ได้เป็นการสุ่ม หากเซิร์ฟเวอร์ต้องเปลี่ยนไพ่จากการสับไพ่ดั้งเดิมในระหว่างมือ ลูกค้าจะเห็นสิ่งนี้ในขั้นตอนที่ 5 (การจัดลำดับจะแตกต่างอย่างชัดเจนกับลูกค้า หรือแฮชของข้อความที่ส่งในขั้นตอนที่ 4 จะต่างกับที่ส่งมาในขั้นตอนที่ 2) นอกจากนี้ แฮชเดียวจะถูกส่งต่อมือ ดังนั้นเซิร์ฟเวอร์จึงไม่สามารถสร้างแฮชจำนวนมากและส่งแยกกัน จากนั้นเลือกแฮชที่ดีที่สุดระหว่างมือ

marstato avatar
sa flag
คุณจะทำอย่างไรหากไคลเอ็นต์พบว่าแฮชเริ่มต้นและแฮชไคลเอ็นต์-คอมพิวเตอร์ไม่เท่ากัน
in flag
@marstato: ถ้าอย่างนั้นคุณก็รู้ว่าเซิร์ฟเวอร์ฉ้อโกงคุณ และ (หวังว่า) คุณสามารถยื่นเรื่องปฏิเสธการชำระเงินหรือบางอย่างได้ แต่ถ้าคุณใช้ Bitcoin ในการชำระเงิน คุณอาจโชคไม่ดี
marstato avatar
sa flag
@Kevin คุณหมายถึงยื่นเรื่องขอคืนเงินกับพวกที่ทำงานเซิร์ฟเวอร์หลอกลวงใช่ไหม
user4779 avatar
cn flag
@marstato ฉันจะหยุดเล่นเกม เซิร์ฟเวอร์ได้รับชื่อเสียงที่ไม่ดีและพบว่าเป็นการยากที่จะดึงดูดลูกค้าใหม่
in flag
@marstato: ไม่ กับบริษัทบัตรเครดิตของคุณ เช่นเดียวกับที่คุณทำกับธุรกรรมฉ้อฉลอื่นๆ ฉันไม่เคยได้ยินเรื่องการยื่นปฏิเสธการชำระเงินกับผู้ขาย เท่าที่ฉันทราบ นั่นไม่ใช่เรื่องสำคัญเลย
Hagen von Eitzen avatar
rw flag
หากขนาดแฮชเล็กเกินไป เซิร์ฟเวอร์อาจเริ่มต้นด้วยการสับไพ่สองครั้งที่แตกต่างกันเฉพาะในไพ่สองใบสุดท้าย และมองหาการชนกันระหว่างแฮชของสิ่งเหล่านี้เมื่อเปลี่ยนบิตพิเศษแบบสุ่ม (วันเกิดที่ขัดแย้งกัน)เมื่อเตรียมสำรับสองสำรับดังกล่าวแล้ว เซิร์ฟเวอร์อาจโกงด้วยการเดิมพันทั้งหมดหรือไม่มีเลยตามลำดับของไพ่สองใบสุดท้าย ... ดังนั้นลูกค้าควรส่งผลงานแบบสุ่มเพื่อให้อย่างน้อยสำรับรับประกันว่าจะไม่ขยันขันแข็ง เตรียมไว้
user4779 avatar
cn flag
@Hagen von Eitzen หือ? ฉันคิดว่า sha-256 ไม่มีการชนที่ทราบ นอกจากนี้ สิ่งที่คุณพูดจะละเมิดเอฟเฟกต์หิมะถล่ม
Toby Speight avatar
in flag
มีไพ่กี่ใบในสำรับ? แค่ซองการ์ด 52 ใบหรือมากกว่านั้น?
Score:22
ธง es

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

คุณสามารถกระชับสิ่งนี้เพิ่มเติมได้โดยการประกาศ 'seed' 128 บิตแทนการแสดงตำแหน่งการ์ดแต่ละใบทั้งหมด จากนั้นใช้ สับเปลี่ยนที่กำหนด ขึ้นอยู่กับเมล็ดพันธุ์นี้เพื่อสับไพ่

หากคุณทำเช่นนี้โดยใช้วิธีการสับเปลี่ยนที่ลิงก์ด้านบน คุณจะไม่จำเป็นต้องใช้ปัจจัยที่ทำให้ไม่เห็น ทั้งนี้เพราะตามนิยามแล้วก ซีเอสพีอาร์เอ็น สามารถทนต่อ "การทดสอบบิตถัดไป" ความรู้เกี่ยวกับผลลัพธ์บางส่วนของ CSPRNG จะไม่ทำให้การบังคับเมล็ดพันธุ์ง่ายขึ้นหรือให้ข้อได้เปรียบใด ๆ ในการคาดเดาไพ่ใบต่อไปในสำรับ

ดังนั้น, $commitment = hash(\texttt{128-bit seed})$.

โปรดทราบว่าจะมีการสับเปลี่ยนแบบสุ่มอย่างแท้จริง $log_2(52!)\approxeq225$ บิตของเอนโทรปี ซึ่งมากกว่าเอนโทรปีของเมล็ดพืช อย่างไรก็ตาม เป็นไปไม่ได้เลยที่จะกำหนดผลลัพธ์ของการสับไพ่เพียงครั้งเดียวซึ่งไม่สามารถหาได้ (จากผลโดยประมาณ $2^{225}$ การสับเปลี่ยนที่เป็นไปได้) และดังนั้นจึงไม่มีการปรับปรุงหากมีเมล็ดที่ใหญ่กว่า 128 บิต

Jacob Raihle avatar
us flag
การสับเปลี่ยนที่กำหนดขึ้นจากเมล็ด 128 บิตจะทำให้ไม่สามารถไปถึงการสับเปลี่ยนส่วนใหญ่ที่เป็นไปได้ (~ 225 บิต) ได้หรือไม่ สับเปลี่ยนที่เป็นไปได้ส่วนใหญ่จะไม่ถูกตีไม่ว่าจะมีกี่อันก็ตาม แต่นั่นดูเหมือนจะเป็นสิ่งที่รบกวนคนที่กังวลเกี่ยวกับความยุติธรรมของการสับเปลี่ยน
knaccc avatar
es flag
@JacobRaihle ด้วยเมล็ดขนาด 128 บิต เป็นไปไม่ได้เลยที่จะกำหนดผลลัพธ์ของการสับไพ่เพียงครั้งเดียวซึ่งไม่สามารถรับได้ (จากการสุ่มที่เป็นไปได้ประมาณ $2^{225}$) ดังนั้นมันจะบั๊กผู้คนในลักษณะเดียวกับที่บั๊กผู้คนว่ามีโอกาสที่ใครบางคนอาจบังคับเมล็ด 128 บิตเดียวกันแบบเดรัจฉานได้
ma flag
ฉันคิดว่าปัจจัยที่ทำให้ไม่เห็นเป็นความคิดที่ดี หากสำรับดิบถูกกำหนดแฮช หากถึงจุดหนึ่งไพ่ส่วนใหญ่ถูกเปิดเผยให้ผู้เล่นเห็น เขาสามารถบังคับไพ่ที่เหลือได้
knaccc avatar
es flag
@Nayuki นั่นเป็นจุดที่ยอดเยี่ยม ฉันได้แก้ไขคำตอบเพื่อระบุว่าเมล็ดพันธุ์นั้นจำเป็นสำหรับโครงการที่เสนอในคำถาม อย่างไรก็ตาม ไม่จำเป็นเมื่อใช้เมล็ดสับเปลี่ยนที่กำหนดขึ้นได้ เนื่องจากจะเท่ากับสามารถกำหนดความรู้บางอย่างของเมล็ด CSPRNG ตามผลลัพธ์ของ CSPRNG
Jack Aidley avatar
cn flag
สมมติว่าการสับไพ่ที่เป็นไปได้ส่วนใหญ่ที่มากมายและล้นหลามไม่สำคัญฟังดูเหมือนเป็นความผิดพลาดประเภทหนึ่งที่จะทำให้คาสิโนออนไลน์เสียเงินเป็นจำนวนมาก แม้แต่สัญญาณที่เล็กที่สุดก็สามารถแกว่งความสมดุลของความน่าจะเป็นได้
knaccc avatar
es flag
@JackAidley คุณกำลังใช้ตรรกะเดียวกันกับที่ทำให้ผู้คนกังวลว่ารหัสกระเป๋าเงิน bitcoin ที่เลือกแบบสุ่มอาจถูกบังคับโดยดุร้าย ไม่มีสัญญาณเล็ก ๆ น้อย ๆ ที่จะรับสัญญาณ ด้วยเหตุผลทางคณิตศาสตร์เดียวกันกับที่ความรู้เกี่ยวกับความมุ่งมั่นในการแฮชไม่ได้ถือเป็นสัญญาณเล็ก ๆ เกี่ยวกับเมล็ด เป็นเรื่องจริงในทางเทคนิคที่คุณสามารถประสบความสำเร็จได้ด้วยกำลังอันดุร้าย แต่คุณต้องเชื่อมั่นว่ามันไม่น่าเป็นไปได้ทางดาราศาสตร์
Jack Aidley avatar
cn flag
@knacc คุณไม่จำเป็นต้องบังคับอะไร คุณแค่ต้องการความน่าจะเป็นของการ์ด X ตามหลังการ์ด Y ที่จะไม่เป็น 1/52 อย่างแม่นยำ แม้ว่า 128 บิตจะทำให้การตรวจจับทำได้ยากขึ้นมาก แต่ด้วยเงินที่ต้องจ่าย ข้อบกพร่องใด ๆ จะถูกนำไปใช้ประโยชน์ สิ่งนี้เคยเกิดขึ้นกับคาสิโนออนไลน์ที่ล้มเหลวในการใช้อัลกอริทึมการสับที่เหมาะสมในอดีต แม้ว่าจะไม่อยู่ในระดับ 128 บิตก็ตาม
knaccc avatar
es flag
@JackAidley ที่มีความรู้เกี่ยวกับความมุ่งมั่นในการแฮช มันเป็นความจริงทางเทคนิคเช่นกันว่าหลังจากแจกไพ่ไปสองสามใบ (เนื่องจากปัญหาการชนกันของแฮช) คุณสามารถบอกได้อย่างมั่นใจ 100% ว่าไพ่ที่เหลือทั้งหมดในการสับไพ่จะเป็นอย่างไรอย่างไรก็ตาม เมื่อคุณเริ่มวัดปริมาณธรรมชาติทางดาราศาสตร์ของการบังคับเดรัจฉานที่เกี่ยวข้อง ภาพจะดูแตกต่างไปจากเดิมอย่างสิ้นเชิง
Score:21
ธง ar

เพื่อขยาย คำตอบของ knaccเป็นไปได้ที่จะใช้แผนการผูกมัดเพื่อพิสูจน์ (จนถึงจุดหนึ่ง) ว่าเซิร์ฟเวอร์ไม่ได้โกงระหว่างการสุ่ม เช่น แบบนี้:

  1. เซิร์ฟเวอร์เลือกหมายเลข 128 บิตแบบสุ่ม $x$ และปัจจัยที่ทำให้ไม่เห็น 128 บิต $r_x$และส่งความมุ่งมั่น $c_x = H(x \,||\, r_x)$ ให้กับลูกค้า
  2. ลูกค้าเลือกหมายเลข 128 บิตแบบสุ่ม $y$ และส่งไปยังเซิร์ฟเวอร์ (ไม่จำเป็นต้องมีข้อผูกมัดที่นี่)
  3. แฮชเซิร์ฟเวอร์ $x$ และ $y$ ร่วมกันเพื่อรับเมล็ดพันธุ์ 128 บิต $s = H(x \,||\, y)$.
  4. เซิร์ฟเวอร์ใช้ $s$ เป็นตัวตั้งต้นของ PRNG ที่กำหนดขึ้น และใช้เอาต์พุต PRNG เพื่อสับไพ่ตามกำหนด
  5. เกมนี้เล่นกับเด็คสับ
  6. ในตอนท้ายของเกมเซิร์ฟเวอร์จะเปิดเผย $x$ และ $r_x$ทำให้ไคลเอนต์สามารถตรวจสอบได้ว่าเด็คถูกสับอย่างถูกต้อง (และไม่ถูกแก้ไขหลังจากสับแล้ว)

โปรดทราบว่าเซิร์ฟเวอร์ สามารถ ยังคงโกงตามแฟชั่นโดยการตรวจสอบสำรับที่สับหลังจากขั้นตอนที่ 4 และยกเลิกเกม (เช่นแสร้งทำเป็นว่าการเชื่อมต่อหลุด) หากไม่ชอบเด็ค ดังนั้นไคลเอนต์ควรสงสัยเซิร์ฟเวอร์ที่หยุดการเชื่อมต่อระหว่างขั้นตอนที่ 2 และ 5 บ่อยครั้ง หรือแม้กระทั่งระหว่างเกมในขั้นตอนที่ 5 ตามหลักแล้ว ควรมีวิธีที่ไคลเอ็นต์สามารถขอให้เซิร์ฟเวอร์ดำเนินการต่อเกมที่ถูกขัดจังหวะ ณ จุดใดก็ได้ และลูกค้าควรจะเป็น มาก สงสัยเซิร์ฟเวอร์ที่ปฏิเสธที่จะทำเช่นนั้น

(การใช้กลไกการดำเนินการต่ออย่างปลอดภัยในลักษณะที่ใช้งานได้แม้ว่าเซิร์ฟเวอร์จะล่มและลืมสถานะเกมดูเหมือนจะทำได้ แต่อาจอยู่นอกขอบเขตของคำตอบนี้ ถามคำถามใหม่หากคุณสนใจ)

โปรดทราบว่าค่าที่ทำให้ไม่เห็น $r_x$ ไม่จำเป็นจริง ๆ ที่นี่ตั้งแต่ $x$ ตัวมันเองมีเอนโทรปีเพียงพอแล้วที่จะทำให้การบังคับอย่างดุร้ายเป็นไปไม่ได้ ในความเป็นจริงมันอาจจะปลอดภัยกว่าเล็กน้อยที่จะละเว้น $r_x$ และเพียงแค่ทำ $x$ ตัวเอง 256 แทนที่จะเป็น 128 บิตยาว

ความยาวบิตของ $y$ และ $s$ สามารถเพิ่มได้หากต้องการ 128 บิตเป็นเพียงขั้นต่ำที่ปลอดภัยและใช้งานได้จริง ไม่มีประโยชน์ที่จะทำ $s$ ยาวกว่าความยาวรวมกันของ $x$ และ $y$ กันก็ตาม

Toby Speight avatar
in flag
นี่เป็นสิ่งที่ดี - ช่วยจัดการกับปัญหาในคำถาม (ฝังไว้อย่างเรียบร้อยโดยสมมติว่าอัลกอริทึมการแฮช _trusted_) ของความเป็นไปได้ที่เซิร์ฟเวอร์สามารถสร้างการชนกันของแฮชได้หากเลือกเมล็ดพันธุ์ของตัวเองได้อย่างอิสระ

โพสต์คำตอบ

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