به محفل ریاضی ایرانیان خوش آمدید! لطفا برای استفاده از تمامی امکانات عضو شوید
سایت پرسش و پاسخ ریاضی
+4 امتیاز
162 بازدید
در دبیرستان و دانشگاه توسط mirismaili (350 امتیاز)
ویرایش شده توسط mirismaili

همان‌گونه که از عنوان پرسش برمی‌آید، ما به دنبال یافتن راهی هستیم که اثبات کند ما اطلاعات خاصی را در اختیار داریم. در عین حال، نمی‌خواهیم هیچ داده‌ای (حتی کوچک) از اطلاعاتمان را به دیگران بدهیم (تا مدتی)! چگونه چنین چیزی ممکن است؟!

به همین منظور با طرح مسئله‌ای بسیار ساده، سعی می‌کنیم به سمت این ایده (که روشی بسیار کاربردی در دنیای امروز رمزنگاریِ اطلاعات است) حرکت کنیم.

احتمالاً گستره وسیع کاربردهای این ایده ساده، شما را شگفت‌زده خواهد کرد (هم‌چنین مثال‌های ساده دیگری را از کاربرد همین ایده، در دیدگاه‌های ذیل همین پرسش آورده‌ایم). با ما همراه باشید …

فرض کنید من و شما می‌خوایم از راه دور و از طریق یه نرم‌افزار پیام‌رسان با هم سر قیمت یه کالایی توافق کنیم. مثلاً من می‌خوام یه چیزی رو به شما بفروشم.

من پیش خودم می‌گم «اگه اینو ۱۰۰۰ از من برداره، حاضرم بدم، ولی اگه پایین‌تر بخواد، نمی‌دم».

از طرفی نمی‌دونم شما چقدر حاضری بدی. من احتمال می‌دم تا ۱۵۰۰ هم حاضر باشی براش بدی. در نتیجه نمی‌خوام کف قیمت خودم رو (که همون ۱۰۰۰ باشه) لو بدم. چون اگر اون عدد رو بفهمید، دیگه حاضر نیستید بیشتر از اون پول بدید.

اون طرف، شما هم یه سقفی داری برای خودت که بالاتر از اون حاضر نیستی پرداخت کنی. طبیعتاً شما هم نمی‌خواید من اون سقف رو بدونم (چون اگه بدونم دیگه پایین‌تر از اون نمی‌دم).


حالا یه توافق منصفانه با هم می‌کنیم:

من می‌گم شما سقف قیمتت رو بگو، منم کف قیمتم رو می‌گم. اگه سقف شما (مثلاً ۹۰۰ تومن) از کف من (مثلاً ۱۰۰۰ تومن) پایین‌تر بود، که هیچی … معامله انجام نمی‌شه.

اگه مساوی هم بودن که خب معلومه چی می‌شه.

اما اگه سقف شما (مثلاً ۱۲۰۰) از کف من (مثلاً ۱۰۰۰) بیشتر بود، معامله با قیمت میانگین این دو عدد (۱۱۰۰) انجام می‌شه.


اما حالا مسئله اینه که کی اول بگه؟!

چون هر کی اول بگه، بعد اون یکی می‌تونه عدد خودش رو عوض کنه!


اگه حضوری بود معامله، هر دو نفر یواشکی روی یه کاغذ می‌نوشتن و بعد دونه دونه کاغذها رو باز می‌کردن. طبیعتاً اونی که دوم باز می‌کرد نمی‌تونست چیزی رو که روی کاغذ نوشته شده تغییر بده. بنابراین مسئله حل می‌شد.


اما این‌جا پای فناوری اطلاعات در میونه (ارتباط از طریق یه پیام‌رسان اینترنتی). داده‌ها قراره توی شبکه جابه‌جا بشن و اونا رو نمی‌شه توی کاغذ قایم کرد!

بنابراین سؤال اینه که کی اول عددش رو بفرسته؟.


یه نکته: این مسئله، اصلش برای نرم‌افزارها و برنامه‌های کامپیوتریه … می‌خوایم از حلش به یکی از نکات جالبی که تو طراحی بیت‌کورن (!) وجود داره برسیم!!

