تمام شد! کلید عمومی اینجا n و e است. و کلید خصوصی d
حالا چطور پیام ها را رمز کنیم و باز کنیم؟
برای رمز کردن پیام ابتدا فرهاد بعد از دیدن کلید عمومی شیرین که n و e است. پیام خود M را تبدیل به یک عدد مثل m می کند(مثلا کد ASCII که در کامپیوتر ها هم استفاده می شود) و سپس c را محاسبه می کند:
حالا چطور پیام ها را رمز کنیم و باز کنیم؟
برای رمز کردن پیام ابتدا فرهاد بعد از دیدن کلید عمومی شیرین که n و e است. پیام خود M را تبدیل به یک عدد مثل m می کند(مثلا کد ASCII که در کامپیوتر ها هم استفاده می شود) و سپس c را محاسبه می کند:
و سپس c که پیام رمزشده و ناخوانا برای غیر اس را می تواند با خیال راحت از یک کانال نا امن (مثل فریاد زدن آن!!) به شیرین برساند.
شیرین پس از دریافت c با ذوق و شوق تمام می تواند از کلید خصوصی خودش یعنی d استفاده کرده تا پیام فرهاد را باز بیابد.
شیرین پس از دریافت c با ذوق و شوق تمام می تواند از کلید خصوصی خودش یعنی d استفاده کرده تا پیام فرهاد را باز بیابد.
قدرت RSA بر این اساس است که شما نمی توانید صرفا با داشتن کلید عمومی کلید خصوصی را بدست بیاورید.
حتما شما هم متوجه شده اید مشکل بزرگی در رابطه با روش بالا وجود دارد. هر کسی می تواند خود را جای فرهاد جا بزند چون هر کسی می تواند با کلید عمومی یک پیام رمز کند و به شیرین بفرستد. در واقع روشی برای تعیین هویت وجود ندارد. در بخش بعد به این موضوع می پردازیم
حتما شما هم متوجه شده اید مشکل بزرگی در رابطه با روش بالا وجود دارد. هر کسی می تواند خود را جای فرهاد جا بزند چون هر کسی می تواند با کلید عمومی یک پیام رمز کند و به شیرین بفرستد. در واقع روشی برای تعیین هویت وجود ندارد. در بخش بعد به این موضوع می پردازیم
Forwarded from MatlabTips (Rohola Zandie)
مجموعه رمزنگاری که شروع کرده ایم سرآغازی است برای فهم بیت کوین که پس از یک پست دیگر به آن میرسیم
دوستان خود را فرا بخوانید @matlabtips
دوستان خود را فرا بخوانید @matlabtips
Honare Ketab Nakhandan_362388.pdf
274.1 KB
هنر کتاب نخواندن (بهاالدین خرمشاهی) ۱۲ صفحه
یک مقاله بسیار کوتاه درباب روشهای کتاب خواندن و نخواندن
یک مقاله بسیار کوتاه درباب روشهای کتاب خواندن و نخواندن
🔵رمزنگاری-3🔵
موضوع: امضای دیجیتال
همانطور که در بخش قبل هم متوجه شدید روش رمزنگاری ای که بیان شد یک مشکل بزرگ دارد و آن این است که چون کلید عمومی در دسترس همگان است همه می توانند برای شیرین پیام بفرستند هرچند تنها کسی که میتواند پیام ها را باز کند شیرین است. در واقع گویا هیچ راهی وجود ندارد که اصالت فرد مشخص شود. در دنیای واقعی برای اینکه متوجه بشویم یک پیام مربوط به شخص خاصی است از او میخواهیم که پای آن را امضا کند. همه می دانیم امضای هر شخص متعلق به خود اوست و باید طوری باشد که کپی کردن آن سخت باشد. هر چند، هرقدر هم امضای شما پیچیده باشد باز هم ممکن است افرادی باشند که با مهارت آن را جعل کنند. اما در دنیای دیجیتال چگونه میتوان امضا داشت؟
امضای دیجیتال روش های مختلفی دارد اما اینجا باز هم بر اساس الگوریتم RSA آن را توضیح می دهیم. در واقع برای امضای دیجیتال ما از چارچوب خود روش RSA خارج نمی شویم! فقط یک تفاوت کوچک وجود دارد. فرض کنید دو شخص به صورت مجزا برای شیرین پیام ارسال می کنند. شیرین پیام ها را باز میکند ولی نمی تواند متوجه شود که کدام یکی واقعا فرهاد است. از قضا هر دوی آن اشخاص از یک کلید عمومی استفاده می کنند.اما فقط یکی از آن ها می تواند واقعا ادعا کند که صاحب "کلید عمومی صحیح" است(فراموش نکنید دستیابی به کلید خصوصی از طریق کلید عمومی ناممکن است). کسی صاحب واقعی کلید عمومی است که کلید خصوصی جفت آن را هم داشته باشد. به همین خاطر شیرین از آن ها می خواهد برای اثبات ادعای خود یک پیام ساده مانند "من راست میگم" یا هر چیز دیگری که شیرین به آن ها دستور دهد را با کلید خصوصی خود رمز کنند بنابراین هر دو پیام خود را با کلید خصوصی خودشان رمز می کنند:
موضوع: امضای دیجیتال
همانطور که در بخش قبل هم متوجه شدید روش رمزنگاری ای که بیان شد یک مشکل بزرگ دارد و آن این است که چون کلید عمومی در دسترس همگان است همه می توانند برای شیرین پیام بفرستند هرچند تنها کسی که میتواند پیام ها را باز کند شیرین است. در واقع گویا هیچ راهی وجود ندارد که اصالت فرد مشخص شود. در دنیای واقعی برای اینکه متوجه بشویم یک پیام مربوط به شخص خاصی است از او میخواهیم که پای آن را امضا کند. همه می دانیم امضای هر شخص متعلق به خود اوست و باید طوری باشد که کپی کردن آن سخت باشد. هر چند، هرقدر هم امضای شما پیچیده باشد باز هم ممکن است افرادی باشند که با مهارت آن را جعل کنند. اما در دنیای دیجیتال چگونه میتوان امضا داشت؟
امضای دیجیتال روش های مختلفی دارد اما اینجا باز هم بر اساس الگوریتم RSA آن را توضیح می دهیم. در واقع برای امضای دیجیتال ما از چارچوب خود روش RSA خارج نمی شویم! فقط یک تفاوت کوچک وجود دارد. فرض کنید دو شخص به صورت مجزا برای شیرین پیام ارسال می کنند. شیرین پیام ها را باز میکند ولی نمی تواند متوجه شود که کدام یکی واقعا فرهاد است. از قضا هر دوی آن اشخاص از یک کلید عمومی استفاده می کنند.اما فقط یکی از آن ها می تواند واقعا ادعا کند که صاحب "کلید عمومی صحیح" است(فراموش نکنید دستیابی به کلید خصوصی از طریق کلید عمومی ناممکن است). کسی صاحب واقعی کلید عمومی است که کلید خصوصی جفت آن را هم داشته باشد. به همین خاطر شیرین از آن ها می خواهد برای اثبات ادعای خود یک پیام ساده مانند "من راست میگم" یا هر چیز دیگری که شیرین به آن ها دستور دهد را با کلید خصوصی خود رمز کنند بنابراین هر دو پیام خود را با کلید خصوصی خودشان رمز می کنند:
اینجا امضا صرفا یک عدد است. d1 کلید خصوصی واقعی فرهاد است و d2 کلید خصوصی مهاجم است که جعلی است. حالا شیرین می تواند با استفاده از کلید عمومی آنها متوجه شود که کدامیک راست میگویند برای این کار او به سادگی می تواند محاسبه کند که آیا امضا به توان کلید عمومی با عدد پیامی که به آن ها گفته بود هم نهشت هست یا خیر:
همانطور که میبینید شخص دوم دروغ گفته بود او واقعا کلید خصوصی مربوط به آن کلید عمومی که ادعا می کرد را نداشت چون امضایش با کلید عمومی ادعاییش نمیخواند.
گیج نشوید: دقت کنید که اینجا تفاوت ظریفی بین رمزنگاری و امضای دیجیتال وجود دارد. در رمزنگاری پیام ها با کلید عمومی رمز می شدند و با کلید خصوصی باز می شدند اما در امضای دیجیتال پیام ها با کلید خصوصی امضا می شوند و با کلید عمومی تایید می شوند.
باز هم یک جای داستان بالا میلنگد.فرض کنید هر کدام از اشخاص بالا از کلید عمومی متفاوتی استفاده کنند. اینجا هیچ راهی برای شیرین وجود ندارد که بداند کلید عمومی فرهاد کدام است. تنها چیزی که شیرین می تواند بفهمد این است که با فرض دانستن کلید عمومی فرهاد(به هر طریقی) می تواند آن را با حقه امضای دیجیتال تایید کند.
برای حل کردن این مشکل "زیرساخت کلید عمومی" (Public key infrastructure) پیشنهاد شده است. به عبارتی سازمان هایی در دنیا وجود دارند که به افراد، شرکت ها و بانک ها، گواهی دیجیتال (Digital certificate) می دهند. این سازمان ها در واقع مشخص می کنند هر کس چه کلید عمومی دارد. به این ترتیب شما به راحتی می توانید بروید و ببینید برای مثلا فرهاد چه کلید عمومی ثبت شده است. در یک مثال واقعی تر شما به دنبال مطمئن بودن کلید عمومی درگاه بانک هستید. برای این کار کافی است به گواهی دیجیتال آن سر بزنید و ببینید برای آن بانک چه کلید عمومی ثبت شده است. امروزه این کار به صورت اتوماتیک توسط مرورگر شما انجام می شود. شما هم ممکن است حالت های زیر را در مرورگر خود دیده باشید
گیج نشوید: دقت کنید که اینجا تفاوت ظریفی بین رمزنگاری و امضای دیجیتال وجود دارد. در رمزنگاری پیام ها با کلید عمومی رمز می شدند و با کلید خصوصی باز می شدند اما در امضای دیجیتال پیام ها با کلید خصوصی امضا می شوند و با کلید عمومی تایید می شوند.
باز هم یک جای داستان بالا میلنگد.فرض کنید هر کدام از اشخاص بالا از کلید عمومی متفاوتی استفاده کنند. اینجا هیچ راهی برای شیرین وجود ندارد که بداند کلید عمومی فرهاد کدام است. تنها چیزی که شیرین می تواند بفهمد این است که با فرض دانستن کلید عمومی فرهاد(به هر طریقی) می تواند آن را با حقه امضای دیجیتال تایید کند.
برای حل کردن این مشکل "زیرساخت کلید عمومی" (Public key infrastructure) پیشنهاد شده است. به عبارتی سازمان هایی در دنیا وجود دارند که به افراد، شرکت ها و بانک ها، گواهی دیجیتال (Digital certificate) می دهند. این سازمان ها در واقع مشخص می کنند هر کس چه کلید عمومی دارد. به این ترتیب شما به راحتی می توانید بروید و ببینید برای مثلا فرهاد چه کلید عمومی ثبت شده است. در یک مثال واقعی تر شما به دنبال مطمئن بودن کلید عمومی درگاه بانک هستید. برای این کار کافی است به گواهی دیجیتال آن سر بزنید و ببینید برای آن بانک چه کلید عمومی ثبت شده است. امروزه این کار به صورت اتوماتیک توسط مرورگر شما انجام می شود. شما هم ممکن است حالت های زیر را در مرورگر خود دیده باشید
در حالاتی که وبسایت به صورت قرمز یا زرد هستند (حتی با وجود اینکه از پروتکل امن (https) که مبتنی بر رمزنگاری نامتقارن است) استفاده می شود قابل اعتماد نیستند. زیرا آنها هیچ گواهی دیجیتالی ندارند. به طور مثال وبسایت شاپرک که بیشتر تراکنش های بانکی ایران از طریق آن انجام می شود به صورت زیر است(یک وبسایت کاملا امن که گواهی بین المللی کلید عمومی آن تایید شده است):
برای اینکه کلید عمومی شاپرک را ببینید. کافی است روی مرورگر خود کلیک راست کرده و گزینه inspect را انتخاب کنید سپس به بخش security بروید و بر روی View certificate کلیک کنید. در زیر میبینید که کلید عمومی شاپرک 2048 بیتی است و از الگوریتم RSA هم استفاده می کند.