هش و رمزگذاری دو عملیات مهم و اساسی هستند. هر دوی این تکنیک ها دادههای ورودی را به فرمت متفاوتی تغییر میدهند. هش کردن روی متن ورودی، یک hash value ایجاد می کند، در حالی که رمزگذاری داده ها را به ciphertext تبدیل می کند.
رمزگذاری یک فرآیند برگشت پذیر است ( دو طرفه )، در حالی که هش کردن یک فرآیند برگشت ناپذیر است (یک طرفه).
هش کردن یک پروسس است که هر نوع داده ای با طولهای متفاوت رو با استفاده از تابع هش، به یک داده با طول مشخص و ثابت (معمولا ۱۶۰، ۲۵۶، ۵۱۲ بیت) تبدیل میکند. این داده با نامهایhash value, hash code checksum, simply hash شناخته میشود.
یکی از ویژگی های الگوریتمهای هش این است که ورودی یکسان، تا ابد خروجی یکسان دارد.
مهم نیست چند بار یک ورودی دلخواه را وارد تابع هش میکنید، در هر بار تلاش باید یک نتیجه یکسان دریافت کنید. کوچکترین تغییر در ورودی باید باعث تغییر خروجی شود.
یک تابع هش باید ورودی را به سرعت تبدیل به خروجی (hash value) کند. اگر این فرآیند به اندازه کافی سریع نباشد، سیستم ما کارآمد نخواهد بود.
تابع هش ما باید به گونهای باشد که اگر ما ورودی خود را A در نظر بگیریم و هش خروجی را (H(A در نظر بگیریم، رسیدن به A از روی (H(A غیرعملی باشد. در واقع توابع هش برگشت پذیر هستند، اما باید به نحوی باشند که باتوجه به منابع سخت افزاری امروز این کار در عمل غیرممکن باشد.
از لحاظ ریاضی اینکه دو ورودی به توابع هش خروجی یکسان داشته باشند امکان پذیر است. اما تلاش شده است این توابع نوعی ایجاد شوند که این احتمال نزدیک به صفر باشد. در مورد برگشت پذیر نبودن هم هیمنطور، ای توابع نوعی طراحی شده اند که باتوجه به سخت افزارهای امروزی محاسبه ورودی از روی هش، سالها زمان میبرد.
یکی از خطرات امنیتی کامپیوترهای کوانتمی این است که برگشت پذیر بودن توابع هش را بطور چشمگیری کاهش میدهند.
یکی از ویژگی های هش این است که ورودی یکسان خروجی یکسان دارد. حالا تصور کنید یک مهاجم جدولی (rainbow list) از پسوردهای ممکن و خروجی آنها داشته باشد اگر مهاجم بتواند به دیتابیس دسترسی پیدا کند و مقدار هش های پسوردها رو بدست آورد، میتواند با مقایسه هش پسورد و جدولی که دارد پسورد صحیح را پیدا کند. این یکی از اصلی ترین مشکلات امنیتی توابع هش است.
روش salting جایگزینی برای رمزگذاری یا هش نیست. این در واقع یک تابع است که می تواند به هش اضافه شود تا ایمن تر شود. با این روش، چندین کاراکتر رندم و اضافی به خروجی هش اضافه میکنیم تا به این صورت حتی با استفاده از rainbow list ورودی تابع هش قابل شناسایی نباشد.
حتی در این روش هم مهاجم میتواند به rainbow lis کاراکترهای اضافی و رندم اضافی کند تا بتواند پسورد صحیح را پیدا کند، اما زمانی که برای یافتن پسورد نیاز دارد بصورت نمایی زیاد میشود تا در عمل پیدا کردن پسورد غیر ممکن شود.
هش به خودی خود امنیت خاصی ندارد. در حالی که لایهای از امنیت را به ذخیرهسازی رمز عبور اضافه میکند، بیشتر مهاجمان سایبری میتوانند به راحتی با استفاده از ابزارهایی مانند rainbow lis، هش را دور بزنند. افزودن unique salt به هر هش به طور تصاعدی امنیت هش را بالا میرود.
رمزگذاری فرآیندی است که دادهها را از فرمت اصلی به فرمت دیگری ترجمه می کند. فرمت اصلی دادهها به عنوان plaintext و فرمت رمزگذاری شده داده ها به عنوان ciphertext شناخته می شود. ciphertext توسط یک کلید مخفی رمزگشایی می شود.
هدف اصلی از رمزگذاری محافظت از محرمانه بودن دادهها است. الگوریتمهای مدرن رمزگذاری، محرمانه بودن دادهها را تضمین میکنند و ویژگیهای امنیتی کلیدی از جمله احراز هویت، یکپارچگی را ارائه میکنند.
ویژگی احراز هویت اجازه می دهد تا مبدا پیام را تایید کنید و ویژگی یکپارچگی تضمین می کند که محتوای یک پیام از زمان ارسال آن تغییر نکرده است.
الگوریتم های رمزگذاری متقارن تنها از یک کلید مخفی برای رمزگذاری و رمزگشایی دادهها استفاده میکنند. اگر دادهها از کامپیوتری به کامپیوتری دیگر منتقل شود، کامپیوتر دوم باید به نحوی همان کلید را در اختیار داشته باشند.
مهمترین ویژگی این روش سرعت بالای رمزنگاری و رمزگشایی است. هرچند به اشتراک گذاشتن کلید باعث پایین آمدن امنیت میشود. سازمانها با استفاده از الگوریتم نامتقارن، کلید الگوریتم متقارن را با طرف دوم به اشتراک میگذارند.
الگوریتم های رمزگذاری نامتقارن از دو کلید استفاده می کنند نه یک کلید. یک کلید عمومی و یک کلید خصوصی.
کلید خصوصی مانند کلید در الگوریتم رمزگذاری متقارن مخفی نگه داشته می شود. با این حال، برخلاف رمزگذاری متقارن، این کلید خصوصی هرگز نیازی به انتقال یا اشتراک گذاری ندارد.
در عوض، فرستنده دادهها را با استفاده از یک کلید عمومی رمزگذاری میکند، و گیرنده با یک کلید خصوصی به آن دسترسی پیدا می کند.