همانگونه که از عنوان پرسش برمیآید، ما به دنبال یافتن راهی هستیم که اثبات کند ما اطلاعات خاصی را در اختیار داریم. در عین حال، نمیخواهیم هیچ دادهای (حتی کوچک) از اطلاعاتمان را به دیگران بدهیم (تا مدتی)! چگونه چنین چیزی ممکن است؟!
به همین منظور با طرح مسئلهای بسیار ساده، سعی میکنیم به سمت این ایده (که روشی بسیار کاربردی در دنیای امروز رمزنگاریِ اطلاعات است) حرکت کنیم.
احتمالاً گستره وسیع کاربردهای این ایده ساده، شما را شگفتزده خواهد کرد (همچنین مثالهای ساده دیگری را از کاربرد همین ایده، در دیدگاههای ذیل همین پرسش آوردهایم). با ما همراه باشید …
فرض کنید من و شما میخوایم از راه دور و از طریق یه نرمافزار پیامرسان با هم سر قیمت یه کالایی توافق کنیم. مثلاً من میخوام یه چیزی رو به شما بفروشم.
من پیش خودم میگم «اگه اینو ۱۰۰۰ از من برداره، حاضرم بدم، ولی اگه پایینتر بخواد، نمیدم».
از طرفی نمیدونم شما چقدر حاضری بدی. من احتمال میدم تا ۱۵۰۰ هم حاضر باشی براش بدی. در نتیجه نمیخوام کف قیمت خودم رو (که همون ۱۰۰۰ باشه) لو بدم. چون اگر اون عدد رو بفهمید، دیگه حاضر نیستید بیشتر از اون پول بدید.
اون طرف، شما هم یه سقفی داری برای خودت که بالاتر از اون حاضر نیستی پرداخت کنی. طبیعتاً شما هم نمیخواید من اون سقف رو بدونم (چون اگه بدونم دیگه پایینتر از اون نمیدم).
حالا یه توافق منصفانه با هم میکنیم:
من میگم شما سقف قیمتت رو بگو، منم کف قیمتم رو میگم. اگه سقف شما (مثلاً ۹۰۰ تومن) از کف من (مثلاً ۱۰۰۰ تومن) پایینتر بود، که هیچی … معامله انجام نمیشه.
اگه مساوی هم بودن که خب معلومه چی میشه.
اما اگه سقف شما (مثلاً ۱۲۰۰) از کف من (مثلاً ۱۰۰۰) بیشتر بود، معامله با قیمت میانگین این دو عدد (۱۱۰۰) انجام میشه.
اما حالا مسئله اینه که کی اول بگه؟!
چون هر کی اول بگه، بعد اون یکی میتونه عدد خودش رو عوض کنه!
اگه حضوری بود معامله، هر دو نفر یواشکی روی یه کاغذ مینوشتن و بعد دونه دونه کاغذها رو باز میکردن. طبیعتاً اونی که دوم باز میکرد نمیتونست چیزی رو که روی کاغذ نوشته شده تغییر بده. بنابراین مسئله حل میشد.
اما اینجا پای فناوری اطلاعات در میونه (ارتباط از طریق یه پیامرسان اینترنتی). دادهها قراره توی شبکه جابهجا بشن و اونا رو نمیشه توی کاغذ قایم کرد!
بنابراین سؤال اینه که کی اول عددش رو بفرسته؟.
یه نکته: این مسئله، اصلش برای نرمافزارها و برنامههای کامپیوتریه … میخوایم از حلش به یکی از نکات جالبی که تو طراحی بیتکورن (!) وجود داره برسیم!!
حتماً میدونید که توی بیتکوین (و بقیه رمزارزها) حتی سازنده و خالق اون ارز نمیتونه کاری رو که بانکها انجام میدن (پول چاپ میکنن) انجام بده و بیتکوین برا خودش تولید کنه. یکی از نکاتی که باعث این ویژگی میشه تو جواب همین مسئله است.
همچنین توی بحث رمزنگاری اطلاعات و به طور خاص «امضای دیجیتال» کاربرد گسترده داره.
به خاطر همین، لطفاً پاسخهایی رو مثل اینکه «مکالمه تصویری برقرار کنن» یا «هر دو تاشون سر یه ساعت معین با هم بفرستن» بذارید کنار. اونجا رباتها میلیثانیهای و میکروثانیهای کار میکنن و از طرفی تأخیری که توی ارتباطات اینترنتی وجود داره، میتونه حتی بالاتر از یک ثانیه باشه. و این برای یه ربات یعنی یه عالمه وقت!!
اصلاً بذارید از حالت معما خارجش کنیم و به صورت یک مسئله بپرسیمش:
من چطوری میتونم عدد خودمو یه جوری به شما بگم که از یه طرف شما نتونی حدس بزنی که چنده و از طرفی من دیگه نتونم عدد خودمو تغییر بدم؟!