برنامه نویسی سیستم های رمزنگاری

رمزنگاری در پایتون راهنمای سریع از صفر تا صد فرادرس مجله‌

کدهای برنامه مربوط به رمزگذاری فایل به امکان محافظت با کلمه عبور در ادامه آمده است. بنابراین، حرکت دادن معکوس هر کاراکتر به اندازه ۱۳ خانه کار آسانی است و به راحتی می‌توان با این کار متن رمزدار را رمزگشایی کرد. رمز ROT13 مخفف عبارت «Rotate by 13 places» به معنی «چرخش ۱۳ خانه‌ای» است. این الگوریتم نوع خاصی از رمز سزار است که در آن نقل مکان همیشه با ۱۳ گام انجام می‌شود. یعنی برای رمزگذاری و رمزگشایی پیام، هر حرف الفبا ۱۳ خانه به جلو انتقال داده می‌شود. در نمودار زیر نحوه عملکرد و پیاده‌سازی الگوریتم رمزگذاری سزار به تصویر کشیده شده است.

رمزنگاری یکی از معروف ترین و پرطدفدار ترین زمینه های حوزه کامپیوتر و IT میباشد که امروزه پیشرفت بسیار زیادی کرده است. رمزنگاری علم و هنری میباشد که به سبب آن ما توانایی امن سازی فایل ها و داده های مختلف خودمان را پیدا خواهیم کرد. این بخش ادامه بخش قبلی است که رمزگذاری به صورت مرحله به مرحله با استفاده از الگوریتم نامتقارن RSA و توضیح جزئیات آن، انجام شده است. جفت اعداد n و e مشخص شده، کلید عمومی RSA را تشکیل می‌دهند و عمومی می‌شوند. استفاده از الگوریتم‌ نامتقارن RSA دارای چهار مرحله است که در ادامه به آن‌ها پرداخته می‌شود. در این پردازش، مجموعه رمزنگاری شده با استفاده از پروتکل ارتباطی SSL/TLS به گیرنده ارسال می‌شوند.

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

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

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

رمز Caesar چیزی است که به عنوان رمز جایگزین شناخته می‌شود، زیرا هر حرف با حرف دیگری جایگزین می‌شود. بنابراین، تغییرات دیگر در این مورد، می‌توانند جایگزینی بلوک‌های حروف یا کل کلمات باشند. در داستان‌های تاریخی زیادی، رمزنگاری شامل رمزهای جایگزین متفاوتی بوده است که برای ایمن نگه داشتن ارتباطات دولتی و نظامی به کار می‌رفتند. رمزنگاری[۱] دانشی است که به بررسی و شناختِ اصول و روش‌های انتقال یا ذخیرهٔ اطلاعات به صورت امن (حتی اگر مسیر انتقال اطلاعات و کانال‌های ارتباطی یا محل ذخیره اطلاعات ناامن باشند) می‌پردازد. بمنظور پياده سازی رمزنگاری کليد عمومی در مقياس بالا نظير يک سرويس دهنده وب، لازم است از رويکردهای ديگری در اين خصوص استفاده گردد.

او اگر مسئله محرمانه‌ای برای گفتن داشت، آن مسئله محرمانه را به صورت رمزی یعنی با تغییر ترتیب حروف الفبا می‌نوشت. اگر کسی قصد داشت، این متن محرمانه را رمزگشایی کند و به معنای واقعی آن دست یابد، باید حرف چهارم الفبا یعنی D را جایگزین A کند و به همین ترتیب حروف دیگر را نیز پیمایش کند. به زبان ساده، رمزنگاری (Cryptography) روشی را برای برقراری ارتباط امن ارائه می‌دهد. این امر مانع از دسترسی به اطلاعات افراد غیرمجازی است که معمولاً به عنوان مهاجم یا هکر شناخته می‌شوند. روشی که رمزنگاری به وسیله آن وظیفه خود را انجام می‌دهد، رمزگذاری (Encryption) نامیده می‌شود. رمزگذاری به وسیله یک کلید و ورودی مورد نظر، یک متن ساده (Plaintext) را در خروجی، به یک متن رمزنگاری شده (Ciphertext)، تبدیل می‌کند.

