رمزنگاری:‌ امضای دیجیتال

همانطور که در بخش قبل هم متوجه شدید روش رمزنگاری ای که بیان شد یک مشکل بزرگ دارد و آن این است که چون کلید عمومی در دسترس همگان است همه می توانند برای شیرین پیام بفرستند هرچند تنها کسی که میتواند پیام ها را باز کند شیرین است. در واقع گویا هیچ راهی وجود ندارد که اصالت فرد مشخص شود. در دنیای واقعی برای اینکه متوجه بشویم یک پیام مربوط به شخص خاصی است از او میخواهیم که پای آن را امضا کند. همه می دانیم امضای هر شخص متعلق به خود اوست و باید طوری باشد که کپی کردن آن سخت باشد. هر چند، هرقدر هم امضای شما پیچیده باشد باز هم ممکن است افرادی باشند که با مهارت آن را جعل کنند. اما در دنیای دیجیتال چگونه میتوان امضا داشت؟ امضای دیجیتال روش های مختلفی دارد اما اینجا باز هم بر اساس الگوریتم RSA آن را توضیح می دهیم. در واقع برای امضای دیجیتال ما از چارچوب خود روش RSA خارج نمی شویم! فقط یک تفاوت کوچک وجود دارد. فرض کنید دو شخص به صورت مجزا برای شیرین پیام ارسال می کنند. شیرین پیام ها را باز میکند ولی نمی تواند متوجه شود که کدام یکی واقعا فرهاد است. از قضا هر دوی آن اشخاص از یک کلید عمومی استفاده می کنند.اما فقط یکی از آن ها می تواند واقعا ادعا کند که صاحب "کلید عمومی صحیح" است(فراموش نکنید دستیابی به کلید خصوصی از طریق کلید عمومی ناممکن است). کسی صاحب واقعی کلید عمومی است که کلید خصوصی جفت آن را هم داشته باشد. به همین خاطر شیرین از آن ها می خواهد برای اثبات ادعای خود یک پیام ساده مانند "من راست میگم" یا هر چیز دیگری که شیرین به آن ها دستور دهد را با کلید خصوصی خود رمز کنند بنابراین هر دو پیام خود را با کلید خصوصی خودشان رمز می کنند:اینجا امضا صرفا یک عدد است. d1 کلید خصوصی واقعی فرهاد است و d2 کلید خصوصی مهاجم است که جعلی است. حالا شیرین می تواند با استفاده از کلید عمومی آنها متوجه شود که کدامیک راست میگویند برای این کار او به سادگی می تواند محاسبه کند که آیا امضا به توان کلید عمومی با عدد پیامی که به آن ها گفته بود هم نهشت هست یا خیر:همانطور که میبینید شخص دوم دروغ گفته بود او واقعا کلید خصوصی مربوط به آن کلید عمومی که ادعا می کرد را نداشت چون امضایش با کلید عمومی ادعاییش نمیخواند. گیج نشوید: دقت کنید که اینجا تفاوت ظریفی بین رمزنگاری و امضای دیجیتال وجود دارد. در رمزنگاری پیام ها با کلید عمومی رمز می شدند و با کلید خصوصی باز می شدند اما در امضای دیجیتال پیام ها با کلید خصوصی امضا می شوند و با کلید عمومی تایید می شوند.باز هم یک جای داستان بالا میلنگد.فرض کنید هر کدام از اشخاص بالا از کلید عمومی متفاوتی استفاده کنند. اینجا هیچ راهی برای شیرین وجود ندارد که بداند کلید عمومی فرهاد کدام است. تنها چیزی که شیرین می تواند بفهمد این است که با فرض دانستن کلید عمومی فرهاد(به هر طریقی) می تواند آن را با حقه امضای دیجیتال تایید کند. برای حل کردن این مشکل "زیرساخت کلید عمومی" (Public key infrastructure) پیشنهاد شده است. به عبارتی سازمان هایی در دنیا وجود دارند که به افراد، شرکت ها و بانک ها، گواهی دیجیتال (Digital certificate) می دهند. این سازمان ها در واقع مشخص می کنند هر کس چه کلید عمومی دارد. به این ترتیب شما به راحتی می توانید بروید و ببینید برای مثلا فرهاد چه کلید عمومی ثبت شده است. در یک مثال واقعی تر شما به دنبال مطمئن بودن کلید عمومی درگاه بانک هستید. برای این کار کافی است به گواهی دیجیتال آن سر بزنید و ببینید برای آن بانک چه کلید عمومی ثبت شده است. امروزه این کار به صورت اتوماتیک توسط مرورگر شما انجام می شود. شما هم ممکن است حالت های زیر را در مرورگر خود دیده باشیددر حالاتی که وبسایت به صورت قرمز یا زرد هستند (حتی با وجود اینکه از پروتکل امن (https) که مبتنی بر رمزنگاری نامتقارن است) استفاده می شود قابل اعتماد نیستند. زیرا آنها هیچ گواهی دیجیتالی ندارند. به طور مثال وبسایت شاپرک که بیشتر تراکنش های بانکی ایران از طریق آن انجام می شود به صورت زیر است(یک وبسایت کاملا امن که گواهی بین المللی کلید عمومی آن تایید شده است):برای اینکه کلید عمومی شاپرک را ببینید. کافی است روی مرورگر خود کلیک راست کرده و گزینه inspect را انتخاب کنید سپس به بخش security بروید و بر روی View certificate کلیک کنید. در زیر میبینید که کلید عمومی شاپرک 2048 بیتی است و از الگوریتم RSA هم استفاده می کند.الان متوجه میشوید که چرا دادن اطلاعاتتان مثل رمز عبور به وب سایت هایی که کلید عمومی معتبری ندارند، خطرناک است. کل این ماجرا در نگاه اول پیچاندن لقمه به دور سر بنظر می رسد اما بعد از مدتی تامل به ظرافت ها و هوش در طراحی این ساختار رمزنگاری پی میبرید. ساختاری که امنیت میلیارد ها تراکنش در طول روز را در سراسر جهان حفظ می کند!