مقدمه ای بر رمزنگاری - Introduction to Crypto

وضعیت
گفتگو بسته شده و امکان ارسال پاسخ وجود ندارد.

TyRaX

موجودی خوشحال
کاربر سایت
Oct 21, 2005
1,824
نام
پارسیا
مطمئناً شما هم در اینترنت با کلماتی مانند https یا SSL یا رمزنگاری برخورد کرده اید. به عنوان مثال در مرورگر خود ممکن است چنین عکسی را ببینید.

bohlool.jpg

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

لطفاً به چند نکته دقت زیادی مبذول بفرمایید. خواهشمندم با دقت بخوانید تا بعدها سوءتفاهمی ایجاد نشود.

1. این گفتگو بیشتر از اینکه برای انتقال دانش باشد، تمرینی برای خود من است که در ترم آینده باید نقش دستیار چنین درسی را بر عهده بگیرم.

2. به همین دلیل، حتما اشتباهاتی وجود خواهد داشت و من نیز اصراری ندارم که حرفهایم 100% درست است. لطفاً اشتباهات و کم‎‌کاری‌ها را به من یادآوری کنید.

3. ممکن است هنگام توضیح موردی، به خاطر بیاورم که تمامی پیش فرضهای آن را یادآوری نکرده ام و انسجام مطالب کمی به هم بخورد تا تمامی پیش‌فرضها را توضیح دهم.

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

5. در اکثر موارد ممکن است از نام انگلیسی استانداردها، روش‌ها و اصطلاحات استفاده کنم. این بدان معنی نیست که من با زبان فارسی مشکل دارم، بلکه بدین معنی است که از نظر من اصطلاحات علمی را باید به زبانی که اکثر همان فن متوجه می‌شوند و بکار می‌برند، استفاده کرد. اکثر مطالب و مقالات علمی به زبان انگلیسی است. همینطور، معادل فارسی بسیاری از این اصطلاحات موجود نیست (یا اگر موجود هست من نمی‎‌دانم، زیرا در طول تحصیل استفاده نکرده ام). در انتها نیز، با یادگیری کلمات به زبان فنی، اگر با شخصی روبرو شدید که زبان مشترکی نداشتید، با گفتن آنها به زبان فنی، شانس بیشتری برای انتقال مطلب خود دارید، زیرا احتمال اینکه وی هم آن را به زبان اصلی خوانده باشد زیاد است. اگر علاقه به معادل ها دارید، لطفاً آنها را جستجو کرده و استفاده کنید.

6. این گفتگو قفل است، زیرا ترجیح می‌دهم که همه نوشته ها در کنار یکدیگر باشد.

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

8 . رزرو شده .
 

TyRaX

موجودی خوشحال
کاربر سایت
Oct 21, 2005
1,824
نام
پارسیا
عقیده من بر این است که به این صورت جلو بروم.

1. ابتدا از رمزنگاری و تعاریف کلی مربوطه شروع کنم. موارد مقدماتی و رمزنگاری های قدیمی مانند Caesar's Cipher که کاربردی ندارند را توضیح ندهم و به سراغ اصل مطلب بروم.

2. در مورد رمزنگاری های Symmetric و Public Key Crypto صحبت کنم.

3. در رمزنگاری های Symmetric از AES و DES و 3DES و ... صحبت کنم. با تاکید بر AES (بدون توضیحات فنی بسیار).

4. در Public Key Crypto از RSA و Certificate ها صحبت کنم.

5. الگوریتم تبادل کلید DH .

6. در مورد SSL و روش‌های حمله به آن.

6. توضیحاتی کلی در مورد حمله به رمزنگاری‎‌ها و روش‌های شکستن آنها .

7. اگر موارد جالبی در میان نوشتارهای بالا به ذهنم رسید، در این قسمت بیان خواهم کرد.

اگر فکر می‌کنید، موارد جالب دیگری نیز هست لطفا یادآوری کنید. اگر اطلاعاتی داشته باشم، خواهم نوشت. در غیر این صورت، "نمی‌دانم"جواب من خواهد بود. من نیز خود دانشجویی در این زمینه هستم و هیچ کسی همه موارد را نمی‌داند.
 
آخرین ویرایش:

TyRaX