در ادامه‌ی این درس می‌بینیم که الگوریتم‌های رمزگذاری و رمزگشایی به دو دسته‌ی متقارن (Symmetric) و نامتقارن (Asymmetric) تقسیم می‌شوند. اما چنین مثالی می‌تواند این فضا را برای شما ترسیم کند که انتقال پیام بین فرستنده و گیرنده وقتی همه‌ی ارتباط آنها به یک بستر ارتباطی محدود است، چه نوع چالش‌ها و پیچیدگی‌هایی دارد. به کمک اعداد فرد کوچک، می‌توان درهم‌سازی یا همان هش کردن رمز RSA را امتحان کرد و کدهای ساده مربوط انجام این کار در ادامه آمده است. محبوب‌ترین و رایج‌ترین الگوریتم کلید متقارن، «استاندارد رمزگذاری داده» (Data Encryption Standard) است که با مخفف آن یعنی «DES» هم خطاب می‌شود. پایتون دارای پکیجی به نام «pyDES» است که در آن منطق پُشت الگوریتم DES وجود دارد و با استفاده از آن می‌توان این الگوریتم را در پایتون پیاده‌سازی کرد. رمز ویژنر از بیش از یک مجموعه جایگزینی استفاده می‌کند و به همین دلیل آن را «رمز چند الفبایی» (Polyalphabetic Cipher) هم می‌نامند.‌ رمز ویژنر از نمایش کلید حرفی به جای کلید عددی استفاده می‌کند.

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

رمزگذاری با قدرت دوبرابر و یا همان رمزگذاری چندگانه دارای مراحل و سطوح مختلفی از رمزگذاری است که در ادامه به بررسی آن‌ها پرداخته شده است. در این بخش از آموزش رمزنگاری به بررسی تفاوت‌های تعاریف رمزشناسی (Cryptology)، رمزنگاری (Cryptography) و رمزیابی (Cryptanalysis) پرداخته شده است. در ادامه آموزش رمزنگاری همراه با شناخت انواع و توابع آن، به بررسی ابزارهای رمزنگاری پرداخته شده است. در بخش‌های قبلی توضیحاتی نظریه درباره رمزنگاری ارائه شدند، در این بخش به بررسی کاربردهای رمزنگاری در حوزه‌های گوناگون پرداخته شده است. ابرشرکت بین‌المللی ماشین‌های کسب‌وکار، یک ابرشرکت آمریکایی چند ملیتی فناوری است که در نیویورک فعالیت می‌کند.

چمدان را با قفل رمزی می‌بندید و رمز آن را به کمک تلفن به متمم خبر می‌دهید. فرض کنید چمدانی در اختیار شماست و می‌خواهید در آن بسته‌ای بگذارید و برای متمم بفرستید. اما چون فردی که چمدان را می‌آورد نمی‌شناسید، برایتان مهم است که اطمینان حاصل کنید او نمی‌تواند داخل چمدان را ببیند. اجازه بدهید با یک مثال فیزیکی، ببینیم که چه نوع چالش‌هایی در این کار وجود دارد. تصویر جدولی که برای رمز ویژنر استفاده می‌شود و به آن «Vignere Tableau» می‌گویند در ادامه آمده است. در این بخش راجع به «رمز تک الفبایی» (monoalphabetic cipher) و هک کردن آن را با استفاده از پایتون خواهیم آموخت.

