خواندن 1 دقیقه

رمز نگاری به زبان ساده

تعریف رمز نگاری

چند تعریف برای معنای رمز نگاری نیاز است ابتدا آن هارا با هم بررسی کنیم

متن آشکار(Plaintext)

متنی که رمز نشده است

متن رمز(Ciphertext)

متنی که رمز شده است

رمز(Cipher)

الگورتیمی که Plaintext را به Ciphertext تبدیل میکند را گویند

کلید(Key)

اطلاعاتی که در Cipher استفاده میشود و فقط فرستنده و یا گیرنده آن را میدانند

رمز گذاری(Encipher,Encrypt)

تبدیل Plaintext به Ciphertext

رمز گشایی(Decipher,Decrypt)

استخراج Plaintext از Ciphertext

رمز نویسی(Cryptography)

علم اصول روش های encryption

تحلیل رمز(Cryptanalysis)

علم اصول و روش های Decryption بدون اطلاع از Key که به آن به اصطلاح codebreaking هم گفته میشود

رمز نگاری(Cryptology)

و بالاخره رمز نگاری یعنی علم حاصل از ترکیب Cryptography و Cryptanalysis

رمزنگاری اصولا به دو روش ۱-رمزنگاری متقارن ۲- رمزنگاری نامتقارن تقسیم میشود

رمزنگاری متقارن(Symmetric)

در این روش از کلید مشترک برای Encrypt و Decrypt استفاده میشود از الگوریتم های معروف آن

  • AES
  • DES
  • 3DES
  • Blowfish
  • RC4

رمز های متقارن را میتوان به دو روش عمده تولید کرد:

  • رمز های قطعه ای(Block Cipher)
    در این نوع پردازش پیام های به صورت قطعه ای انجام میشود که اندازه متعارف قطعات ۶۴ و ۱۲۸ یا ۲۵۶ بیت است
    الگوریتم های Blowfish,DES,3DES,AES از این نوع هستند
  • رمز های جریانی(Stream Cipher)
    در این نوع پرداز پیام به صورت پیوسته انجام می شود
    الگوریتم RC4 از این نوع است

مد های کاری رمز های قطعه ای

  • مد ECB: Electronic Code Book
    اشکل اساسی در این مد است که هر Plaintext به ازای کلید یک رمز تولید میکند و با این اوصاف دشمن میتواند دریابد که پیام های یکسان ارسال شده است
  • مد CBC: Cipher Block Chaining
    این مد از یک مقدار اولیه تصادفی(IV)استفاده میکند که به همراه متن رمز شده ارسال میشود
    مزیت این روش است که به ازای هر Plaintext یک IV متفاوت ارسال میشود و یک رمز متفاوت تولید میشود
    البته IV هم باید رمز شود چون ممکن است تحلیلگر با ارسال IV جعلی منجر به تغییر خاصی در پیام رمز شده شود برای همین IV را با مد ECB رمز می کنند

در benchmark زیر سرعت الگوریتم های روش متقارن را مشاهده می کنید

اگر خواستید الگوریتم AES را امتحان کنید به اینجا مراجعه کنید

رمزنگاری نامتقارن(Asymmetric)

در این روش به جای استفاده از یک کلید مشترک از یک جفت کلید به نام های عمومی(public) و خصوصی(private) استفاده میشود به این صورت که با public key اطلاعات encrypt شده و با private key اطلاعات decrypt میشود

از الگوریتم های معروف این روش

  • RSA
  • ElGamal

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

  • حل مساله در اختیار داشتن کلید در روش رمز نگاری متقارن
  • امضای دیجیتال

ویژگی های روش نامتقارن را میتوان موارد زیر عنوان کرد

  • رسیدن به encryption key از decryption key از لحاظ محاسبانی نا ممکن است
  • در حفظ محرمانگی(Confidentiality) رمزگذاری امری همگانی است و نیازی به اشتراک گذاری اطلاعات محرمانه وجود ندارد
  • در حفظ محرمانگی(Confidentiality) رمزگذاری امری اختصاصی بوده است و محرمانگی پیام ها محفوظ می ماند

برای رمزنگاری گام های زیر را بر می داریم

  • هر کاربر یک جفت public key و private key تولید میکند
  • کاربران public key خود را به صورت عمومی اعلام می کنند
  • همگان قادر به ارسال پیام رمز شده برای هر کاربر دلخواه با استفاده از public key او هستند
  • هر کاربر میتواند با استفاده از private key پیام هایی که با public key او رمز شده است را رمز گشایی کند

در benchmark زیر سرعت الگوریتم های روش نا متقارن را مشاهده می کنید

اگر خواستید الگوریتم RSA را امتحان کنید به اینجا مراجعه کنید البته که قرار شد private key محرمانه باشد! ولی خب برای امتحان بد نیست

در رمز نگاری نا متقارن از دو کلید Public key و Private key استفاده می شود

گمراه کنندگی (Confusion) و پراکندگی (Diffusion)

گمراه کنندگی (Confusion) : رابطه بین متن رمزشده و کلید تا حد امکان پیچیده باشد.

