احتمالا شما هم چند وقت پیش اخبار درز کردن اطلاعات کاخ سفید را شنیدید. تصور کنید دونالد ترامپ با تیم امنیت سایبری خود تماس میگیرد و به آنها میگوید: “میدانم یکی از شما اطلاعات را فاش کرده است، اما نمیتوانم بگویم کدام یک”. چگونه دونالد ترامپ میتواند بگوید که یکی از اعضای تیمش اطلاعات را فاش کرده است، اما نمیداند دقیقا این اتفاق توسط کدام یک از اعضای تیمش اتفاق افتاده است؟ این مسئله مربوط به امضای حلقوی میشود که ناشناس بودن و امینت را فراهم میکند. برای درک بهتر این مفهوم، با فکت کوینز همراه باشید.
امضای حلقوی یک امضای دیجیتال است که توسط یکی از اعضای گروه ایجاد میشود. هر کدام از اعضا کلیدهای خود را دارند. با این حال نمیتوان فردی از گروه که این امضا را ساخته است، تعیین کرد. این روش در ابتدا توسط ران ریوست (Ron Rivest)، آدی شامیر (Adi Shamir) و یائل تاومن (Yael Tauman) در سال 2001 معرفی شد. آنها در مقاله خود که به تازگی منتشر شده است، به معضل درز اطلاعات از کاخ سفید پرداختند.
ساخت امضای حلقوی
در بحث امضای حلقوی (Ring Signature)، گروهی از موجودیتها را تعریف میکنیم که هر کدام جفتهای کلید عمومی/خصوصی خود را دارند. این جفت کلیدها به صورت (S1،P1)، (S2،P2)، … (Sn،Pn) نمایش داده میشوند. در این سیستم نام گذاری، S1 نماینده کلید خصوصی فرد 1 و P1 معادل کلید عمومی همان فرد است. اگر بخواهیم یک نهاد i پیامی را امضا کند، او از کلید مخفی خود (si) در کنار کلیدهای عمومی بقیه گروه (m,si,P1…Pn) استفاده میکند. میتوان با دانستن کلید عمومی افراد یک گروه، اعتبار آن گروه را بررسی کرد. اما در صورت عدم اطلاع از کلیدهای خصوصی افراد حاضر در گروه، امکان تعیین امضای معتبر وجود ندارد.
برای مثال بیایید بگوییم که ترنت (Trent)، باب (Bob)، ایو (Eve) و آلیس (Alice) در یک گروه هستند و هر کدام کلیدهای عمومی و مخفی خود را دارند. باب اکنون میخواهد پیامی را در گروه امضا کند. او ابتدا یک مقدار تصادفی v تولید میکند. سپس مقادیر تصادفی (xi) دیگری را هم برای هر یک از شرکت کنندگان تولید میکند. در همین حال از کلید مخفی خود (si) برای تعیین یک کلید مخفی متفاوت استفاده میکند. این مسیر عملکردی برعکس عملکرد رمزگذاری (encryption) است.
اکنون او میتواند با استفاده از یک هش از آن پیام خاص، یک کلید (k) بسازد. این کلید با رمزگذاری متقارن برای رمزگذاری هر یک از عناصر حلقه (Ek) استفاده میشود و سپس هر عنصر حلقه در یک تابع EX-OR از عناصر قبلی استفاده میکند (شکل 1).
سپس هر یک از مقادیر تصادفی، برای سایر شرکتکنندگان با کلید عمومی خودِ کاربر رمزگذاری میشوند. سپس باب مقدار ys را برای ایجاد حلقه محاسبه میکند (نتیجه حلقه باید برابر با V باشد). بعد از این مرحله این مقدار را معکوس میکند تا کلید خصوصی معادل (xs) را تولید کند. باب اکنون امضای کلی و مقادیر تصادفی x را به همراه کلید مخفی محاسبه شده منتشر میکند. برای بررسی امضا، دریافت کننده فقط حلقه را محاسبه میکند و بررسی میکند که نتیجه با امضای ارسال شده مطابقت داشته باشد.
روشهای اساسی برای ایجاد امضای حلقوی عبارتند از:
1. با k=Hash یک پیام رمزگذاری شده ایجاد کنید.
2. یک مقدار تصادفی (مثل u) بسازید.
3. u را رمزگذاری کنید تا v=Ek(u) بدهید.
4. برای هر فرد (به غیر از فرستنده):
4.1 e=si^{Pi} (mod Ni) را محاسبه کنید و جایی که si عدد تصادفی تولید شده برای کلید مخفی طرف سوم است و Pi کلید عمومی او است.
4.2 v=v⊕e را محاسبه کنید.
5. برای طرف امضا شده (z)، sz=(v⊕u)^d (mod Nz) را محاسبه کنید. d کلید مخفی طرف امضاکننده است. با امضای (v=Ek(u))، حلقه کامل میشود.
روش اصلی که در آن باب برای دیگر افراد حلقه کلیدهای خصوصی جعلی را ایجاد میکند:
سپس تأیید حلقه به این صورت است:
حلقه امضا در Monero
مشکل اصلی شبکه بیت کوین این است که مقدار تراکنش ، ارسال کننده و دریافت کننده وجوه کاملا مشخص هستند و شخصی که آدرس شخص دیگری را میداند میتواند تراکنشهای او را ردیابی کند. این مسئله به این دلیل است که بلاکچین باید بررسی کند که فرستنده بودجه کافی برای پرداخت مبلغ مورد نظر به گیرنده را دارد یا خیر. بنابراین بسیاری از ارزهای دیجیتال به دنبال راههایی برای ناشناس کردن تراکنشها هستند. به عنوان مثال، اتریوم از zk-Snarks برای پنهان کردن هویتها استفاده میکند.
بیشتر بخوانید : وایت پیپر مونرو – قسمت اول
یکی از روشهای حفظ هویت توسط ریوِست (Rivest) و همکارانش ارائه شد که از رمزگذاری RSA استفاده میکند. متأسفانه این روش برای سیستمهای مدرن کارآمد نیست. بنابراین گرگ ماکسول (Greg Maxwell) یک روش منحنی بیضوی را به عنوان روشی جدید برای ایجاد امضای حلقوی تعریف کرد: امضای حلقوی بورومین (Borromean)
ارز دیجیتال Monero روشی را برای ناشناسسازی تراکنشها اتخاذ کرد، اما پس از آن به روش جدیدی روی آورد: امضای گروهی ناشناس خودبهخودی پیوندی چندلایه (Multi-layered Linkable Spontaneous Anonymous Group). این روش مبلغ تراکنش و هویت پرداخت کننده و گیرنده را مخفی میکند. اکنون این روش به عنوان RingCT (معاملات محرمانه حلقه) شناخته میشود که در ژانویه 2017 عرضه شد و از سپتامبر 2017 برای همه تراکنشها اجباری شد.
نتیجه گیری
مشکل اصلی شبکه بیت کوین این است که مقدار تراکنش و فرستنده و گیرنده وجوه ناشناس نیستند و شخصی که آدرس یک کاربر را میداند میتواند تراکنشهای او را ردیابی کند. این مسئله به این دلیل است که بلاکچین باید بررسی کند که فرستنده بودجه کافی برای پرداخت مبلغ مورد مظر به گیرنده را دارد یا خیر. بنابراین بسیاری از ارزهای دیجیتال به دنبال راه هایی برای ناشناس کردن تراکنش هستند. یکی از این روشها امضای حلقوی بود که در این مقاله به بررسی آن پرداختیم.
نظر شما در مورد این راهکار چیست؟ آیا از این راه میشود به امنیت بیشتر دستررسی پیدا کرد؟