Đại lý nghịch cảnh có thể lật xu?


9

Tôi đã suy nghĩ về các trò chơi ngang hàng bằng cách xem xét một trò chơi tung đồng xu đơn giản.

Bạn mở phiên bản P2PCoinFlipping Beta 2.3 và nó hiển thị danh sách các máy chủ tên người chơi. Sau khi chọn máy chủ gần nhất, bảng điểm của những người chơi may mắn nhất sẽ xuất hiện. Bạn chọn người chơi xếp hạng cao nhất và trò chơi bắt đầu. Kể từ khi bạn bắt đầu trận chiến, người chơi đối thủ sẽ chọn bên xu, đầu và bạn được chỉ định đuôi. Một hình ảnh nhỏ xinh xắn xuất hiện hiển thị một đồng xu đang rơi trên đầu. Quá tệ, bạn thua.

Nhưng làm thế nào để bạn biết kết quả là công bằng?

Nếu kết quả được chọn trên máy tính của bạn, bạn có thể chỉnh sửa chương trình để chọn chiến thắng và áp dụng tương tự cho đối thủ. Trò chơi không mang tính quyết định nên bạn dường như không thể xác nhận kết quả.

Có thể có nhiều tác nhân đối nghịch độc lập đồng ý về một sự kiện không xác định?


Mặc dù không trả lời câu hỏi, đây là lý do tại sao nhiều người chơi dựa trên máy chủ là tốt - hãy để máy chủ làm trọng tài viên. Một ý tưởng thú vị sẽ là dựa vào một số dịch vụ của bên thứ ba như là người gửi tiền xu. Ví dụ, một người có thể sử dụng trình tạo GUID trực tuyến (như guidegenerator.com ) làm cơ sở cho một hệ thống không?
Tim Holt

Câu trả lời:


6

Thủ tục này sẽ thực hiện công việc:

  1. mỗi trong số hai đồng nghiệp tạo ra một số ngẫu nhiên.
  2. mỗi đồng đẳng tạo ra một hàm băm của số đó và gửi nó cho các đồng đẳng khác.
  3. hoặc ngang hàng từ chối yêu cầu nếu nó có cùng hàm băm mà nó đã gửi.
  4. một khi cả hai đồng nghiệp xác nhận việc nhận các giá trị băm của nhau, thì sau đó gửi cho nhau số ngẫu nhiên thực tế của nó.
  5. mỗi đồng đẳng xác minh rằng hàm băm được gửi bởi người kia thực sự là hàm băm của số ngẫu nhiên. từ chối trao đổi.
  6. kết quả của việc lật đồng xu là XOR của bit có ý nghĩa nhỏ nhất của mỗi số, nghĩa là

    (a & 1) ^ (b & 1)

Một giải pháp thay thế:

  1. Mỗi người trong số hai người quyết định giữa họ sẽ quyết định ai nên đi trước. Hãy gọi chúng là A và B, chỉ là bản gốc.
  2. Peer A tạo số ngẫu nhiên của nó, tạo ra một hàm băm muối từ nó và gửi hàm băm đến ngang hàng B.
  3. B tạo số ngẫu nhiên của nó và gửi nó đến A.
  4. A gửi số ngẫu nhiên của nó đến B.
  5. B xác minh rằng băm muối là băm của số mà nó đã nhận được.
  6. kết quả của việc lật đồng xu là XOR của bit có ý nghĩa nhỏ nhất của mỗi số, như trên.

Tôi đã hỏi câu hỏi này trên trang web mật mã và đã chứng minh rằng nó khá an toàn. Rõ ràng đây là một biến thể của chương trình Cam kết .


1
Giao thức này như được mô tả là dễ bị tấn công phát lại, trong đó một đồng nghiệp chỉ lặp lại các thông điệp của các đồng nghiệp khác để buộc kết quả là 0. Tuy nhiên, có một số sửa đổi đơn giản có thể được thực hiện để ngăn chặn cuộc tấn công này.
Ilmari Karonen

Phiên bản này sẽ ổn.
Michael Slade

Làm thế nào điều này ngăn chặn một đồng nghiệp chỉ đơn giản là chọn một số thay vì tạo ngẫu nhiên nó?
Kylotan

@Kylotan: Không, nhưng miễn là ít nhất một trong số các đồng nghiệp chọn ngẫu nhiên, kết quả sẽ là ngẫu nhiên.
Ilmari Karonen

2
Một đồng đẳng không có gì để đạt được ngay cả khi chọn 0 mọi lúc, bởi vì điều này mang lại lợi thế cho các đồng nghiệp khác. Kết quả cuối cùng phụ thuộc như nhau vào các con số được đóng góp bởi cả hai đồng nghiệp.
Michael Slade

2

Nó chỉ ra rằng không chỉ các tác nhân nghịch cảnh có thể lật đồng xu, mà các tác nhân đối nghịch có thể chơi bài xì phé .

Điều đó nói rằng, nó có xu hướng cực kỳ tính toán, và khá khó để có được đúng. Có lẽ nó không xứng đáng với nỗ lực thực hiện. Hãy xem có bao nhiêu giao thức nhiều người chơi dễ bị tổn thương trước một máy chủ độc hại (cụ thể là: tất cả chúng đều biết) và mức độ phổ biến của chúng, và đơn giản là nó không giống như sử dụng thời gian thực tế.

StarCraft II là một ví dụ tốt. Đây là một trò chơi trong đó trinh sát là rất quan trọng và biết kẻ thù đang làm gì có thể mang lại lợi thế phi thường, và các giải thưởng năm con số hoặc lớn hơn thường xuyên dựa trên kết quả. . . và cả hai máy tính đều có toàn bộ trạng thái trò chơi được lưu trữ mọi lúc! Thật là tầm thường khi viết một chương trình cho phép bạn theo dõi trực tiếp đối thủ và có được một chân khổng lồ trên chúng.

Hóa ra, không ai trong số các đối thủ cạnh tranh nghiêm trọng sử dụng các chương trình này. Thật quá dễ dàng để phát hiện ("này, Jim, làm thế nào để bạn luôn biết những gì tôi đang xây dựng ngay khi tôi đang xây dựng nó?") Và không đáng để gặp rắc rối.

Điều đó nói rằng, nếu bạn muốn biết thêm thông tin, bạn sẽ muốn xem xét chi tiết về mật mã - điều này thực sự không nằm trong lĩnh vực phát triển trò chơi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.