انصاف تاس در تختهنرد: RNG سمت سرور واقعاً چطور کار میکند
هر کسی که تختهنرد آنلاین بازی کرده، دستکم یک بار نسخهای از همان جستوجو را تایپ کرده است: تاسها دستکاری شدهاند؟ این پرسش پاسخی واقعی میخواهد، نه شانه بالا انداختن تبلیغاتی. این نوشته پاسخ فنی است: تاس دیجیتال از کجا میآید، واقعاً چه چیزی میتواند خراب شود، و بازیِ درستساخته چطور با معماری، و نه با وعده، تاس ریختهشده را از دسترس همه بیرون میبرد.
تاس دیجیتال کجا زاده میشود
تاس واقعی را فیزیک تصادفی میکند: چرخش، جهش، سطح ماهوت. تاس دیجیتال عددی است که یک مولد عدد تصادفی (RNG) میسازد؛ نرمافزاری که اغلب از سختافزار هم تغذیه میشود و کارش تولید مقدارهایی است که هیچکس نتواند پیشبینی یا بازتولیدشان کند.
همه مولدها یکسان نیستند. یک مولد شبهتصادفی ساده، از همان نوعی که فهرست آهنگها را به هم میریزد، دنبالهای میسازد که بهتمامی با مقدار آغازینش، یعنی بذر، تعیین میشود. اگر بذر و الگوریتم را بدانید، هر عدد «تصادفی» آن مولد را تا ابد میدانید. برای فهرست آهنگ کافی است و برای بازیای که چیزی در آن بر سر میز است بیارزش. بازیهای جدی از مولدهای امنِ رمزنگارانه (CSPRNG) استفاده میکنند که پیوسته از آنتروپی جهان واقعی دوباره بذر میگیرند: نویز سختافزار، لرزش زمانبندیها، آشوب رویدادهای سیستمعامل. ویژگی تعریفکنندهشان دقیقاً همان چیزی است که بازی تاس لازم دارد: حتی مهاجمی که همه خروجیهای پیشین را دیده باشد هم نمیتواند خروجی بعدی را پیشبینی کند.
پرسش مهمتر: کجا اجرا میشود؟
حالا میرسیم به بخشی که بیشتر بازیکنها هرگز به فکرشان نمیرسد بپرسند. مهمتر از اینکه کدام مولد تاس شما را میسازد، این است که کجا اجرا میشود. اگر تاس روی دستگاه بازیکن ساخته شود، بازی از نظر ساختاری خراب است، هرچقدر هم الگوریتم خوب باشد: یک برنامه دستکاریشده میتواند آنقدر دوباره بریزد تا نتیجه را بپسندد، خروجی را در حافظه تغییر دهد، یا پیش از تصمیمگیری برای حرکت مقدارها را دید بزند. تاس سمت دستگاه یک وعده است، و وعدهها را میشود از دل یک برنامه بیرون کشید.
معماری درست مرجعبودن سرور است: تاس روی سرور بازی ریخته میشود، در محیطی که سختافزار هیچ بازیکنی به آن دست نمیرساند. دستگاه شما تاسی را میگیرد که همین حالا وجود دارد و فقط انیمیشنش را نشان میدهد. در بازی ما، همانطور که در صفحه بازی جوانمردانه توضیح دادهایم، این اصل خیلی فراتر از تاس میرود: سرور هر حرکت درخواستی را با قوانین میسنجد، و هر دو برنامه پیوسته تخته خودشان را با اثر انگشتی که سرور همراه هر بهروزرسانی پخش میکند مقایسه میکنند. هیچ لحظهای نیست که به دستگاه یک بازیکن، در چیزی که اهمیت داشته باشد، اعتماد شود.
همین یک تصمیم طراحی، دستههای کاملی از تقلب را یکجا از میان برمیدارد. کسی نمیتواند دوباره بریزد، چون تاس پیش از نوبت او ریخته شده است. کسی نمیتواند عدد بعدی را از دستگاه خودش بخواند، چون آنجا نیست که خوانده شود. و کسی نمیتواند بیسروصدا تخته را خم کند، چون تختهای که با تخته سرور نخواند دور انداخته و در فاصله یک رفتوبرگشت همگام میشود.
«جوانمردی اثباتپذیر» واقعاً یعنی چه
سالها پاسخ صنعت به پرسش «تاسها سالماند؟» یک گواهی بود: آزمایشگاهی یک بار مولد را وارسی میکند و مهری صادر میکند که از شما میخواهند به آن اعتماد کنید. ما فکر میکنیم چیزی محکمتر از یک مهر حق شماست. جوانمردی اثباتپذیر یعنی اصلاً لازم نیست به ما اعتماد کنید، چون هر تاس اثبات خودش را با خود میآورد. روش، یک طرح تعهد بههمراه تبادلی نوبتبهنوبت است و شکلش چنین است: برای هر بازیکن دستهای برگه مهرومومشده، بهعلاوه یک پاکت مهرومومشده از سوی ما.
- قفل. پیش از آنکه نخستین تاس ریخته شود، سرور یک بذر پنهان میسازد و اثر انگشت رمزنگارانهاش، یعنی درهمساز آن، را در حالی به شما میدهد که نتیجه هنوز نامعلوم است. در همان لحظه برنامه هر بازیکن هم دسته برگههای شمارهدار خودش را مهر میکند و فقط اثر انگشت آن دسته را منتشر میکند. هر سه اثر انگشت با هم در یک سند منجمد میشوند، پس هیچکدام را نمیشود بعداً با دیگری عوض کرد، و هیچکدام هم آنچه را میپوشاند لو نمیدهد.
- تبادل. تاسها از پیش تعیین نشدهاند. یکییکی و با فرمولی ثابت و همگانی ساخته میشوند و هر کدام به یک برگه از هر دو دسته نیاز دارد. در هر نوبت، بازیکنی که میخواهد بریزد نخست برگه بعدی خود را منتشر میکند، حریف تنها پس از قفلشدن آن برگه، برگه خودش را آزاد میکند، و تاس در آخر از دل هر دو برگه و بذر مهرشده محاسبه میشود. مهر هر برگه از برگه بعدیِ همان دسته گرفته شده است، و دقیقاً به همین دلیل نمیتوان برگهای را پس از واقعه عوض کرد. و چون آخرین ورودیِ نامعلوم همیشه آن سوی تخته نشسته است، هیچکس، از جمله خود ما، تا وقتی تصمیمی باز است که هنوز میتواند تاس را عوض کند، آن تاس را نمیداند.
- وارسی. وقتی بازی تمام شد، سرور پاکتش را باز میکند و بذر را نشانتان میدهد و کل سند منتشر میشود. شما بذر را درهم میسازید و میبینید که با اثر انگشت آغازِ کار میخواند، یعنی هرگز عوض نشده است؛ وارسی میکنید که هر برگه به همان دستهای تعلق دارد که آن طرف به آن متعهد شده بود؛ سپس همان فرمول همگانی را اجرا میکنید و تکتک تاسها را خودتان دوباره به دست میآورید. اگر یک تاس هم کمی جابهجا شده بود، محاسبه دوباره نمیخواند و دستکاری انکارناپذیر میشد.
تمام فرق میان «به گواهی ما اعتماد کن» و «خودت وارسی کن» همین است. لازم نیست باور کنید تاسهای ما سالماند؛ میتوانید وارسیشان کنید، هر بار یک بازی تمامشده، با ریاضیاتی که هر کسی میتواند اجرایش کند. صفحه بازی جوانمردانه ابزاری دارد که دقیقاً همین کار را میکند: یک بازی تمامشده به آن بدهید و ببینید هر تاس، جلوی چشمتان، از روی سند منتشرشده دوباره ساخته میشود. تنها کاری که یک صفحه عمومی نمیتواند بکند این است که تأیید کند این سند مال بازی شماست، چون تنها دستگاه شما نسخه آن اثر انگشتهایی را نگه داشته که پیش از شروع قفل کرده بود؛ آن وارسی آخر در خود برنامه انجام میشود.
یک نکته صادقانه که این اثبات تغییرش نمیدهد: تاس جوانمردانه اثباتپذیر همچنان تاس نرم و مؤدب و یکدرمیان نیست. بذری که میشود وارسیاش کرد، توده و رگبار و خشکسالی میسازد، دقیقاً با همان بسامدی که احتمال پیشبینی میکند. جریانی که هیچ رگباری نداشته باشد، همان مشکوکش است. تصادف واقعی تودهای است، و درست به همین دلیل است که اینهمه دستکاریشده به نظر میرسد.
چرا تاس جوانمردانه دستکاریشده حس میشود
و این ما را میرساند به روانشناسی، چون حس دستکاریشدن تاسها واقعی است، حتی وقتی خود تاسها نیستند. سه سوگیریِ خوبمستندشده این کار را میکنند:
حافظه گزینشی. شبی را به یاد دارید که چهار نوبت پشت سر هم پشت میله جا ماندید. صدها ورود عادی پیش از آن را به یاد ندارید. نتیجههای دردناک پررنگتر ثبت میشوند و هر بازیکن باتجربه موزهای خصوصی از بیعدالتیها با خود دارد و هیچ سندی از روزهای معمولی.
قانون اعداد کوچک. آدمها انتظار دارند نمونههای ریز شبیه میانگینهای بلندمدت باشند. در ۳۶ ریخت «باید» هر تاس تقریباً یک بار بیاید، اما نمونههای واقعیِ ۳۶تایی بهشدت ناهموارند: بعضی عددها اصلاً نمیآیند و بعضی سه برابر میآیند. یک شب تختهنرد نمونهای بسیار کوچک است. پراکندگی بر آن حاکم است، و پراکندگی شخصی حس میشود.
نامتقارنیِ باخت. شانس ۱۷ از ۳۶ که به شما بخورد، بیعدالتی حس میشود؛ آن ۱۹ باری که نمیخورد اصلاً حس نمیشود. و چون تختهنرد پیوسته رویدادهای ۳۰ تا ۷۰ درصدی را تعیین تکلیف میکند، عرضهای پایدار از نتیجههای «غیرممکن» هست که دقیقاً با نرخ ممکن خودشان میرسند.
پادزهر، دانستن عددهای واقعی است. هر عدد مشخص در ۱۱ ریخت از ۳۶ میآید. جفت هر شش ریخت یک بار میآید. بلاتی که شش پیپ دورتر باشد نزدیک نیمی از مواقع زده میشود. راهنمای مبانی احتمال ما تمام جدول را باز میکند، و همین که این عددها در ذهنتان جا بگیرد، بیشتر لحظههای «دستکاریشده» خودشان را دوباره در دسته روزهای عادی طبقهبندی میکنند.
پرسش انگیزه
یک نکته صادقانه دیگر: گرداننده یک بازی تختهنرد از تاس ناسالم چیزی به دست نمیآورد و همهچیز را از دست میدهد. بازیکنان رقابتی، همانهایی که سالها میمانند، دقیقاً کسانیاند که احتمالها را دنبال میکنند و ناهنجاری را میبینند. سامانههای امتیازدهی خودشان رد ممیزی عمومیاند: اگر تاسها بهطور سامانمند به کسی رو میکردند، توزیع امتیازها به شکل قابل اندازهگیری جابهجا میشد. تاس جوانمردانه فضیلتی نیست که ما به نمایش بگذاریم؛ تنها مدل کسبوکار پایداری است که یک بازی مهارتی دارد.
چطور خودتان خیالتان را راحت کنید
حرف هیچ گردانندهای را، از جمله ما، همینطوری نپذیرید. نرخهای پایه را از راهنمای احتمال یاد بگیرید و بعد بازیهای خودتان را با همان عددها در ذهن تماشا کنید: شانس ورود مقابل تختهای با دو خانه بسته، بسامد جفتها در یک نشست طولانی، نرخ خوردن در شانسهای مستقیم. تاس سالم با سرعتی چشمگیر به پیشبینیهای جدول نزدیک میشود. و اگر جزئیات معماری را میخواهید، تعهدها و تبادل نوبتبهنوبت، ریختن تاس روی سرور، وارسی تخته در هر حرکت و همسانسازی حریف با Glicko-2، صفحه بازی جوانمردانه بیانیه کامل ساخت میز ماست، همراه با خود ابزار وارسی. آنوقت متغیری که بازیها را تعیین میکند همانی است که باید: اینکه تاسهایی را که میگیرید چقدر خوب بازی میکنید. راهنماهای استراتژی دقیقاً برای همین نوشته شدهاند.