رمزنگاری متقارن و نامتقارن (Symmetric Vs Asymmetric)
نتیجه فرآیند رمزنگاری متن رمز (Ciphertext) نامیده می شود. پیامی که باید رمزنگاری شود، متن آشکار(Plaintext) نامیده می شود و توسط یک تابع خاص به نام کلید (Key) به متن رمز، تبدیل می گردد. به طور کلی الگوریتم های رمزنگاری به دو دسته متقارن و نامتقارن تقسیم می شوند که ما در ادامه قصد داریم تا در این رابطه اطلاعاتی را به شما ارائه دهیم.
کلمه رمزنگاری (Cryptography)، برگرفته از لغات یونانی به معنای محرمانه نوشتن متون می باشد. نخستین کاربرد شناخته شده رمزنگاری در سال های 1900 تا سال قبل از میلاد در دیوار آرامگاه پادشاهی قدیم مصر کشف شده است.
متخصصین رمزنگاری بین رمز(Cipher) و کد (Code) تفاوت قائل هستند.
- رمز عبارت است از تبدیل کاراکتر به کاراکتر یا بیت به بیت بدون آن که به محتویات زبان شناختی (ادبیات) آن پیام توجه شود.
- کد به معنای تبدیلی می باشد که کلمه ای را با یک کلمه یا علامت دیگر جایگزین می کند.
هدف از رمزنگاری: ذخیرهسازی و انتقال دیتا به شیوهای امن است به طوری که در فرآیند ارسال و دریافت دیتا در بستر نا امن اینترنت، صرفاً افراد مد نظر ما توانایی رمزگشایی دیتای رمزگذاریشده را داشته باشند.
در این مقاله، در ادامه مقاله همه چیز درمورد رمزنگاری (Cryptography) به بررسی رمزنگاری متقارن و نامتقارن و انوع آن ها و تابع هش پرداخته می شود.
اصول کِرکهُف
- سیستم رمزنگاری نه به لحاظ تئوری بلکه در عمل نیز غیر قابل شکست باشد.
- سیستم رمزنگار باید هیچ نکته پنهان و محرمانه ای نداشته باشد بلکه تنها چیزی که باید سری نگاه داشته شود کلید رمز است.(اصل اساسی کرکهف). طراح سیستم رمزنگاری نباید جزییات سیستم خود را حتی از دشمنان مخفی نگاه دارد.
- کلید رمز باید به گونه ای قابل انتخاب باشد که اولاً بتوان به راحتی آن را عوض کرد و ثانیاً بتوان آن را به خاطر سپرد ونیازی به یادداشت کردن کلید رمز نباشد.
- متون رمزنگاری شده باید از طریق خطوط تلگراف قابل مخابره باشند.
- دستگاه رمزنگاری یا اسناد رمز شده باید توسط یک نفر قابل حمل باشند.
- سیستم رمزنگاری باید به سهولت قابل راه اندازی و کاربری باشد. چنین سیستمی نباید به آموزش های مفصل و رعایت فهرست بزرگی از قواعد و دستورالعمل ها نیاز داشته باشد.
اصل اساسی کرکهف می گوید، بنا را بر این بگذارید که الگوریتم رمزنگاری شما برای دشمن شناخته شده است و امنیت سامانه خود را با پنهان نگه داشتن کلید رمزنگاری حفظ کنید. البته این الزاماً به این معنی نمی باشد که باید روش و الگوریتم رمزنگاری در اختیار همگان باشد، اما بایستی در زمان ساخت هر الگوریتم چنین پنداشته شود که همه به آن دسترسی دارند و به عبارت دیگر امنیت سامانه به پنهان ماندن الگوریتم وابسته نباشد.
یکی دیگر از ویژگی های این اصل در این است که اگر الگوریتم را در دسترس همه قرار دهیم درواقع باعث افزایش امنیت آن می شویم زیرا پژوهشگران امنیتی بسیار بیشتری به بررسی آن خواهند پرداخت و با کشف حفره های امنیتی آن از سوءاستفاده از آن ها، توسط دشمنان و جاسوس ها جلوگیری می کنند.
یکی از ویژگی های مثبت استفاده از کلید در این می باشد که اگر به دلیل لو رفتن آن و یا به خطر افتادن امنیت سامانه (به هر شکلی) نیاز به تغییر روش رمزنگاری داشته باشیم، بدون دستکاری الگوریتم که کاری دشوار و زمان بر است، با انتخاب کلیدی نوین که به مراتب فرآیندی راحت تر و سریع تر می باشد می توانیم سیستمی کاملا ایمن داشته باشیم و بدون هیچ نگرانی از کشف کلید قبلی توسط دشمن از آن استفاده کنیم.
تکنیکهای رمزگذاری و رمزگشایی
متقارن (Symmetric )
- در متد رمزنگاری به شیوۀ متقارن فرستنده و گیرنده از یک کلید مشترک برای رمزگذاری و رمزگشایی داده استفاده می کنند که در نامتقارن اینگونه نیست.
- تمام رمزنگاری های کلاسیک از نوع متقارن هستند.
- تا قبل از دهه 70 تنها نوع رمزنگاری به حساب می آمد.
مثل: DES،3DES و AES
نیازمندی های استفاده امن از رمزنگاری متقارن
- وجود یک الگوریتم رمزنگاری قوی
- وجود یک کلید سری که تنها فرستنده و گیرنده از آن آگاه باشند.
- فرض بر آن است که الگوریتم برای همه مشخص می باشد، بنابراین نیاز به یک کانال امن برای توزیع کلید است.
نامتقارن(Asymmetric)
برخلاف رمزنگاری متقارن در رمزنگاری به شیوه نامتقارن از یک جفت کلید عمومی (Public Key) برای رمزگذاری و حفظ محرمانی و کلید خصوصی (Private Key) جهت رمزگشایی استفاده می شود که یک رابطه ریاضی بین آن ها وجود دارد.
مثل: RSA،DH و DSA
استفاده از الگوریتم های asymmetric پردازش زیادی را برای CPU در زمان رمزنگاری و رمزگشایی داده ایجاد می کند. به همین خاطر بجای استفاده از این روش برای رمزنگاری کل اطلاعات، در مراحل خاصی از ارتباط (مانند authentication) استفاده می شود.
یکی از دلایلی که این روش را رمزنگاری public key می نامند این می باشد که ما این کلید را به صورت عمومی در اختیار همه قرار می دهیم. کلید دیگری که در این روش استفاده می شود private key نامیده می شود و این کلید در اختیار کسی قرار نمی گیرد و مخصوص خود دستگاه است.
یک مثال استفاده از این جفت کلید ، دیدن یک سایت امن می باشد. در پشت صحنه صفحه سایت، از این جفت کلید جهت امن سازی ارتباط استفاده می شود. کامپیوتر شما به کلید Public دسترسی دارد و فقط سرور است که کلید private را دارد.
- هر کاربر ابتدا یک زوج کلید عمومی و خصوصی تولید می کند.
- سپس کاربران کلید عمومی را به صورت عمبومی اعلان می کنند، درحالی که کلید خصوصی مخفی باقی می ماند.
- شایان ذکر است که همه قادر به ارسال پیام رمز شده برای کاربردلخواه خود با استفاده از کلید عمومی او می باشند.
- سپس هر کاربر با کمک کلید خصوصی خود، اقدام به رمزگشایی پیام هایی که با کلید عمومی او رمز شده می کند.
شایان ذکر می باشد که سرعت الگوریتم های کلید عمومی از الگبوریتم های رمزگذاری متقارن پایین تر است و طول کلید بیشتری دارد.
برای مطالعه مقاله صفر تا صد سرور کلیک کید
Confusion و Diffusion در رمزنگاری
به طور کلی عملکرد الگوریتم های هَش، رمزنگاری و تولید اعداد تصادفی از اصول Shannon تحت عناوین Confusion و Diffusion پیروی می کنند که Confusion در رمزنگاری به این معنی می باشد که هر بیت تشکیل دهنده متن رمزگذاری شده در خروجی باید به قسمت های مختلفی از کلید و دیتای ورودی ربط داشته باشد، به طوری که رابطه بین دیتای ورودی، کلید و دیتا رمزگذاری شده به سادگی قابل تشخیص نباشد.
Diffusion به این معنی می باشد که تغییر یک بیت در دیتای ورودی باید منجر به تغییر قابل توجهی در دیتای خروجی رمزگذاری شده شود.
هش (Hash)
هش در واقع محصول یک تابع رمزنگاری هش می باشد.
تابع هش عملیات یک سویه ریاضی می باشد که بر روی Plain Text انجام می شود که یک مقدار ورودی با طول نامعلوم را به مقدار فشرده شده ی دیگر تبدیل میکند.
ورودی تابع هش یک مقدار با طول نامعلوم است اما خروجی همیشه طول ثابتی دارد. توابع هش به شدت کاربردی (ذخیره رمز عبور، بررسی صحت داده و ….) هستند و تقریبا در همه حوزه های امنیت اطلاعات حضور دارند.
روش های ایجاد هش
- دستور md5sum در لینوکس
- استفاده از یک محاسبه گر هش آنلاین (مانند MD5 hash generator)
ابزار های کرک هش در کالی لینوکس
- محاسبه هش برای متن ساده کار بسیار ساده ای می باشد.
- تابع هش یک تابع یک طرفه است. به این معنی که شما نمی توانید به سادگی از متن رمزی به متن ساده دست پیدا کنید، حتی در صورتی که تابع هش استفاده شده را نیز بدانید این کار غیر ممکن است.
- در صورتی که متن ساده تغییر پیدا کند، حتی یک تغییر بسیار جزئی، هش خروجی نیز کاملا تغییر خواهد یافت.
- توابع هش دارای قابلیت جلوگیری از تصادم هستند، در نتیجه هیچ وقت نباید دو ورودی متفاوت، هش یکسانی را ایجاد کنند.
- مسلما هش ورودی های یکسان، خروجی های یکسانی نیز خواهد داشت.
خصوصیات کلیدی توابع هش رمزنگاری شده
- Ophcrack
- hashcat
- findmyhash