پست قبلی: الگوریتم های سزار و اِنیگما
در پست های قبلی این مجموعه، ابتدا با الگوریتمهای درهمنگاری(Hash) و الگوریتمهای Encoding/Decoding آشنا شدیم، تفاوت آنها را با الگوریتم های رمزنگاری (Encryption/Decryption) بررسی کردیم و در نهایت پس از بررسی مقدمات توسعهی رمزنگاری و علل نیاز به آن، در این پست قرار است به تقسیمبندی های الگورتیم های رمزنگاری امروزی بپردازیم.
- Plain Text: متن رمز نشده ای که قرار است برای رمزشدن به تابع Encryption وارد شود و همچنین متن رمزنشده ای از تابع Decryption بازگردانده میشود.
- Cipher Text: متن رمز شده ای که از تابع Encryption بازگردانده میشود و همچنین متن رمزشده ای که برای خارج شدن از رمز به تابع Decryption وارد میشود.
- Cipher: الگوریتمی که برای Encrypt یا Decrypt استفاده میشود. با این تعریف، در بعضی موارد از Encipher و Decipher به ترتیب به جای Encoding و Decoding استفاده میشود.
- Key: یک اطلاعات محرمانه که فقط و فقط فرستنده و گیرندهی پیام رمز شده از آن اطلاع دارند. Cipher از این کلید، برای انجام عملیات Encrypt و/یا Decrypt استفاده میکند.
- Cryptanalysis: به مطالعات و فعالیت هایی که روی یک الگوریتم رمزنگاری یا دادههای آن انجام میشود تا به واسطهی آنها امکان استخراج کلید رمزنگاری از داده های در دسترس یا امکان استخراج دادههای رمزنشده بدون داشتن کلید، بررسی شود. نام دیگر این فیلد Codebreaking میباشد.
- Salt, Nonce, Initial Vector: در پستهای بعدی!
- تقسیم بر اساس تعداد کلیدهای لازم:
- تقسیم بر اساس نوع پردازش Plaintext:
- برای این که یک ارتباط دو طرفهی کاملا امن بین Alice و Bob برقرار باشد، Bob هم باید یک جفت کلید تولید کند و کلید عمومی خودش را به Alice بدهد تا Alice به جای استفاده از کلید خصوصی خودش در مرحلهی 2، از کلید عمومی Bob استفاده کند(تا هیچکسی جز Bob قادر به رمزگشایی آن نباشد).
- برخلاف الگوریتمهای متقارن که در آنها لازم بود گیرنده و فرستنده از قبل به صورت مخفیانه با هم یک کلید را به اشتراک بگذارند، در الگوریتمهای نامتقارن، برای این که Alice و Bob بتوانند یک پیام محرمانه به همدیگر ارسال کنید، نیازی به اشتراک گذاشتن کلید به صورت مخفیانه نیست، بلکه به صورت کاملا واضح، کلیدهای عمومی خود را به همدیگر ارسال میکنند و کسی با استفاده از آنها نمیتواند به داده های رمزشده دست پیدا کند، زیرا در یک ساختار صحیح از Public Key تنها برای رمزکردن (Encrypt) و از Private Key تنها برای رمزگشایی (Decrypt) استفاده میشود.
- طول خروجی باید با طول ورودی الگوریتم برابر باشد (بر طبق اصل لانهی کبوتری، خروجی نمیتواند از ورودی کوتاه تر باشد. بلندتر بودن خروجی هم مزیتی ندارد و لازم نیست)
- فاش شدن الگوریتم نباید موجب شود Attacker بتواند دادههای رمز شده را رمزگشایی کند؛ و به عبارت دیگر باید تنها مبتنی بر محرمانه نگه داشتن کلید باشد. (یکی از اصول کرکهافس).
- RSA یا Rivest-Shamir-Adleman
- ECC یا Elliptic Curve Cryptography
- DH یا Diffie–Hellman
- ElGamal
- DES یا Data Encryption Standard
- TDES یا 3DES یا Triple DES
- AES یا Advanced Encryption Standrad