در عمق بلاک‌چین: آیا بلاک‌چین ناشناسی را تامین می‌کند؟

در مجموعه نوشته‌های «در عمق بلاک‌چین» تلاش می‌کنم هر بار در مورد بلاک‌چین و ویژگی‌های اون صحبت کنم. نوشته‌های این مجموعه معمولا با یک سوال شروع می‌شوند و در طول بحث تلاش می‌کنیم در مورد پاسخ آن سوال بحث کنیم. اگر به بلاک‌چین علاقه‌مند هستید خوشحال می‌شم که متن را مطالعه کنید و نظراتتون را بنویسید. برای مطالعه در مورد بلاک‌چین به این پست رجوع کنید.

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

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

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

اما چگونه می‌توان با استفاده از تجربیات پژوهش‌های پیشین در حوزه‌های امنیتی ناشناسی را نیز در بیت‌کوین تامین نمود؟ برای پاسخ به این سوال نیاز است ابتدا با مفهوم اثبات‌های صفر-دانش (Zero Knowledge Proofs) آشنا شویم.

اثبات صفر-دانش

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

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

زیروکوین: اثبات صفر-دانش در خدمت تامین ناشناسی بیت‌کوین

زیروکوین (ZeroCoin) می‌توان به عنوان یک سیستم پول‌شویی!! برای بیت‌کوین در نظر گرفت. هر زیرکوین با یک بیت‌کوین برابری می‌کند و برای ناشناس کردن هر بیت‌کوین کافیست آن را به زیروکوین تحویل داده و بیت‌کوین ناشناس‌شده را در آدرس جدید از زیروکوین تحویل بگیریم. بنابراین می‌توان زیرو کوین را در دو فاز مورد بررسی قرار داد:

  1. ضرب کردن؛ برای ضرب کردن زیرکوین کافیست ابتدا شماره سریال تصادفی مانند S را برای سکه خود در نظر گفته و سپس تعهد C را برای آن تولید کنیم. این تعهد را می‌توان با عدد تصادفی r گشود. برای ضرب‌کردن یک زیروکوین کافیست معادل بیت‌کوین آن را به آدرس مرکز ناشناس‌سازی زیروکوین ارسال کرده و C را در تابلو اعلانات (Bulletin board) منتشر کنیم.
  2. خرج کردن؛ برای تبدیل زیروکوین به بیت‌کوین کافیست اثبات صفر-دانش w مبنی بر دانستن آن که (۱) C در میان سکه‌های داخل تابلو اعلانات بوده و (۲) r مورد نیاز برای گشودن C و تبدیل آن به S را داریم، منتشر کنیم. در واقع برای خرج کردن زیروکوین باید زوج مرتب (w, S) را منتشر کنیم. دیگر کاربران به بررسی اثبات w پرداخته و بررسی می‌کنند S در هیچ تراکنش دیگری وجود نداشته باشد (پیش از این پرداخت نشده باشد). در صورتی که شرایط فوق برآورده شد، معادل مالی زیروکوین به حساب بیت‌کوین درخواست کننده ارسال می‌شود.
ناشناس‌سازی به سبک زیروکوین [۲]و[۳]
ناشناس‌سازی به سبک زیروکوین [۲]و[۳]

بنابراین با در نظر گرفتن این روش می‌توان بیت‌کوین را از یک آدرس فاش شده به آدرس دیگری منتقل نمود. ایده زیروکوین پس از بلوغ در رمزارز ZCash پیاده‌سازی شده و یک رمزارز کاملا ناشناس را تشکیل داده‌است. بسیاری از پیاده‌سازی‌های بلاک‌چین و فناوری دفترکل غیر متمرکز نیز در حال حاضر از ایده‌ای مشابه برای ارائه ویژگی ناشناسی استفاده می‌کنند.

مراجع

[1] Chalkias, K. "Demonstrate how Zero-Knowledge Proofs work without using maths". CordaCon 2017. Retrieved 2017-09-13.

[2] Miers, I., Garman, C., Green, M., & Rubin, A. D. (2013, May). Zerocoin: Anonymous distributed e-cash from bitcoin. In 2013 IEEE Symposium on Security and Privacy (pp. 397-411). IEEE.

[3] Takabatake, Y., Kotani, D., & Okabe, Y. (2016). An anonymous distributed electronic voting system using Zerocoin.