مسئله میلیونرهای یائو: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
صفحهای جدید حاوی « <!-- ویرایشهایتان را زیر این خط انجام دهید --> '''مسألهی میلیونرهای یائو''' ی...» ایجاد کرد برچسب: عدم استفاده از یادکرد و پانویس (پخ) |
جز ربات ردهٔ همسنگ (۲۶) +املا+تمیز (۸.۸): + رده:پروتکلهای رمزنگاری |
||
خط ۱:
<!-- ویرایشهایتان را زیر این خط انجام دهید -->
'''مسألهی
این مسأله شبیه مسألهی کلیتری است که در آن دو عدد <math>a</math> و <math>b</math> را داریم و میخواهیم بدون این که مقدار واقعی آنها را بدانیم،
مسألهی
برای حل این مسأله راههای زیادی مطرح شده ولی حلی که خود یائو آن را ارائه داده، هم برای زمان و هم برای حافظه مقدار نمایی دارد.
در این مقاله یک راه حل را توضیح میدهیم.
== پروتکل و اثبات ==
=== پروتکل ===
در این پروتکل ما از نوع دیگری از انتقال بیاعتنا به نام انتقال بیتوجه ۱-۲ استفاده میکنیم. بهاینترتیب یک بیت به صورت زیر انتقال مییابد: فرستنده دو بیت <math>S_0</math> و <math>S_1</math> را دارد. گیرنده یک i از مجموعهی <math>i\in\{0,1\} </math> انتخاب میکند و فرستنده با یک انتقال بیتوجه <math>S_i</math> را میفرستد به گونهای که:
# فرستنده اطلاعاتی راجع به <math>S_{(1-i)}</math> پیدا نمیکند،
# گیرنده مقدار <math>i</math> را نمیفهمد.
حال با توصیف پروتکل آغاز میکنیم. ما ثروت آلیس را <math>a</math> و ثروت باب را <math>b</math> مینامیم و فرض میکنیم که طول <math>a</math> و <math>b</math> به صورت باینری از عدد طبیعی <math>d</math> کمتر است. پروتکل به شرح زیر است:
# آلیس یک ماتریس <math>K</math> با سایز <math>d\times2</math> از اعداد <math>k</math>-بیتی درست میکند (<math>k</math> طول کلید در پروتکل انتقال بیتوجه است). او دو عدد تصادفی <math>0<u<2k</math> و <math>v \leq k</math> را هم برمیگزیند.
#<math>K_{ijl} </math> نشان دهندهی بیت <math>l</math>ام ماتریس است که در خانهی <math>K_{ij} </math> وجود دارد (<math>l=0</math> نشان دهندهی کمارزشترین بیت است). همچنین <math> a_i </math> بیت <math>i</math>ام ثروت آلیس است (عدد <math>a</math>). برای هر <math>i</math> بهصروت <math> 0 \leq i \leq d </math> آلیس
## برای هر بیت<math> j \geq v </math> او <math> K_{i1j} </math> و <math> K_{i2j} </math> را اعداد تصادفی قرار میدهد.
## اگر <math> a_i=1 </math> بود، <math>l=0</math> قرار میدهد
## برای <math>m=2 \cdot i </math>، <math> K_{il(m+1)}=1 </math> و <math> K_{ilm} </math> را <math>a_i</math> قرار می دهد
## برای هر <math> i, 0 \leq i <
## برای <math>l=1,2</math> قرار بدهید <math> K'_{ij}=rol(K_{il} \oplus S_i,u)</math> که در آن <math>rol(x,t)</math>مشخص کننده نتیجه دروان <math>x</math> به اندازه <math>t</math>-بیت به سمت چپ است.
# برای هر <math>i</math> که <math> 0 \leq i \leq d </math>، باب <math> K'_{il} </math> را تحت انتقال بیتوجه انتقال میدهد که در آن <math> l=b_i+1 </math> و <math> b_i </math> بیت <math>i</math>ام <math>b</math> است.
# آلیس <math>N=rol(\bigoplus_{j=1}^d S_j,u)</math> را به باب میفرستد.
# باب یای مانعةالجمع تمام اعدادی که در قسمت ۳ بدست آورد و همچنین <math>N</math> در قسمت قبل را محاسبه میکند. باب نتیجه را از چپ به راست مرور میکند تا به دنباله بلندی از بیت های ۰ برسد. <math>c</math> را بیت راست این دنباله قرار دهید (<math>c</math> مخالف صفر است). اگر بیت سمت راست <math>c</math> با ۱ برابر باشد، آنگاه <math>a \geq b</math> و در غیر این صورت <math>a <
=== اثبات ===
==== درستی ====
باب نتیجه نهایی را از روی <math>N \oplus \bigoplus_{i=1}^d K'_{i(b_i+1)}=rol(\bigoplus_{i=1}^d K_{i(b_i+1)},u) </math> بهدست میآورد. و نتیجه نهایی وابسته به <math>c=\bigoplus_{i=1}^d K_{i(b_i+1)}</math> است. K و در نتیجه c میتوانند به سه قسمت تقسیم شوند. قسمت سمت چپ روی نتیجه تأثیری ندارد. قسمت سمت راست حاوی همه اطلاعات مهم است و قسمت میانی دنباله ای از بیت های ۰ است که جداکننده دو بخش
به ازای هر i، تنها یکی از مقادیر <math>K_{i1} </math> یا <math>K_{i2} </math> دارای بخش راست غیر صفر هستند که در شرایط <math>a_i=1 </math>،<math>K_{i1} </math> و در غیر این صورت <math>K_{i2} </math> است. علاوه بر این، اگر <math> i>j </math> و <math>K_{il} </math> دارای بخش راست غیری صفر باشد، آنگاه <math>K_{il} \oplus K_{jl} </math> نیز دارای بخش راست غیر صفر خواهد بود و دو بیت سمت چپ این بخش راست با دو بیت سمت چپ <math>A_{il}</math> مساوی خواهد شد. در نتیجه، بخش راست c تابعی است از ورودی هایی که باب بر طبق بیت های یکتای a و b انتقال داده است و تنها بیت هایی در بخش راست c که مقادیر رندوم ندارند همان دو بیت سمت چپ هستند که
==== امنیت ====
اطلاعاتی که باب به آلیس میدهد به دلیل اینکه از طریق انتقال بیتوجه فرستاده میشود؛ امن است.
سطر ۳۷ ⟵ ۳۶:
# c، موارد فوق برای c هم برقرار است. بخش چپ c مقداری رندوم است و بخش راست آن نیز به جز دو بیت بخش چپ از مقادیری رندوم تشکیل شده است. استخراج هرگونه اطلاعات از روی آن دو بیت نیازمند حدس زدن مقادیر دیگری است که احتمال درست حدس زدن آنها بسیار پایین است.
=== پیچیدگی ===
پیچیدگی این پروتکل <math>O(d^2)</math> است. آلیس به ازای هر بیت a یک عدد d بیتی تولید میکند و باب d بار یای مانعةالجمع اعداد d بیتی را محاسبه میکند. پیچیدگی این عملیات <math>O(d^2)</math> میشود. بخش ارتباطی نیز از مرتبه .<math>O(d^2)</math> است، در نتیجه پیچیدگی این پروتکل <math>O(d^2)</math> است.
[[رده:پروتکلهای رمزنگاری]]
|