حتماً می‌دونید که توی بیت‌کوین (و بقیه رمزارزها) حتی سازنده و خالق اون ارز نمی‌تونه کاری رو که بانک‌ها انجام می‌دن (پول چاپ می‌کنن) انجام بده و بیت‌کوین برا خودش تولید کنه. یکی از نکاتی که باعث این ویژگی می‌شه تو جواب همین مسئله است.

هم‌چنین توی بحث رمزنگاری اطلاعات و به طور خاص «امضای دیجیتال» کاربرد گسترده داره.

به خاطر همین، لطفاً پاسخ‌هایی رو مثل این‌که «مکالمه تصویری برقرار کنن» یا «هر دو تاشون سر یه ساعت معین با هم بفرستن» بذارید کنار. اون‌جا ربات‌ها میلی‌ثانیه‌ای و میکروثانیه‌ای کار می‌کنن و از طرفی تأخیری که توی ارتباطات اینترنتی وجود داره، می‌تونه حتی بالاتر از یک ثانیه باشه. و این برای یه ربات یعنی یه عالمه وقت!!

اصلاً بذارید از حالت معما خارجش کنیم و به صورت یک مسئله بپرسیمش:

من چطوری می‌تونم عدد خودمو یه جوری به شما بگم که از یه طرف شما نتونی حدس بزنی که چنده و از طرفی من دیگه نتونم عدد خودمو تغییر بدم؟!

توسط mirismaili (350 امتیاز)
ویرایش شده توسط mirismaili
+1
خیلی واضحه که یه چنین روشی می‌تونه برای جلوگیری از تقلب توی مزایده‌ها و مناقصه‌ها هم استفاده بشه … همه عدد خودشونو یه جوری اعلام می‌کنن که هیچ‌کس (حتی مسئول برگزاری) نتونه بفهمه چنده، ولی از یه طرف خود اون فرد هم نمی‌تونه عدد خودشو عوض کنه.
اما حالا این‌که استفاده می‌کنن یا نه، یه بحث دیگه‌ست.
توسط mirismaili (350 امتیاز)
+1
مثال دیگه از کاربرد این روش:

من می‌خوام یه وصیت‌نامه بنویسم. متن وصیت‌نامه رو می‌دم به یه نفر که بعد از من، برای دیگران بخونه. تا این‌جاش مثل بقیه وصیت‌نامه‌هاست.
اما مردم چطوری می‌تونن به اون فرد اعتماد کنن که دست نمی‌بره تو وصیت‌نامه؟ الان این کار رو با مهر و امضا و … انجام می‌دن. اما یه راه بهترش استفاده از همین روشه! چطوری؟!
با استفاده از این روش، می‌تونم متن وصیت‌نامه‌مو (بدون این‌که محتویاتشو افشا کرده باشم) تثبیت کنم! این‌طوری اون فرد، نمی‌تونه دست ببره تو وصیت‌نامه.
توسط mirismaili (350 امتیاز)
+1
مثال دیگه از کاربرد این روش:

فرض کنید شما یه آدم تأثیرگذار تو دنیا هستید. حالا آینده قیمت یه چیزی رو پیش‌بینی کردید و الان می‌خواید این پیش‌بینی‌تون رو به همه بگید. هدفتون اینه که بعد از یه مدت که به اون قیمت رسید، قدرت پیش‌بینی خودتون رو به رخ همه بکشید.
اما یه نکته! شما چون آدم تأثیرگذاری هستید، ممکنه کمترین اظهار نظری از شما بازار رو تحت تأثیر قرار بده (مثل کاری که اخیراً ایلان ماسک با بیت‌کوین کرد). این ممکنه باعث بشه پیش‌بینی شما محقق نشه. یا برعکس محقق بشه‌؛ اما وقتی محقق شد، دیگران بگن چون تو گفتی این‌جوری شد … اگه نمی‌گفتی نمی‌شد.
شما می‌تونید با این روش، پیش‌بینی خودتونو تثبیت کنید (بدون این‌که هیچ‌گونه اطلاعاتی ازش داده باشید). بعد اگه محقق شد (و کار از کار گذشت) بگید من (مثلاً شش ماه پیش) چنین چیزی رو پیش‌بینی کرده بودم. اما نمی‌تونستم اون موقع بگم (به همون دلایلی که ذکر شد). اون‌وقت کسی نمی‌تونه بگه شما اون چیز رو بعد از این‌که رخ داده پیش‌بینی کردید. چون همه می‌دونن شما ۶ ماه پیش تثبیتش کرده بودید. اما اون موقع نمی‌دونستن چی بوده!