موجودی خوشحال
کاربر سایت
Oct 21, 2005
1,824
نام
پارسیا
در ابتدا به مقدمات می‌پردازیم.
لطفا توجه کنید ممکن است به نسبت سیستم عاملی که متون نوشته می‌شوند، تفاوتهایی در رسم‌الخط وجود داشته باشد. به عنوان مثل در کیبورد فارسی من در ویندوز کاما یا ، با استفاده از کلیدهای کنترل و T است، اما در لینوکس (و مخلفات) این کار توسط shift+7 انجام می‌شود. همین‌طور نیم‌فاصله در ویندوز با استفاده از ctrl+shift+2 و در لینوکس با shift+space است.

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

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

به زبان دیگر ما می‌خواهیم که confidentiality داشته باشیم. به این معنا که نمی‌خواهیم داده‌های ردوبدل شده توسط شخص سوم روی‌خط قابل خواندن باشد.

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

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

۲. Symmetric Cryptography (رمزنگاری متقارن - متاسفانه من در جستجوهایم برای یافت معادل به این نتیجه رسیدم که در فارسی هم Encryption و هم Cryptography به معنای رمزنگاری ترجمه شده اند، البته برای ما که از معادل‌های انگلیسی استفاده می‌کنیم تاثیری ندارد).
در Symmetric Crypto هر دو طرف یک کلید مشترک دارند، یک سمت داده را با آن کلید رمزنگاری می‌کند و سمت دیگر با همان کلید رمز را می‌گشاید. یکی از مشکلات این روش این است که باید به طریقی مخفیانه، کلید را بین دو طرف به اشتراک گذاشت. (بعدها در این مورد در الگوریتم‌های تبادل کلید یا key exchange صحبت خواهیم کرد).

۳. Public Key Crypto (رمزنگاری کلید عمومی):
در این روش یک جفت کلید وجود دارد. یکی از این کلیدها کلید عمومی (public key) و دیگری کلید خصوصی (private key) نام دارد. یکی از طرفین داده را با یکی از این کلیدها رمزنگاری می‌کند و شخص دیگر با کلید دیگر آن را می‌گشاید.

۴. Random Number Generator = RNG ، تولیدکننده اعداد تصادفی.
برای تولید اعداد تصادفی بکار می‌رود. اعداد تصادفی یا رندوم در رمزنگاری اهمیت بسیار بالایی دارند، و باید حدس زدن آنها برای حمله کننده مشکل باشد. متاسفانه RNG به معنای واقعی وجود ندارد و به جای آن از Pseudo RNG (شبه-RNG ) استفاده می‌شود.

۵. Certificates یا گواهی‌ها.
با public key crypto رابطه نزدیکی دارد. از گواهی‌ها برای شناسایی و تایید هویت طرف مقابل استفاده می‌شود. در مثال بانک، با استفاده از گواهی بانک می‌توان پی برد که آیا سایت واقعی بانک است و یا خیر.

۶. hash function (معادل فارسیش را نمی‌دانم).
توابعی هستند که با گرفتن یک ورودی، هش آن را حساب کرده و یک خروجی (معمولا با طول مشخص) به ما می‌دهند. طول ورودی ممکن است متفاوت باشد اما طول خروجی معمولا همیشه ثابت است. در واقع خروجی، نشانه ای از محتویات داخل فایل است. یک تابع هش خوب باید چهار قابلیت مهم داشته باشد.
الف. Preimage Resistance : با داشتن هش یک پیام، نتوان اصل آن پیام را تولید کرد. در واقع تابع هش باید یک طرفه باشد.
ب. 2nd Preimage Resistance : با داشتن پیام m1، نباید بتوان پیام m2 (متفاوت از m1) را پیدا کرد به صورتی که هش برابر داشته باشند.
پ. Collision Resistance : باید پیدا کردن دو پیام متفاوت که هش یکسان داشته باشند، سخت باشد.
ت. پیچیدگی محاسبه تابع هش پایین باشد. (یعنی بتوان هش را سریع محاسبه کرد).


۷. .. چیز دیگری به ذهنم نمی‌رسد. با جلوتر رفتن این مطالب ویرایش خواهد شد و اصطلاحات دیگری اضافه خواهند شد.

همانگونه که در بالا نوشتم، بسیاری از این موارد گنگ هستند اما با جلوتر رفتن و دیدن مثالهای بیشتر می‌توانیم آنها را بهتر بفهمیم.

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

کاربرانی که این قسمت را مشاهده می‌کنند

Top
رمز عبور خود را فراموش کرده اید؟
or ثبت‌نام سریع از طریق سرویس‌های زیر