در این پست از فول کده میخوایم درمورد Hash Code و Encryption و Decryption توضیحی رو خدمت شما دوستان عزیز بدیم.
هش کد (Hash Code) چیست؟
- هش مانند اثر انگشت عمل میکند.
- کدهایی هستند بر اساس الگوریتمهایی که با محاسبات بر روی فایل ها تولید می شوند.
- یعنی طبق یک سری الگوریتم هایی که بر روی فایلها محاسبات انجام میدهند برای آنها یک کد یکتایی (Unique) تولید می کنند.
- این کد در صورتی که حتی یک bit از آن فایل عوض شود، تغییر میکند.
- چون هیچ دو فایلی Hash کدی همانند هم ندارند (مگر آنکه هردو یک فایل باشند ولی با نامهای متفاوت و یا مکانهای متفاوتی) بنابر این، میتوان Hash کدها را همانند اثر انگشت ما انسانها دانست.
- معکوس پذیر نیست.
Hashing یا درهم سازی چیست؟
- فرآیند تبدیل کردن یک رشته کاراکتر به یک مقدار کوتاه تر با اندازه ثابت، که در نهایت نمایانگر رشته اصلی باشد، درهم سازی یا Hashing گفته می شود
- معمولا برای انجام این عملیات یک تابع یا Function انجام می شود که به تابع درهم سازی یا Hash Function معروف است.
- از الگوریتم های درهم سازی یا Hashing برای Indexing و بدست آوردن داده ها در پایگاه های داده بیشتر استفاده می شود زیرا سریعتر هستند
- جستجو کردن بین مقادیر Hash با اندازه ثابت بسیار سریعتر از جستجو کردن مقدار اولیه است که ممکن است بسیار طولانی باشد.
- تصور کنید که شما یک فایل متنی با 10 هزار خط متن را به یک الگوریتم درهم سازی یا Hashing می سپارید و خروجی آن یک رشته داده 128 بیتی خواهد بود ، در همین حین اگر شما یک فایل متنی با 1 خط متن هم به همین الگوریتم درهم سازی یا Hashing تحویل دهید در نهایت خروجی شما نیز یک رشته داده 128 بیتی خواهد بود.
- تصور کنید شما هزاران فایل داده دارید با حجم های مختلف که می خواهید در آنها جستجو کنید ، به جای اینکه به دنبال فایل اصلی بگردید کافیست که فقط به دنبال مقدار Hash مورد نظر بگردید و این فرآیند جستجوی شما را در پایگاه های داده بسیار سریع می کند.
- یکی از پر کاربردترین استفاده های یک تابع درهم سازی یا Hashing Function در پایگاه داده های وب سایت ها یا حتی سیستم خود شما برای نگهداری رمزهای عبور است.
- تمامی رمزهای عبوری که در پایگاه داده یک وب سایت ذخیره می شوند به حالت Hash شده نگهداری می شوند ، این یعنی اینکه اگر رمز عبور شما 1 کاراکتر باشد و یا اینکه 100 کاراکتر باشد در نهایت بصورت مثلا یک رشته داده 128 بیتی در پایگاه داده بصورت درهم سازی شده نگهداری می شود.
- هر بار که شما می خواهید به وب سایت وارد شوید ، رمز عبور شما دریافت می شود و تبدیل به مقدار یا Hash Value می شود و با پایگاه داده مورد نظر مقایسه می شود ، اگر مقادیر برابر بود یعنی رمز شما درست است ، دیگر فرقی نمی کند رمز شما یک کاراکتر باشد یا ده ها کاراکتر در نهایت سرعت جستجو در چنین حالتی بسیار بالا خواهد رفت.
- نکته مهم در خصوص توابع درهم سازی یا Hashing Function ها این است که شما هر چقدر هم که اندازه فایل داده ورودی داشته باشید در نهایت یک رشته داده مشخص خروجی خواهید داشت و حتی اگر یک بیت از داده های اولیه شما تغییر کند ، خروجی شما کاملا متفاوت خواهد بود و این یعنی اینکه می توان با استفاده از الگوریتم های درهم سازی یا Hashing صحت داده های شما را بررسی کرد.
کاربردهای هش کد(Hash Code)
یکی از مهمترین کاربرد های آن، اطمینان از کامل و سالم بودن فایل دانلود شده میباشد. اگر فایلی ناقص دانلود شده باشد و یا حتی از لحاظ ظرفیت یکی باشند ولی کد Hash آنها با هم متفاوت باشد، نشان از درست نبودن عمل دانلود میباشد و یا حتی در حالاتی خاص ویروسی شدن فایل میتواند باعث تغییر Hash Code شود.
از روش Hashing (هشینگ) برای پنهانسازی واقعیت متون و فایلها استفاده می شود؛ در این روش کاربر برای اینکه امنیت کلمه عبورش که بر روی شبکه قرار دارد، آن را به صورت هش ( یک کلید واژهی ۱۲۸ بیتی ) ذخیره میکند.
انواع مختلفی از الگوریتم های قوی هش کردن برای استفاده در برنامه های کاربردی موجود هستند، محبوب ترین آنها که مورد استفاده برنامه نویسان هستند MD5 و SHA-1(Secure hash algorithm) می باشند.
MD5 چیست؟ آیا می دانید در دنیای کامپیوتر هر فایل دارای یک اثر انگشت منحصر به فرد است این اثر انگشت MD۵ Checksum یا ام دی ۵ یا Message-Digest algorithm ۵ یا کد هش /hash code نامیده می شود MD۵ معمولا در سایت های دانلود نرم افزار دیده می شود به دلیل اینکه هر تغییر کوچک و بزرگ در فایل یا برنامه سبب تغییر کلی MD۵ یا اثر انگشت آن می شود.
استفاده های فراوان MD۵ Checksum
از اثر انگشت فایل استفاده های بسیاری می شود.
مثلا برای تست صحت فایل ها: برای اینکه بفهمیم در هنگام انتقال فایل ها آیا تغییری در اثر خطا یا عوض شدن با فایلی مخرب ایجاد شده است از md۵ استفاده می شود اثر انگشت هر فایل با ام دی ۵ یک کد با طول ثابت (۳۲ کاراکتر) است مثلا اگر MD۵ یا اثرانگشت فایلی به بزرگی ۱۰۰ مگابایت را با اثر انگشت فایلی به حجم چند کیلوبایت از نظر طول کد تولید شده مقایسه کنید یکسان است از این مطلب یک چیز مهم برداشت می شود : کد تولید شده توسط MD۵ یک طرفه است یعنی نمی توان از کد به فایل رسید این ویژگی باعث استفاده های بیشتری از MD۵ Check sum می شود مثلا بعضی برنامه نویسان برای چک کردن صحت یک رمز / پسورد از md۵ استفاده می کنند یا بعضی از انتی ویروس ها کد md۵ ویروس ها را در دیتابیس خود ذخیره کرده و در هنگام اسکن فایل اثر انگشت فایل را تولید و با پایگاه داده ی خود مقایسه می کنند که البته این روشهای استفاده پسندیده نیست و مثلا می توان با تغییری بسیار کوچک مثلا افزودن چند بیت بی مصرف به ویروس یا فایل مخرب کد MD۵ Checksum آن را تغییر داد
همچنین در سال ۲۰۰۷ گروهی از محققان شامل Arjen Lenstra روشی را شرح کردند که با آن می توان دو فایل با یک اثر انگشت تولید کرد ولی باید توجه داشت که مساوی شدن کد ام دی ۵ دوفایل یک در عدد ۳.۴ در ۱۰ به توان ۳۴ است. در ویکیپدیا و همچنین نرم افزار هایی به نام هایی چون md۵ crack یا MD۵CRK برای پیدا کردن رمز های کد شده توسط md۵ وجود دارند
استفاده از md۵ برای کاربران اینترنت
برای استفاده از md۵ برای چک کردن اینکه آیا فایل دانلود شده به صورت کامل است و اینکه فایل توسط ویروسی آلوده نشده و غیره باید در صفحه ی دانلود نرم افزار یا فایل به دنبال کد md۵ آن بگردید و بعد از دانلود و تولید کد md۵ با نرم افزاری که در ادامه توضیح داده شده است و چک کردن برابری دو کد تولید شده اگر برابر بود فایل کاملا درست بوده و اگر برابر نیودند معلوم می شود که یا فایل ناقص دانلود شده است یا یک فایل دیگر دانلود شده یا فایل تغییر یافته و توسط ویروسی آلوده شده است
یكی از راه های اعتماد سازی در یك تبادل اطلاعات دو طرفه استفاده از امضاهای دیجیتال است
رمزنگاری یا Encryption چیست؟
رمزنگاری یا Encryption به فرآیندی گفته می شود که داده های ما تبدیل به یک قالب جدید می شوند که برای افراد غیر مجاز غیر قابل درک است و فقط افراد مجاز دارای دسترسی می توانند محتویات داده را به صورت مناسب مشاهده کنند.
به این قالب جدید داده ای که ایجاد می شود متن رمزنگاری شده یا Cipher-Text گفته می شود ،
به فرآیند بازگردانی Cipher-Text به قالب اصلی داده در اصطلاح رمزگشایی یا Decryption گفته می شود.
مهمترین نکته ای که در خصوص رمزنگاری وجود دارد این است که فرآیند رمزنگاری شما متناسب با اندازه و مقدار داده های شما می باشد و با اضافه شدن میزان داده های اطلاعاتی به الگوریتم های رمزنگاری طبیعتا Cipher-Text های خروجی نیز دارای اندازه متناسبی می باشند.
شما برخلاف الگوریتم های درهم سازی یا Hashing در الگوریتم های رمزنگاری یا Encryption می توانید از داده های رمزنگاری شده داده های خود را بیرون بیاورید و به این عملیات رمزگشایی یا Decryption گفته می شود.
در فرآیند رمزگشایی شما حتما باید به عنوان یک کاربر مجاز کلید رمزگشایی الگوریتم رمزنگاری متناظر را بایستی داشته باشید تا بتوانید فرآیند رمزگشایی را به درستی انجام دهید.
الگوریتم رمزنگاری یا Encryption ای به عنوان الگوریتم رمزنگاری قوی شناخته می شود که بدون داشتن کلید رمزگشایی نشود به داده های آن دسترسی پیدا کرد.
انواع و اقسام الگوریتم های رمزنگاری وجود دارد که مهمترین طبقه بندی آنها الگوریتم های رمزنگاری متقارن و نامتقارن هستند.
در الگوریتم های رمزنگاری متقارن همان کلیدی که برای رمزنگاری استفاده شده است برای رمزگشایی نیز استفاده می شود اما در الگوریتم های رمزنگاری نامتقارن یا PKI از دو کلید عمومی و خصوصی برای رمزنگاری و رمزگشایی استفاده می شود که از درجه امنیت بسیار بالایی برخوردار است.
تفاوت Hashing و Encryption در چیست؟
- درهم سازی داده ها یا Hashing به یک فرآیند یک طرفه گفته می شود که در آن هر نوع داده خروجی در نهایت تبدیل به یک رشته داده خروجی با یک اندازه ثابت می شود که به آن Hash Value یا مقدار تابع درهم سازی گفته می شود.
- شما نمی توانید از یک Hash Value داده خود را برداشت کنید زیرا این نوع الگوریتم ها کاملا یک طرفه هستند و بیشتر برای تسریع فرآیند جستجو و اطمینان از صحت داده ها در هنگام انتقال مورد استفاده قرار می گیرند.
- الگوریتم هایی مثل MD و SHA از انواع الگوریتم های درهم سازی یا Hashing هستند که بیشترین استفاده را دارند. رمزنگاری یا Encryption به تبدیل داده ها به قالبی گفته می شود که فقط برای کاربران مجاز قابل مشاهده باشد و هیچ کاربر غیرمجازی نتواند داده واقعی را مشاهده کند.
- به داده ای که رمزنگاری شده باشد در اصطلاح Cipher-Text گفته می شود
- اندازه داده ای که رمزنگاری می شود با حجم داده ورودی آن تا حدود زیادی یکسان است و شما می توانید از داده های رمزنگاری شده داده خود را خارج کنید که به این فرآیند رمزگشایی گفته می شود.
- الگوریتم های رمزنگاری بصورت کلی به دو دسته متقارن با یک کلید برای رمزنگاری و همان کلید برای رمزگشایی و نامتقارن که دارای دو کلید عمومی و خصوصی برای رمزنگاری و رمزگشایی می شوند تقسیم بندی می شود.
منابع: میکرو رایانه، انجمن تخصصی فناوریاطلاعات
عالی بود .خیلی واضح و شفاف
دمت گرم