2 پاسخ

+2 امتیاز
توسط extermom (47 امتیاز)

فکر می‌کنم باید یک تابع تعریف کنم و مبلغ مورد نظرم رو به عنوان ورودی به تابع بدم. بعد خروجی تابع و ضابطه ی تابع رو در اختیار طرف مقابل میذارم. فقط تابعی که تعریف می‌کنم باید یک به یک باشه و پیدا کردن تابع معکوسش به شدت پیچیده باشه.

توسط mirismaili (350 امتیاز)
ویرایش شده توسط mirismaili
پاسخ شما به «پاسخ درست عملی» نزدیکه و شما در مسیر یافتن این پاسخ قرار دارید. :) منظورم از «پاسخ درست عملی» اون چیزیه که امروزه در فناوری اطلاعات مورد استفاده قرار می‌گیره. پس تا این‌جا ما باید به دنبال یه چنین تابعی بگردیم.

البته از یک زاویه دیگه قدری مشکل داره! به این چالش دقت کنید:

اگر فرد مقابل (بخوانید ربات مقابل) به ضابطه «تابع عملاً معکوس‌ناپذیر ما» دسترسی داشته باشه، آیا نمی‌تونه با قرار دادن تمام مقادیر ممکن (محتمل) در تابع ما به عدد ما پی ببره؟
برای مثال اگه تمام اعداد بازه ۱۰۰۰ تا ۲۰۰۰ رو توی تابع قرار بده!
توسط extermom (47 امتیاز)
+1
این کار باید طی یک جریان شروع بشه و خاتمه پیدا کنه.
 در شروع این جریان، ابتدا هر یک از طرفین تعدادی تابع دلخواه و غیر تکراری تعریف میکنه و هر دو طرف ضابطه های این توابع رو می‌بینن.
بعد هر یک از طرفین ترکیبی از این توابع رو برای خودش میسازه و عدد خودش رو داخل این تابع قرار میده و خروجی رو به طرف مقابل میده، اما ضابطه ی کلی رو در اختیار طرف مقابل قرار نمیده.
(در تعریف تابع ترکیبی کلی که هر طرف برای خودش میسازه، هر طرف مجاز هست فقط از یکی از توابع تعریفی خودش استفاده کنه و بقیه توابع باید ساخته شده توسط طرف مقابل باشه.)
در این حالت هر یک از طرفین فقط میدونه تابع کلی طرف مقابل ترکیبی از چه توابعی هست، اما ضابطه ی دقیق رو نمیدونه.
از طرفی بسیار غیرمحتمل هست که بتونه عدد خودش رو تغییر بده، گرچه غیرممکن نیست.
توسط mirismaili (350 امتیاز)
+1
نکته: اگر دیدگاهتون در پاسخ به دیدگاه بنده‌ست، با روشی که هنگام نوشتن دیدگاه در سایت توضیح داده شده (username@) بنده رو از دیدگاه خودتون مطلع کنید. در غیر این صورت فقط به کاربری که دیدگاه زیر پست ایشون درج شده، اطلاع داده می‌شه (که در این‌جا چون پست (پاسخ) برای خودتونه به کسی اطلاع داده نمی‌شه).

شما هم‌چنان در مسیر یافتن پاسخ قرار دارید. پیشنهادی که برای حل اون چالش دادید، به روشی که در عمل برای این منظور مورد استفاده قرار می‌گیره، شبیهه. اما تفاوت‌هایی داره. از جمله این‌که اون روش، راحت‌تر و سرراست‌تره (از ترکیب دو تابع) و نیازی به ارائه لیستی از موارد قابل استفاده از سوی طرف مقابل نداره. ضریب اطمینانش هم بهتر و راحت‌تر قابل اندازه‌گیریه.

(هم‌چنین اگه سعی کنید راه‌حلتون رو با فرمول‌های ریاضی بیان کنید، بهتر می‌شه متوجه منظورتون شد.)
+1 امتیاز
توسط

خب میشه هر دومون قیمت ها رو در یک جای سوم بگیم که هیچ کدوم نفهمیم اون یکی چی نوشته


حمایت مالی

کانال تلگرام محفل ریاضی
امروز : تاریخ شمسی اینجا نمایش داده می‌شود
...