پیشرفته مقالات

امضای دیجیتال چیست و چگونه ساخته می‌شود؟

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

امضای دیجیتال چیست؟

امضای دیجیتال چیست
منبع: simplilearn

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

از لحاظ استانداردهای رمزنگاری، MPC هنوز یک مکانیسم جوان و نوظهور است. البته این مکانیسم بر پایه الگوریتم‌های رمزنگاری است که برای چند دهه مورد آزمایش قرار گرفته‌اند.

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

طرح استاندارد امضای دیجیتال

امضای معمولی و امضای دیجیتال چه مشکلاتی را حل می‌کنند؟ کلا دو مشکل اصلی در این زمینه وجود دارد:

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

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

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

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

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

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

کلید عمومی مثل اسمی است که در کنار امضای معمولی در یک سند درج می‌شود. این کلید جزو اطلاعاتی است که برای عموم قابل مشاهده است. اما کلید خصوصی عمومی نیست و فقط شما آن را در اختیار دارید.

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

یک امضای دیجیتال از ۳ بخش تشکیل شده است:

  • الگوریتم KeyGen که برای تولید اعداد (کلید عمومی و خصوصی) استفاده می‌شود.
  • الگوریتم Sig که با استفاده از پیام و کلید خصوصی، امضا را ایجاد می‌کند.
  • الگوریتم Ver که با استفاده از امضا، پیام امضا شده و کلید عمومی، امضا را تایید می‌کند.

در ادامه این ۳ بخش را به صورت مجزا و با جزئیات بررسی می‌کنیم.

تولید کلیدها از طریق الگوریتم KeyGen

الگوریتم تولید کلید (key generation) یک جفت کلید تولید می‌کند؛ SK یا کلید خصوصی و PK یا کلید عمومی. هر باری که از این الگوریتم استفاده کنید، کلیدهای جدیدی به شما داده می‌شود.

کلید خصوصی یک عدد تصادفی است. با اعمال یک تابع فشرده‌سازی یک‌طرفه و از پیش تعیین‌شده به کلید خصوصی، می‌توان کلید عمومی را به دست آورد. در این تابع یکطرفه، نمی‌توان با استفاده از نتایج به پارامترهای ورودی دست یافت. در نتیجه می‌توانیم با امنیت کامل کلید عمومی خود را به اشتراک بگذاریم و ترسی از فاش شدن کلید خصوصی نداشته باشیم.

یک مثال معروف برای تبدیل یکطرفه، به‌توان‌رسانی پیمانه‌ای (Modular exponentiation) است. به‌توان‌رسانی عادی مثل Pk=ask قابل بازگشت است (a یک عدد ثابت است). اگر مقدار a و PK را بدانیم، می‌توانیم با لگاریتم‌گیری کلید خصوصی یا SK را به دست بیاوریم.

تصویر زیر مطابقت یک به یک مقدار کلید خصوصی و عمومی را در این تابع نشان می‌دهد؛ هر مقدار از SK با یک مقدار معین از PK مطابقت دارد و برعکس.

تابع دوطرفه
منبع: hackernoon

اما اگر به‌‌توان‌رسانی را با عملیات ماژول (Modulo) انجام دهیم، تبدیل یک‌طرفه خواهد بود. در این صورت الگوریتم به صورت Pk=aSk mod q در می‌آید که در آن q یک عدد صحیح مثبت است. ماژول یا Mod، عملیاتی است که باقی‌مانده مقدار تقسیم‌شده بر q را برمی‌گرداند. برای مثال 25mod10=5.

این عملیات غیرقابل بازگشت است. به شکل زیر توجه کنید:

تابع یکطرفه
منبع: hackernoon

فرض کنید که PK=4، a=2 و q=7 باشد. اگر بخواهیم معادله 4=2sk mod 7 را حل کنیم، متوجه می‌شویم که این معادله چند جواب دارد. مقدار SK می‌تواند ۲ یا ۵ باشد.

مثال دیگری که در این باره می‌توان به آن اشاره کرد، صفحه ساعت است. ما ساعت‌ها را ماژول۱۲ و ثانیه‌ها را با ماژول ۶۰ می‌سنجیم. فرض کنید کسی می‌گوید: «بار اول که به ساعتم نگاه کردم، ساعت ۱ بود و بار دوم ساعت ۳ بود». آیا می‌توان حساب کرد که بین این دو بازه زمانی، چند ساعت سپری شده است؟ جواب ممکن است ۲ ساعت، ۱۴ ساعت، ۲۶ ساعت و غیره باشد. عملیات mod 12 این اطلاعات را حذف می‌کند.

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

تولید امضا با الگوریتم Sig

برای تولید امضا به دو چیز نیاز داریم: کلید خصوصی یا Sk و پیامی که می‌خواهیم امضا شود. اندازه و طول متغیر پیام‌ها ممکن است مشکل ایجاد کند، اما توابع هش (Hash) رمزنگاری این مشکل را حل می‌کنند.

یک تابع هش رمزنگاری مجموعه‌ای از نمادها را به اعدادی با محدوده مشخص تبدیل می‌کند. مثلا نتیجه این تابع ممکن است عددی باشد که ۲۵۶ بیت دارد. به چنین عددی «هش» و به این فرایند تبدیل «هشینگ» گفته می‌شود. تابع هش همیشه برای یک ورودی ثابت، نتیجه یکسان تولید می‌کند.

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

برای مثال، تابع هش رمزنگاری SHA256 اعدادی را در محدوده ۰ تا ۲۲۵۶-۱ می‌دهد. SHA256 برای ورودی «قول می‌دهم که به تو ۵۰۰۰ دلار پرداخت کنم» این نتیجه را می‌دهد:

be657fcad7933b87869835c571b60ff1444f68179326e7754c3d99babf919995

عبارت بالا با فرمت Hex است. اگر به ورودی یک ۰ صفر اضافه کرده و ۵۰۰۰ را به ۵۰٬۰۰۰ تغییر دهیم، حاصل هش به این صورت تغییر می‌یابد:

90222db12a4a59f8d083e3cf88bf22dab15385c9946f4526a67855e6a5ff0737.

به طور خلاصه، الگوریتم تولید امضا یک کلید خصوصی و یک عدد m (هش پیام) را می‌گیرد و یک عدد s می‌دهد. عدد s در واقع یک امضا است (s=Sigsk, m).

تایید امضا با الگوریتم Ver

امضای دیجیتال
منبع: wiit.cloud

الگوریتم‌های KeyGen و Sig در تولید امضای دیجیتال نقش دارند، اما از الگوریتم Ver برای تایید و اعتبارسنجی امضا استفاده می‌شود. این الگوریتم به کلید عمومی امضاکننده (Pk)، هش پیام امضاشده (m) و امضا (s) نیاز دارد. الگوریتم Ver برای امضای صحیح عدد ۱ و برای امضای نادرست عدد ۰ را نشان می‌دهد.

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

در مقابل، تایید نشدن امضا یعنی یکی از موارد زیر رخ داده است:

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

در الگوریتم Ver نمی‌توان فهمید که علت دقیق رد شدن امضا چیست. چون الگوریتم علت و شرایط دقیق تایید نشدن پیام را نشان نمی‌دهد.

جمع‌بندی

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

منبع
hackernoon

نوشته های مشابه

0 دیدگاه
Inline Feedbacks
View all comments
دکمه بازگشت به بالا