در این بسته از پایتون ۲.۷، پایتون ۳.۴ به بالا و PyPy نسخه ۵.۳ به بالا پشتیبانی می‌شود. نصب ساده و ابتدایی پکیج Cryptography در پایتون از طریق دستور زیر حاصل می‌شود. پیش از پرداختن به رمزنگاری در پایتون بهتر است ابتدا برخی از اصول و مبانی رمزنگاری یا همان Cryptography را به طور خلاصه و به بیان ساده شرح دهیم. برای اینکه بتوانید بهتر با این روش آشنا شوید می توانید آموزش رمزنگاری در بلاک چین را از سایت فرادرس مشاهده نمایید. یکی دیگر از کاربرد های رمزنگاری امکان ایجاد رمزارز ها می باشد که چند سالی است به شدت رونق گرفته است. یکی از مهم ترین روش های ذخیره سازی گذاشتن گذرواژه های قوی بر روی هارد دیسک می باشد که اجازه نفوذ به آن ها گرفته می شود و امنیت داده ها تامین خواهد شد.

الگوریتم باید دارای طول کلید کافی باشد تا در برابر حملات brute-force مقاوم باشد. به عنوان مثال، AES با طول کلیدهای ۱۲۸، ۱۹۲ و ۲۵۶ بیتی، سطح امنیت بالایی ارائه می‌دهد. برخی الگوریتم‌ها مانند RSA و ECC در برابر کامپیوترهای کوانتومی آسیب‌پذیر هستند. برای مقابله با این چالش، تحقیقاتی در مورد الگوریتم‌های مقاوم کوانتومی مانند SIDH و Lattice-based Cryptography در حال انجام است. اهمیت این الگوریتم‌ها تنها به بانک‌ها و خریدهای آنلاین محدود نمی‌شود؛ بلکه در تمام ارتباطات و ذخیره‌سازی اطلاعات نیز کاربرد دارند. با توجه به تهدیدات سایبری روزافزون، استفاده از رمزنگاری قوی و مطمئن ضروری است.

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

منشاء رمزنگاری معمولا به 2 هزار سال قبل از میلاد مسیح بر می‌گردد، در آن زمان مصریان از هیروگلیف استفاده می‌کردند. هیروگلیف شامل تعدادی تصاویر پیچیده از حیوانات و اشیاء بود که معنای کامل آن را تنها تعداد کمی از نخبگان می‌دانستند. با توجه به مطالب بالا ما باید در طراحی نرم افزار بسنجیم که در چه قسمت هایی امنیت برای ما اهمیت دارد و از چه روشی برای اعمال آن استفاده نماییم. به متن یا پیام شفاف اصلی Clear-text و به متنی که کدگذاری شده و قابل خواندن نیست Cipher-text می‌گویند. می‌دانیم که جابر ابن حیان سبک نگارش فرمول‌های شیمیایی با نمادها را آغاز کرده و اساساً به فرمول‌نویسی و کدگذاری علاقه‌ی خاصی داشته است.

در این روش کلید رمز متن، عدد انتقال یعنی k خواهد بود و بر اساس آن روف یک متن به صورت چرخشی با حرف kام بعد از خودش جایگزین میشود. قبلاً در مورد امنیت شبکه های کامپیوتری صحبت کردیم و دیدیم که امنیت اطلاعات در دنیای مدرن امروز که رد و بدل برخی از اطلاعات مهم از طریق بستر شبکه های کامپیوتری نظیر اینترنت و شبکه های بی سیم انجام میشود، چقدر حائز اهمیت است. از مهم ترین روش های رمزنگاری می‌توان به رمزنگاری متقارن مانند AES و DES و رمزنگاری نامتقارن مانند RSA و ECDSA اشاره کرد. در ژوئن سال 2003، AES توسط دولت ایالات متحده برای اطلاعات طبقه بندی شده تایید شد. همچنین برای استفاده و پیاده سازی AES در داخل نرم افزارها و سخت افزارها، نیازی به گرفتن هیچ حق امتیازی نمی‌باشد. AES یک جایگزین برای Data Encryption Standard یا DES و همچنین DES3 می‌باشد و از کلید‌های با طول بیشتر یعنی 128 بیتی، 192 بیتی و 256 بیتی استفاده می‌کند تا از حملات Brute Force و دیگر حملات بتوان جلوگیری کرد.

