توضیحاتی پیرامون محرمانگی در بلاکچین

shape
shape
shape
shape
shape
shape
shape
shape

مقدمه

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

خصلت محرمانگی (Privacy)

” تا نگردی آشنا، زین پرده رمزی نشنوی// گوش نامحرم نباشد، جای پیغام سروش”

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

این موضوع چندتا بعد داره که در ادامه بعضیاشون رو بررسی می کنیم.

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

مسئله ای که وجود داره اینه که این تراکنش (که با تقریب خوبی به گوش همه رسیده) در دل خودش، (مستقیم یا غیر مستقیم) اطلاعاتی رو پیرامون فرستنده و گیرنده داره که صد البته برای همه قابل تشخیص نیست. ولیکن ممکنه یسری آدم باهوش (بخوانید فضول!) بتونن فرستنده و گیرنده رو معلوم کنن. حالا سوال اینه که آیا در راستی آزمایی این تراکنش، نیازه هیچ اطلاعاتی پیرامون فرستنده و گیرنده هویدا بشه؟ یا صرف اینکه ملت تو شبکه بفهمن “که یه نفری که به اندازه کافی پول داره و مالکش هست، به یه نفر دیگه یک بیت کوین داده” کافیه؟ اصلا میشه همچین کاری کرد؟

  1. بُعد دوم شبیه بُعد اول هست. اولین شباهتش اینه که جفتشون بُعد هستند! شباهت بعدی اینه که اینجا سوالی که مطرحه اینه که آیا در راستی آزمایی این تراکنش، نیازه هیچ اطلاعاتی پیرامون میزان بیت کوینی که داره جا به جا میشه، هویدا بشه؟ یا صرف اینکه شبکه بفهمه “که یه نفری که به اندازه کافی پول داره و مالکش هست، به یه نفر دیگه یک میزانی که از کل پولش بیشتر نیست، بیت کوین داده” کافیه؟ اصلا میشه همچین کاری کرد؟

راستی، حواستون باشه خود جواب دادن به این سوالات در حالت عادی خیلی سخته، حالا فرض کنید بخوایم شرط “دوباره خرج کردن (double spending)” رو هم چک کنیم!

  1. حالا فرض کنید که من (نفر اول) به شما (نفر دوم) بیت کوین دادم و شما هم، (همون بیت کوین یا بخشی) از اون رو می فرستید برای یکی دیگه از دوستاتون (نفر سوم) (الان به صورت ضمنی فرض کردم ما با هم دوستیم!). آیا میشه در شبکه بیت کوین، ارتباط بین بیت کوینی که دست نفر سوم هست و نفر اول فهمید؟ آیا تراکنش ها اصطلاحا linkable هستند؟ میشه اونا رو به هم وصل کرد؟ آیا روشی وجود داره که جلوی این قضیه وایسه؟
  2. من که تراکنش رو ساختم و تو شبکه ارسال میکنم، یک هویتی در شبکه بیت کوین دارم که نمایانگر اون هویت، آدرس من هست. آدرس ها در شبکه بیت کوین عمومی هستند و همه می تونن ببینند. حالا من در دنیای اینترنت هم یک هویتی دارم که اتفاقا شبکه بیت کوین هم رو همون زیرساخت داره کار میکنه. هویت من اونجا یجورایی میشه گفت که IP من هست. حالا سوال اینه که آیا میشه بین این دو هویت، ارتباطی برقرار کرد؟ مثلا یک نفر/نهاد/موجودیتی یه عالمه فول نود تو شبکه داشته باشه و از ماحصل ارتباطات اونها بتونه یچیزی در مورد ارتباط بین این دو هویت های من بفهمه؟ آیا میشه جلوی این “جنگ هویت ها” رو گرفت؟ میشه کاریش کرد یا من به هر حال هویتم رو باخته ام؟
  3. حالا فرض کنید که بستر مورد بررسی (که تا بحال فرض کردیم بیت کوین هست) یخورده پیشرفته تر باشه و بشه روش قرارداد هوشمند هم اجرا کرد. قرارداد هوشمند یه چند خط کد هست که پس از deploy شدن به وسیله نویسنده و خالق اونها، در ادامه باید به وسیله ماینرها اجرا بشه. تو این کدها، یک سری توابع نوشته شده که باید فراخوانی بشن تا بتونن اجرا بشن. برای فراخوانی به اونها باید داده بدیم! خب ممکنه من هم دلم بخواد که اون توابع رو با استفاده از داده های خودم فراخوانی کنم تا بتونم نتیجه رو بدونم و هم دلم نخواد که کسی بدونه داده های من چی بوده! ممکنه شما بگید بیخود میکنی که دلت میخواد! تو بلاکچین همه چی شفافه! ولی من سوال پرسیدم صرفا! گفتم میشه یا نه؟ حالا میشه جدی؟

در مورد مبحث محرمانگی در شبکه های بلاکچینی در پست های بعدی ان شاالله صحبت خواهیم کرد.

نویسنده: حنظله اکبری نودهی

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *