تفاوت Encryption , hashing , encoding

part 1 : a brief introduction about encryptionبه عنوان یک تازه کار ، از همون اوایل خیلی جاها واژه های encryption , decryption , hashing function ,encoding , decoding رو میشنیدم و یکم در موردش پرس و جو میکردم ، اما هیچوقت یه دید کلی و مقایسه ی کامل ازشون نداشتم . اما بلخره تصمیم گرفتم یک بار برای همیشه تفاوت بین این ها رو به صورت کامل یادبگیرم و خودم این مقایسه رو انجام بدم. این پست یک مقدمه ای کوتاه و ابتدایی در مورد فرق رمزگذاری ، هش ، انکدینگ میباشدخوب بیاید نوبتی سوالارو مطرح کنیم و بهشون جواب بدیم : اول اینکه encryption با چه هدفی ایجاد شده ؟فرض کنید شما توی نقطه ی A ایستادین و دوست صمیمی شما هم توی نقطه ی B هست . شما قصد دارین یه پیام یا یسری اطلاعات رو از طریقِ کبوتر نامه رسون به اون فرد منتقل کنید . خوب تا اینجای کار که هیچ مشکلی نیست . اما فرض کنید که یه روز شما بخواید یک پیامی رو برای دوستتون بفرستین که خیلی مهم باشه و دوست ندارین کسی غیر از خودِ دوستتون از پیامِ شما با خبر بشه . این حقِ شماست و کسی هم روی کاغذ این اجازه رو نداره که به زور از حرفای دو نفر خبردار بشه . اما اینکه پیامتون رو خیلی خشک و خالی وصل کنید به پای کبوتر و بفرستینش هوا خیلی تضمینی نمی ده که پیام شما به سرقت نره ، چون ممکنه یه فرد توی مکانی به اسم C که بین شما و دوستتون هست ، این کبوتر رو شکار کنه یا به دام بندازتش . در این صورت اطلاعات شما لو رفته و دیگه حریم خصوصی ای عملا وجود نداره . اینجاست که پای رمزگزاری میاد وسط . به این دو متن توجه کنید سلام . ساعت 3 ظهر فردا بیا پای درخت شاتوت . ضقش3ص2345rfgasdfش2**2^$%#4 خوب . این واضحه که انسان ها برای ارتباط برقرار کردن با هم از یه سیستم منظم و معنی دار استفاده میکنن که بهش میگیم <<زبان>> . یعنی اگر یسری علامت ها ( حروف ) رو به یه حالات خاص به کار ببریم و کنار هم بچینیم <<کلمات>> به وجود میان که برای ما یک معنای خاص میده و هرچی غیر از اون دیگه هیییچ معنایی پیدا نمیکنه . هدف از رمزگذاری هم اینه که پیامی که مدنظر ماست فقط برای ما و اونی که میخوایم معنی داشته باشه و هر کس دیگه ای وقتی خواست پیام مارو گوش کنه یسری چیزای بی معنی نصیبش بشه . یه مثال : فرض کنید من و اونی که میخوام باهاش صحبت کنم با هم قرار داد ببندیم که از این به بعد برای اینکه کسی پیام های مارو نفهمه بیایم و اینکار رو انجام بدیم : هر حرفی که توی پیاممون خواستیم استفاده کنیم رو به جاش سه حرف بعدی توی اون الفبا رو قرار بدیم مثلا توی فارسی به جای حرف <<ب>> از حرف <<ث>> استفاده کنیم. اینجوری پیام ما برای هر کسی به جز خودمون یک چیز بی معنا و مفهوم میشه . پیام ما ------------------------------> سلام چیزی که بقیه می بینند -------> ضوتپبیاید یکم با اصطلاحاتی که قرار بعدا ازشون استفاده کنیم در قالب این مثال آشنا بشیم . در این مثال به متنی که بدون رمز گذاری داریم استفاده می کنیم می گن plain text ( همون <<سلام>> توی مثلال ) ، به متن بی معنی که کسی چیزی ازش نمی فهمه میگن cipher text ، اون فرآیندی که برای بی معنی کردنِ پیاممون داریم استفاده می کنیم و plain text رو تبدیل به cipher text میکنیم رو بهش میگن رمزگذاری ( encryptoin ) ، و به الگوریتمی که برای اون استفاده میکنیم ( توی مثال جابجایی سه تا به جلو بود ) کلیدِ رمز گفته میشه . مثال بالا یه مثال خیلی خیلی ساده بود و توی واقعیت استفاده کردن از همچین رمز هایی عملا بی فایدست و خیلی خیلی راحت و سریع میشه رمزش رو شکست و به متن اولیه رسید . اما الگوریتم های رمزگذاری خیلی خیلی خیلی میتونند پیشرفته تر باشند طوری که تحت هیچ عنوان نشه با داشتن cipher text به plain text رسید . نکته ای که اینجا باید بگم و خیلی خیلی توی درک تفاوت hash با encryption اساسی هست و بعدا بهش میرسیم اینه که :تماااام الگوریتم های رمزگذاری باید و باید یه شرط رو داشته باشند و اون شرط اینه که همممگی اون ها باید دو طرفه (two way function ) باشند . یعنی اینکه با داشتن الگوریتم( کلیدِ) رمز علاوه بر اینکه بشه یک متن ساده رو به یک متن رمزگذاری شده تبدیل کرد ، برعکسش هم شدنی باشه . یعنی با داشتن اون کلیدِ رمز ، بشه از عبارت رمزگذاری شده به عبارت اصلی رسید .حالا بیاید و یکم در مورد رمزنگاری و استفاده ی اون توی زندگی مدرن تکنولوژی صحبت کنیم و بفهمیم الان که دیگه خبری از کبوترِ نامه رسان نیست و بجاش بستری به اسم اینترنت هست این رمزگذاری چجوری استفاده میشه . توانایی فرستادن دیتا ( اطلاعات ) و دریافت اون در قالب شبکه های کامپیوتری یک پیشرفت بزرگ محسوب میشه . اما مثل قبل ، یکی از چالش های اساسی اون حفظ حریم خصوصی افراد می باشد . در اینجا هم ما با کاربرد رمزگذاری اطلاعات مواجه هستیم . فرض کنید که شما یک فایل متنی حاوی یک پیام رو میخواید از طریق یک برنامه ی پیام رسان از یک سیستم به یک سیستم دیگه ارسال کنید . پیام شما بعد از خارج شدن از سیستم شما وارد فضایی میشه به اسم اینترنت و دیگه شما هیچ کنترلی روی اون ندارید و بقیه اش کار کابل ها و امواج و روتر هاست . حالا اگه یک نفر بتونه دیتای شما رو شنود (sniff ) کنه انوقت خیلی راحت به محتوای دیتای شما دسترسی پیدا میکنه که میتونه خیلی خطرناک تر از سرقت اطلاعات سنتی باشه ، چرا که دیتای شما ممکنه حاوی پسورد ها یا خیلی اطلاعات حیاتی دیگه باشه .رمزگذاریِ متقارن ( symmetric encryption ) : رمزگذاریِ متقارن رمز گذاریِ متقارن یک روش برای انتقال اطلاعات بین سیستم ها وسرویس های مختلفه . طبق این تصویر توی رمز گذاری متقارن دیتایِ اولیه ( plain text ) توسط یک الگوریتم ، رمزگذاری میشه . بعد از اون ، دیتای رمزگذاری شده ( cipher text ) از طریق کابل یا هرچی منتقل میشه به مقصد . توی مسیر هرکس دیتای مارو گیر بندازه چیزی که نصیبش میشه یسری دیتای بی معنی هست . این روش بسیار مناسب می باشد اما مسئله ای که مطرحه اینه که خودِ کلیدِ رمز چجوری ازA به Bبرسه ؟؟ اگر قرار باشه که خود کلید رو هم همراه با cipher test به سمت مقصد بفرستیم ، فرد سارق با داشتن کلیدِ رمز و خود دیتا ، میتونه خیلی راحت اون دیتای رمزگذاری شده رو دیکریپت ( decrypt ) کنه و به دیتای اولیه و معنا دار برسه . اینجاست که دومین روش برای رمز گذاری میاد وسط .رمزگذاریِ نامتقارن ( asymmetric ) :رمزگذاریِ نامتقارناین روش بسیار زیباست . در این روش هر یک از افراد ، دارای دو کلید می باشد . کلید عمومی و کلید خصوصی کلید عمومی چیزی هست که ما اون رو به همه میتونیم نشون بدیم و دست هرکس بیفته مشکلی به وجود نمیاره . اما کلید خصوصی کلیدی هست که فقط باید دست خودِ ما باشه و کسی از اون نباید با خبر باشه .نحوه ی کار اینجوری که بین کلید های خصوصی و عمومیِ هر فرد ، یک رابطه ی ریاضی هست . جوری که دیتای هایی که با کلید عمومی رمزگذاری شده باشند ، با کلیدِ خصوصیِ همون فرد قابل دیکریپت شدن هستند . شما شبکه ای رو در نظر بگیرید که متشکل از 100 سیستم مختلف می باشد ، هر سیستم برای خود یک رمز عمومی دارد که میتواند آن را در اختیار سایر افراد قرار دهد یا حتی در یک سِروِر ، کلید عمومی خود را قابل جستجو و دستیابی برای سایر افراد قرار دهید . اما هر سیستم رمز خصوصی خود را به صورت شخصی فقط و فقط در سیستم خود نگه میدارد . حالا یه سیستم به اسم A قصد داره یه دیتا رو به B بفرسته . طبق عکس بالا که به زیبایی توضیح داده سیستمِ A به یه نحوی کلید عمومیِ سیستم B رو پیدا میکنه ( با درخواست ازش یا سرچ کردن توی یه دیتابیس که کلید های عمومی نگهداری میشود ) سیستم A با داشتن کلید عمومیِ سیستم B اون دیتایی که میخواد بفرسته رو رمزگذاری می کنه و اون رو میفرسته به سمت B . توی مسیر هرکس به دیتا دسترسی پیدا کنه فقط یه سری دیتای رمز گذاری شده نصیبش شده و خبری از کلید رمز هم نیست . بعد از اینکه دیتای مذکور به سیستم B میرسه ، سیستم B با کلید خصوصیِ خودش ، اون دیتای رمز گذاری شده رو رمزگشایی ( همون decrypt ) میکنه و به این صورت فرایند به صورت کامل انجام میشه .معروف ترین الگوریتم های رمزنگاری :RSA , AES , caesar cipher پایانِ قسمتِ اول ( مقدمه ای بر رمزنگاری ) برای مطالعه ی قسمت دوم این پست بر روی این لینک کلیک کنید