پراکندگی (Diffusion) :ساختار آماری Plantext بر روی حجم وسیعی از متنهای رمزشده ممکن پراکنده شود.

الگوریتم های رمز باید خصوصیات آماری Plaintext را به طور کامل مخفی کنند. که الگویتم های
One-Time Pad این عمل را انجام می دهند

حملات تحلیل رمز نگاری

به طور کلی هدف از حمله

  • استخراج Key
  • استخراج Plaintext از متن رمز شده

و نحوه حملات را میتوان به دو روش زیر عنوان کرد

  • بررسی خصوصیات الگوریتم رمز
  • بررسی مجموعه ای از متن های آشکار و رمز شده آن ها

برای مثال یک روش مرسوم Brute Force است که حدس زدن cipher های مختلف و تطابق آن با cipher اصلی، plaintext پیدا میشود ولی این روش مستلزم آن است که الگوریتم استفاده شده برای رمز نگاری را بدانیم

برای رمز نگاری فایل ها و پارتیشین ها در لینوکس از gpg استفاده می کنیم

در نوشته قبلی با انواع الگوریتم های رمز نگاری آشنا شدیم

حال میخواهیم از این الگوریتم ها در رمز نگاری فایل ها و پارتیشن ها استفاده کنیم

این دستور العمل ها صرفا برای لینوکس و مک تهیه شده است

ما برای رمز نگاری از نرم افزاری به نام gpg استفاده میکنیم در ویندوز اسم این برنامه pgp است

رمزنگاری یک فایل

ابتدا برای ساخت یک کلید برای خودمان از دستور زیر استفاده می کنیم

gpg --gen-key

لیست کلید های روی ماشین را میگیریم

gpg - - list-keys

 

فایلی که میخواهیم رمز کنیم را با دستور زیر به gpg می دهیم

gpg - - encrypt –r mostafa file.txt

 

برای رمز گشایی هم از دستور زیر استفاده می کنیم

gpg -o file.txt.gpg.decrypted - -decrypt file.txt.gpg

 

یک راه دیگر برای رمز نگاری و رمز گشایی فایل ها روش زیر است که توسط برنامه های بیشتر پشتیبانی می شود

فایلی که میخواهیم رمز کنیم را با دستور زیر به gpg می دهیم

gpg -e - - armor –r mostafa file.txt

 

برای رمز گشایی هم از دستور زیر استفاده می کنیم

gpg -o file.txt - - decrypt –r mehdi file.txt.asc

 

تا اینجا همه چیز روی یک ماشین بود

حالا می خواهیم public key یا کلید عمومی خودمان را به دیگران بدهیم که دیگران با کلید عمومی ما فایل مورد نظر را رمز و برای ما ارسال کنند

ابتدا یک خروجی از کلید عمومی خود میگیریم

gpg - - export - - armor -o machine1.asc.pub

 

سپس آن را به در اینترنت یا key server و یا هر طریقی در اختیار دیگران می گذاریم

هر کس بخواهد کلید عمومی ما را داشته باشد این دستور را وارد می کند

gpg --import machine1.asc.pub

 

لیست کلید ها را چک می کند و باید اسم افرادی که کلید آن هارا داریم را داشته باشیم

gpg --list-keys

 

سپس با این دستور برای یک یا چند دریافت کننده که کلید عمومی آن ها در ماشین موجود است فایل را رمز می کنیم

gpg --armor --recipient "mehdi" --recipient "farid" --output "message.txt.asc"

 

حالا می توانیم ایمیل های رمز شده بفرستیم!

gpg --armor --recipient "mehdi" --output "message.txt.asc" --encrypt "message.txt"

 

و ایمیل های رمز شده بخوانیم

gpg –d –a –r mehdi message.txt.asc

 

اگر بخواهیم علاوه بر رمز کردن یک فایل، آن را هم امضا کنیم میتوانیم از دستور زیر استفاده کنیم

gpg --local-user "YOURNAME" --recipient "RECIPIENT" --armor --sign --output "message.txt.asc" --encrypt " message.txt

رمز نگاری یک پارتیشن

برای رمز نگاری یک پارتیشن از LUKS استفاده کنیم

برای این کار ابتدا پکیج cryptsetup را نصب می کنیم

پارتیشین مورد نظر را با دستور زیر فرمت می کنیم

cryptsetup -y luksFormat /dev/sdb1

 

با دستور زیر پارتیشن را به اصطلاح به ماشین مپ می کنیم

cryptsetup luksOpen /dev/sdb1 secretfs1

 

سپس یک فایل سیستم روی آن قرار می دهیم

mkfs –t ext4 /dev/mapper/secretfs1

 

حال آن را mount می کنیم

mount /dev/mapper/secretfs1 /mnt/secretfs1

 

بعد از اتمام کار با پارتیشن آن را mount و Close می کنیم

umount /mnt/secretfs1;cryptsetup luksClose secretfs1

 

اگر پارتیشن را در هنگام بوت Open کنید در همان موقع بوت هم پسورد پرسیده می شود

منابع

  • فناوران آنیسا
  • باوی تک
  • http://ce.sharif.edu/courses/93-94/2/ce442-1