الگوریتم رمزنگاری، به هر الگوریتم یا تابع ریاضی گفته می‌شود که به علت دارا بودن خواص مورد نیاز در رمزنگاری، در پروتکل‌های رمزنگاری مورد استفاده قرار گیرد. اصطلاح الگوریتم رمزنگاری یک مفهوم جامع است و لازم نیست هر الگوریتم از این دسته، به‌طور مستقیم برای رمزگذاری اطلاعات مورد استفاده قرار گیرد، بلکه صرفاً وجود کاربرد مربوط به رمزنگاری مد نظر است. معمولاً یك دامنه، یك سیستم كامپیوتری خواهد بود كه می‌تواند به صورت فیزیكی و منطقی محافظت گردد. كلیدهای استفاده شده در یك دامنه توسط یك كلید رمز کننده كلید محلی ذخیره می‌شوند. هنگامی كه كلیدها می‌خواهند به یك سیستم كامپیوتری دیگر فرستاده شوند، رمزگشایی و تحت یك كلید جدید رمز می‌شوند كه اغلب به عنوان كلید كنترل ناحیه (zone control key) شناخته می‌شوند. با دریافت این كلیدها در طرف دیگر، تحت كلید محلی سیستم جدید رمز می‌شوند.

تحلیلگر رمز (رمز شکن) برای شکستن رمز سیستم رمزنگاری جانشینی تک حرف با شمارش حروف متن رمز شده و محاسبه تعداد تکرار نسبی هر حرف شروع به رمزگشایی متن میکند. به طور مثال وقتی شما BitLocker را روی فلش یا هارد اکسترنال خود فعال می‌کنید و یا وقتی به صورت بی‌سیم به مودم (یا بهتر است بگوییم اکسس پوینت) متصل می‌شوید، داده‌های شما با الگوریتم AES رمزنگاری می‌شوند. پیامی که باید رمزنگاری شود، “متن آشکار” (Plaintext) نامیده میشود و توسط یک تابع خاص با استفاده از پارامتری به نام “کلید” (Key) به متن رمز تبدیل میشود. رمزنگاری که با عنوان Cryptography شناخته می‌شود، روشی برای محافظت از اطلاعات و ارتباطات به وسیله‌ی کد‌ها است. بدین وسیله تنها کسانی قادر به خواندن و پردازش کردن این اطلاعات می‌باشند که اطلاعات برای آنها در نظر گرفته شده باشد. با استفاده از کدهای زیر می‌توان رمزگشایی رمز RSA را با پایتون پیاده‌سازی کرد.

شرط اولیه این است که هیچ عامل مشترکی بین (p-1) و (q-1) به جز عدد یک وجود نداشته باشد.

داده‌هایی که بر روی یک دیسک در یک پایگاه داده به سادگی ذخیره می‌شوند را می‌توان رمزگذاری کرد تا از خواندن و دسترسی به آن‌ها در آینده جلوگیری شود. این نوع رمزگذاری برای زمانی مناسب است که تلفن یا رایانه قفل هستند و در صورت دزدیده شدن، کسی به اطلاعات درون این دستگاه‌ها دسترسی نخواهد داشت. در این بخش از مقاله «آموزش رمزنگاری» به تعریف انواع گوناگون حمله به اطلاعات پرداخته شد و در بخش بعدی انواع کاربردهای رمزنگاری مورد بررسی قرار خواهند گرفت. برای ترجمه این نوع کدها، افراد فرستنده و گیرنده در هر دو انتهای زنجیره ارتباطی به کتابی از عبارات کلیدی نیاز دارند و روش دیگری برای رمزگذاری عبارات جدیدی که قبلاً مورد استفاده قرار نگرفته بودند، در این کتاب وجود ندارد. به مرور زمان، به غیر از حل مشکل انتقال کلید در روش متقارن، کاربردهای زیادی برای این نوع از رمزنگاری مطرح شده‌است. رمزنگاری کلید نامتقارن∗، در ابتدا با هدف حل مشکل انتقال کلید در روش متقارن و در قالب پروتکل تبادل کلید دیفی-هلمن پیشنهاد شد.


برنامه نویسی شی گرا در پایتون