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

در مقاله ی روش های مختلف رمزنگاری، با الگوریتم های متقارن و نامتقارن آشنا شدیم و به بررسی تفاوت های آن ها پرداختیم، در این مقاله با الگوریتم های AES و RSA آشنا خواهیم شد و همچنین به قطعه کدهایی که با استفاده از آن ها میتوان اطلاعات خود را رمزگزاری (Encryption) و رمزگشایی (Decryption) کرد، خواهیم پرداخت.

الگوریتم AES

یکی از الگوریتم های رمزنگاری متقارن و پرکاربرد میباشد. زمانی که از رمزنگاری صحبت میکنیم به معنای ایجاد یک رشته معادل(ciphertext) قابل بازگشت است. در این الگوریتم یک کلید کاملا محرمانه در نظر گرفته میشود که در الگوریتم رمزنگاری از این کلید برای Encrypt و Decrypt داده ها استفاده میشود، یا به عبارت دیگر عبارت رمز شده فقط با این کلید قابل بازگشت خواهد بود؛ طبیعتا با لو رفتن این کلید، تمام ciphertext های تولید شده با الگوریتم AES را میتوان به رشته اصلی بازگرداند. متدهای مربوط به Encrypt و Decrypt متن ورودی در زبان #C به صورت ذیل میباشد.

Encrypt

https://gist.github.com/rabieedev1996/159b2939f69cbd4699bb02c2be5c07ba

Decrypt

https://gist.github.com/rabieedev1996/570652f2603382edad867b0d434f6e09

در قطعه کدهای بالا دو متغیر با عنوان keyString و IVString وجود دارد. در واقع KeyString همان کلید محرمانه ای است که داده های رمزنگاری شده فقط با این کلید میتوانند به رشته اصلی بازگردانده شوند، لذا باید برای نگهداری محرمانه این کلید اهمیت بسیار زیادی قائل شد. در زبان سیشارپ میتوان این دو متغیر را از طریق قطعه کد زیر ایجاد نمود. قاعدتا یک بار نیاز به ایجاد کلید خواهید داشت و این قطعه کد تنها یک بار استفاده میشود، مگر زمانی که بخواهید کلید را تغییر دهید.

https://gist.github.com/mrabiee1375/4214b4911bbf64b14ac1b4549bd36dca

الگوریتم RSA

کی از پرکاربردترین و ایمن ترین الگوریتم های رمزنگاری نامتقارن که در طیف گسترده ای از سامانه های نرم افزاری و در لایه های مختلف مورد استفاده قرار میگیرد. همانطور که در ابتدای مقاله گفته شد، در الگوریتم های نامتقارن از یک کلید برای Encrypt و از کلید دیگری برای Decrypt استفاده میشود که به این زوج کلید عمومی (public key) و کلید خصوصی (private key) گفته میشود. از الگوریتم RSA علاوه بر رمزگذاری، براس Sign کردن اطلاعات نیز استفاده میشود که به توضیح آن خواهیم پرداخت.کلید عمومی در عملیات رمزنگاری برای Encrypt داده ها و کلید خصوصی برای Decrypt استفاده میشود. لازم به ذکر است که این دو کلید به هم وابسته هستند و باید با هر دو با ابزارهای موجودی به صورت همزمان و مرتبط با هم تولید شوند. برای درک بهتر به سناریویی که مطرح میکنیم توجه نمایید.فرض کنید شما و یک سازمان دیگر قصد دارید متونی را با یکدیگر تبادل کنید و نیاز است تا داده هایی که آن سازمان به شما ارسال میکنید کاملا رمز شده باشد. در این سناریو از الگوریتم رمزنگاری متقارن نباید استفاده نمود چرا که کلید میان شما و سازمان مقابل شما مشترک و مشابه است و اگر در هر یک از سازمان ها کلید در اختیار افراد غیرمجاز قرار گیرد، امنیت تبادل اطلاعات با خطرات جدی مواجه میشود. در مقابل زمانی که شما از الگوریتم نامتقارن استفاده میکنید، کلید خصوصی را در نهایت امنیت و محرمانگی سمت خودتان نگهداری میکنید و تنها کلید عمومی را در اختیار سازمان مقابل قرار میدهید. آن سازمان میتواند با استفاده از کلید عمومی که دریافت کرده است اطلاعات را کاملا رمزنگاری کند و پس از ارسال ، شما میتوانید با کلید خصوصی رمزگشایی را انجام دهید. طبیعتا کلید عمومی حتی اگر در اختیار افراد غیر مجاز قرار گیرد، هیچ گونه خطری تبادل اطلاعات را تهدید نخواهد کرد، چرا که تنها برای Encrypt داده ها قابل استفاده است؛ این در حالیست که کلید خصوصی را در نهایت امنیت، نزد خودتان نگهداری میکنید.متدهای مربوط به Encrypt و Decrypt داده ها در الگوریتم Rsa در ذیل آورده شده است.

Encrypt

https://gist.github.com/rabieedev1996/196a92c50ffa7342ec32b55fa0d3d5e5

Decrypt

https://gist.github.com/rabieedev1996/51c3a2a0f66d724bcc12b4ebca6a9dfa

در الگوریتم فوق طول کلید ها 2048 بایت است. طول کلید را میتوان مقادیر مختلفی در نظر گرفت. عملیات Encrypt و Decrypt در RSA میتواند باعث ایجاد سربار و کندی محسوسی شود، بنابراین باید در جای صحیح و درست مورد استفاده قرار گیرد. هر چه طول کلید بیشتر باشد امنیت بالاتر و در عین حال سربار بیشتر است.

همانطور که گفتیم از RSA برای sign کردن داده ها نیز استفاده میشود. وقتی داده ای را sign میکنیم، عملیاتی مشابه با Hashing صورت میگیرد و غیر قابل بازگشت است؛ با این تفاوت که حتی برای تطبیق نیاز به کلید است و از همین طریق امنیت افزایش میابد. بنابراین حتی اگر رشته sign شده در اختیار افراد غیرمجاز قرار گیرد، در صورت نداشتن کلید sign نمیتوانند تطبیق را انجام دهند.از این روش برای تبادل داده هش میان دو سامانه و برای افزایش امنیت استفاده میشود. به عبارت دیگر ابتدا رشته اصلی هش و سپس داده هش شده sign و سپس داده sign شده به سامانه دیگر ارسال میشود. در عملیات Sign کردن داده ها از الگوریتم RSA با همان کلیدهای خصوصی و عمومی استفاده میشود. از کلید خصوصی برای Sign کردن داده و از کلید عمومی برای تطبیق استفاده میشود.

Sign

https://gist.github.com/rabieedev1996/a9b08e1f36bd3db83ac8e706e79b002b

Verify

https://gist.github.com/rabieedev1996/e6e1783a6a19b0ded358c79e053cbdf7

همانطور که از قطعه کد فوق قابل تشخیص است برای Sign از RSA و برای هشینگ از SHA256 استفاده شده است.

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


در ادامه مباحث رمزنگاری میتوانید به مقالات ذیل مراجعه نمایید.

همچنین میتوانید این مقاله را در وبسایت آموزشی من به آدرس زیر مشاهده نمایید.

https://classicode.org/B-101

برای پیگیری آموزش ها و مقالات بیشتر، به صفحه لینکدین و وبسایت من سر بزنید.

www.classicode.org

www.linkedin.com/in/mrabiee1996