تفاوت رمزگذاری و هش چیست؟ آیا هش کردن از رمزگذاری امن تر است؟
فهرست مطالب
الگوریتم های رمزگذاری و هش رایج
موارد استفاده هش و رمزگذاری
جدول مقایسه
در زمینه امنیت داده ها، رمزگذاری و هش معمولا با هم مقایسه می شوند، اما چرا اینطور است. رمزگذاری یک تابع دو طرفه است که در آن داده ها به صورت متن ساده ارسال می شود و به صورت متن رمزی خارج می شود که قابل خواندن نیست. از آنجایی که رمزگذاری دو طرفه است، داده ها را می توان رمزگشایی کرد تا دوباره قابل خواندن باشند. از سوی دیگر، هش کردن یک طرفه است، به این معنی که متن ساده از طریق استفاده از نمک، به یک خلاصه منحصر به فرد تبدیل می شود که قابل رمزگشایی نیست. از نظر فنی، هش را می توان معکوس کرد، اما قدرت محاسباتی مورد نیاز برای رمزگشایی آن، رمزگشایی را غیرممکن می کند.
روش هش کردن با الگوریتم هش است. این الگوریتم زمانی موثرتر است که در برابر برخورد مقاوم باشد. مقاومت در برابر برخورد به این معنی است که همه مواد هضم منحصر به فرد هستند و با یکدیگر همپوشانی ندارند. این بدان معناست که الگوریتم هش باید به اندازه کافی پیچیده باشد که هش های همپوشانی نداشته باشد، اما آنقدر پیچیده نباشد که محاسبه هش ها خیلی طول بکشد. رمزگذاری در دو نوع مختلف وجود دارد، و هر دو رمزگذاری و هش چندین نوع الگوریتم مشترک دارند.
الگوریتم های رمزگذاری و هش رایج
رمزگذاری در دو نوع است: نامتقارن و متقارن. رمزگذاری نامتقارن از دو کلید مختلف، کلید عمومی و خصوصی برای رمزگذاری و رمزگشایی استفاده می کند. کلید خصوصی برای رمزگذاری داده ها استفاده می شود و از همه افراد غیر از شخصی که داده ها را رمزگذاری می کند مخفی نگه داشته می شود. کلید عمومی برای هر کسی در دسترس است و برای رمزگشایی استفاده می شود. با استفاده از رمزگذاری نامتقارن، می توان صحت داده ها را تأیید کرد، زیرا اگر داده ها در حین انتقال اصلاح شوند، امکان رمزگذاری مجدد با کلید خصوصی وجود نخواهد داشت. رمزگذاری متقارن از یک کلید برای رمزگذاری و رمزگشایی استفاده می کند. این نوع رمزگذاری از قدرت پردازش کمتری استفاده می کند و سریعتر است، اما امنیت کمتری دارد زیرا فقط از یک کلید استفاده می شود.
الگوریتم های رمزگذاری متقارن:
استاندارد رمزگذاری پیشرفته (AES)
ماهی بادکنکی
دو ماهی
Rivest Cipher (RC4)
استاندارد رمزگذاری داده ها (DES)
الگوریتم های رمزگذاری نامتقارن:
الگوریتم امضای دیجیتال منحنی بیضوی (ECDSA)
Rivest-Shamir-Adleman (RSA)
دیفی-هلمن
حریم خصوصی بسیار خوب (PGP)
الگوریتم های درهم سازی:
الگوریتم خلاصه پیام (MD5)
الگوریتم هش امن (SHA-1، SHA-2، SHA-3)
گرداب
ببر
بررسی کاهش چرخه ای (CRC32)
موارد استفاده هش و رمزگذاری
اگرچه آنها مشابه هستند، رمزگذاری و هش برای اهداف مختلفی استفاده می شود. یکی از کاربردهای هش کردن، مقایسه مقادیر زیاد داده است. مقایسه مقادیر هش نسبت به تکههای بزرگ داده بسیار سادهتر است، زیرا مختصرتر هستند. هش کردن همچنین برای نگاشت داده ها استفاده می شود، زیرا یافتن مقادیر با استفاده از هش ها سریع است و هش های خوب با هم همپوشانی ندارند. هش ها در امضای دیجیتال و برای ایجاد رشته های تصادفی برای جلوگیری از تکراری شدن داده ها در پایگاه داده استفاده می شوند. از آنجایی که هش کردن برای معکوس کردن بسیار غیرممکن است، الگوریتم های هش روی رمزهای عبور استفاده می شود. این باعث می شود که رمز عبور کوتاه تر و توسط مهاجمان غیرقابل کشف شود.
از طرف دیگر، رمزگذاری برای رمزگذاری داده هایی که در حال انتقال هستند استفاده می شود. دادههای در حال انتقال دادههایی هستند که فقط باید توسط گیرنده خوانده شوند، بنابراین باید ارسال شوند تا مهاجم نتواند آنها را بخواند. رمزگذاری داده ها را از هر کسی که آن را در میانه حمل و نقل می گیرد پنهان می کند و فقط به مالک کلید رمزگشایی اجازه می دهد داده ها را بخواند. موارد دیگری که از رمزگذاری بر روی هش استفاده میشود، برای ذخیره و بازیابی دادهها در پایگاههای داده، روشهای احراز هویت، و موارد دیگری است که دادهها باید در حالت استراحت پنهان شوند، اما بعداً بازیابی شوند.
تفاوت اساسی بین الگوریتم های هش و رمزگذاری
-
معرفی
هش کردن و رمزگذاری دو عملیات مهم و اساسی یک سیستم کامپیوتری هستند. هر دوی این تکنیک ها داده های خام را به فرمت متفاوتی تغییر می دهند. هش کردن روی متن ورودی یک مقدار درهم ایجاد می کند، در حالی که رمزگذاری داده ها را به متن رمزی تبدیل می کند.
اگرچه هر دوی این تکنیک ها داده ها را به یک قالب جداگانه تبدیل می کنند، تفاوت های ظریفی در مکانیسم تبدیل و حوزه استفاده آنها وجود دارد.
در این آموزش، این تکنیک ها و تفاوت های آنها را مورد بحث قرار خواهیم داد.
-
هشینگ چیست؟
هش کردن فرآیند نگاشت هر داده اندازه دلخواه به یک مقدار با طول ثابت با استفاده از یک تابع هش است. این مقدار با طول ثابت به عنوان مقدار هش، کد هش، خلاصه، جمعبندی چک یا به سادگی هش شناخته میشود. سیستم های کامپیوتری از هش در دو حوزه عمده استفاده می کنند:
برای محاسبه یکپارچگی یک فایل یا پیام در حین انتقال از طریق شبکه. به عنوان مثال، کاربر A می تواند یک فایل را برای کاربر B ارسال کند و مقدار هش را همراه با پیام اصلی ارائه دهد. کاربر B می تواند مقدار هش فایل دریافتی را محاسبه کند. تطبیق هر دو مقدار هش به کاربر B اطمینان می دهد که یکپارچگی فایل دست نخورده است
یکی دیگر از کاربردهای هش کردن در جدول هش است. جدول هش ساختار داده ای است که داده ها را با مقدار هش مرتبط به عنوان شاخص جدول و داده های اصلی را به عنوان مقدار ذخیره می کند.
این مقاله رو مطالعه کنید : اجرای یک نود کامل بیت کوین برای سرمایه گذاران
2.1. تابع هش چیست؟
یک تابع هش یک الگوریتم اساسی است که مقدار هش داده های ارائه شده را محاسبه می کند. یکی از ویژگی های جالب تابع هش این است که یک الگوریتم یک طرفه است. میتوانیم مقدار هش را از دادههای داده محاسبه کنیم، اما عملیات معکوس امکانپذیر نیست. بنابراین، نمی توان یک مقدار هش گرفت و پیام را از آن بازسازی کرد:
2.2. الزامات برای عملکرد هش خوب؟
قبل از بررسی توابع هش موجود، اجازه دهید ویژگی های یک تابع هش خوب را بررسی کنیم:
قطعی: یک تابع هش باید ماهیت قطعی داشته باشد. این بدان معناست که برای یک ورودی مشخص، تابع هش باید همان مقدار هش را تولید کند
استفاده از ورودی: یک تابع هش همچنین باید از بیشتر داده های ورودی استفاده کند. این تضمین می کند که می تواند یک مقدار هش متمایز برای ورودی های مشابه تولید کند
توزیع یکنواخت: جداول هش از مقدار هش به عنوان شاخص جدول برای ذخیره داده ها استفاده می کند. بنابراین، یک تابع هش خوب باید اطمینان حاصل کند که مقدار هش به طور یکنواخت در سراسر جدول توزیع می شود
دارای متمایز: یک تابع هش باید مقادیر هش متفاوتی را برای رشته های مشابه تولید کند
2.3. مثال های تابع هش
چندین الگوریتم از این قبیل برای محاسبه مقدار هش وجود دارد مانند روش تقسیم، تابع هش هویت، روش ضرب.
بیایید دو الگوریتم هش محبوب را بررسی کنیم: Division Hashing و Identity Hash Function.
در الگوریتم Division Hashing، با تقسیم باقیمانده کلید به اندازه جدول، کلید را به یکی از شکاف های جدول هش نگاشت می کنیم. در نمادهای ریاضی، این به صورت h(k) = k \mod m نشان داده می شود. مقدار m یک عدد آغازگر است تا بتواند مقادیر هش منحصربفردی تولید کند. اندازه جدول معمولاً به عنوان توان دو انتخاب می شود و توزیعی از 0 تا m-1 را ارائه می دهد.
اگرچه این یک الگوریتم ساده است، اما دو اشکال عمده دارد.
سیستم کامپیوتری مدرن از ضرب برای اجرای عملیات تقسیم استفاده می کند. بنابراین، تقسیم یک عملیات نسبتا کندتر است
برای مجموعه کلیدهای خاصی، این الگوریتم همان مقدار هش را تولید می کند. به عنوان مثال، کلیدهای 134000. 156000 و 145000 را با mod 1000 در نظر بگیرید. هر 3 کلید مقدار هش یکسانی را تولید می کنند و بنابراین به یک شکاف در جدول نگاشت می شوند.
در تابع هش هویت، خود داده مقدار هش است. این الگوریتم برای مجموعه داده های کوچک مناسب است. معنای کوچک در این زمینه بستگی به اندازه داده ای دارد که باید به عنوان مقدار هش استفاده شود. به عنوان مثال، در جاوا، کد هش یک عدد صحیح 32 بیتی است. بنابراین، اشیاء 32 بیتی Integer و 32 بیتی Float می توانند مستقیماً از مقدار استفاده کنند. با این حال، اشیاء 64 بیتی Long و 64 بیتی Double نمی توانند از این الگوریتم استفاده کنند.
این الگوریتم دو مزیت دارد:
هزینه محاسبه مقدار هش عملاً صفر است زیرا ارزش خود مقدار هش است و هیچ محاسبه ای وجود ندارد
این یک تابع هش کامل است زیرا هیچ برخوردی در مقدار هش وجود ندارد
2.4. برخوردها
در حالی که مقدار هش را با استفاده از توابع هش محاسبه می کنیم، باید با برخوردها نیز مقابله کنیم. برخورد زمانی اتفاق می افتد که تابع هش همان مقدار هش را برای دو داده ورودی مجزا برمی گرداند. یک تابع هش خوب تضمین می کند که برخوردهای کمتری وجود دارد. چندین تکنیک برای رسیدگی به برخوردها وجود دارد.
Open Hashing: در این تکنیک، داده ها مستقیماً در فهرست هش کلید در جدول هش ذخیره نمی شوند. یک ساختار داده جداگانه مانند یک لیست پیوندی داده ها را ذخیره می کند. بنابراین، اگر دو داده ورودی جداگانه به یک شاخص هش در جدول هش نگاشت شوند، یک لیست پیوندی مقادیر ورودی را به صورت خطی ذخیره می کند:
درهم سازی بسته: در این تکنیک جایگزین، هیچ ساختار داده اضافی برای مدیریت برخوردها استفاده نمی شود. در صورت برخورد، سعی می کنیم سطل های جایگزین را در همان جدول هش پیدا کنیم تا زمانی که یک سلول خالی در دسترس باشد:
-
رمزگذاری
رمزگذاری داده ها فرآیندی است که داده ها را از شکل اصلی به شکل دیگری ترجمه می کند. شکل اصلی داده ها به عنوان متن ساده و شکل رمزگذاری شده داده ها به عنوان متن رمز شناخته می شود. متن رمز شده توسط یک کلید مخفی رمزگشایی می شود.
3.1. نیاز به رمزگذاری داده ها
هدف اصلی از رمزگذاری داده ها محافظت از محرمانه بودن داده ها در زمانی است که در سیستم های رایانه ای ذخیره می شوند یا از طریق شبکه به رایانه های دیگر منتقل می شوند. الگوریتمهای مدرن رمزگذاری دادهها، محرمانه بودن دادهها را تضمین میکنند و ویژگیهای امنیتی کلیدی از جمله احراز هویت، یکپارچگی و عدم انکار را ارائه میکنند.
ویژگی احراز هویت اجازه می دهد تا منشاء پیام را تأیید کنید. ویژگی یکپارچگی تضمین می کند که محتوای یک پیام از زمان ارسال آن تغییر نکرده است. علاوه بر این، عدم انکار تضمین می کند که فرستنده پیام نمی تواند ارسال پیام را انکار کند.
3.2. رمزگذاری داده ها چگونه کار می کند؟
در فرآیند رمزگذاری داده ها، داده های مربوطه با یک الگوریتم رمزگذاری و یک کلید رمزگذاری رمزگذاری می شوند. این فرآیند منجر به متن رمز شده و تنها در صورتی قابل مشاهده است که با کلید صحیح رمزگشایی شود. بر اساس نوع کلید، دو نوع اصلی رمزگذاری وجود دارد – رمزگذاری متقارن و رمزگذاری نامتقارن.
3.3. رمزگذاری متقارن
رمزگذاری با کلید متقارن از همان کلید مخفی برای رمزگذاری و رمزگشایی داده ها استفاده می کند. مزیت اصلی این نوع این است که بسیار سریعتر از نوع رمزگذاری نامتقارن است. با این حال، عیب این است که فرستنده باید کلید رمزگذاری را با گیرنده مبادله کند تا گیرنده بتواند آن را رمزگشایی کند.
برای غلبه بر سربار اضافی مبادله ایمن کلید مخفی، سازمان ها پس از استفاده از الگوریتم متقارن برای رمزگذاری داده ها، از یک الگوریتم نامتقارن برای تبادل کلید مخفی استفاده می کنند.
3.4. رمزگذاری نامتقارن:
این نوع رمزگذاری به عنوان رمزنگاری کلید عمومی نیز شناخته می شود. این به این دلیل است که در این فرآیند رمزگذاری از دو کلید مختلف یک کلید عمومی و یک کلید خصوصی استفاده می شود. کلید عمومی، همانطور که نامش ذکر شده، ممکن است با همه به اشتراک گذاشته شود، اما کلید خصوصی باید محافظت شود:
الگوریتم Rivest-Sharmir-Adleman (RSA) یک رمزگذاری کلید عمومی محبوب است که به طور گسترده برای ایمن سازی داده های حساس استفاده می شود. محبوبیت الگوریتم RSA به این دلیل است که هم کلید عمومی و هم کلید خصوصی می توانند پیامی را رمزگذاری کنند تا از محرمانه بودن، یکپارچگی، صحت و غیرقابل رد کردن داده های ارسالی اطمینان حاصل شود.
3.5. چالش های رمزگذاری
اگرچه الگوریتمهای رمزگذاری برای محافظت از دادهها پیشنهاد میکنند، اما هنوز اغلب قربانی چندین حمله میشوند. این حملات وعده های اساسی رمزگذاری را به خطر می اندازد. امروزه عمدهترین نوع حمله به رمزگذاری، استفاده از نیروی brute force یا امتحان کردن کلیدهای تصادفی تا یافتن کلید مناسب است.
حالت دیگر حمله محبوب، کانال جانبی است. این نوع حمله به جای خود رمز واقعی، پیاده سازی رمز را هدف قرار می دهد. اگر خطایی در طراحی یا اجرای سیستم وجود داشته باشد، این حملات موفق می شوند.
-
نتیجه گیری
در این مقاله، دو ویژگی اصلی امنیت داده ها در سیستم های کامپیوتری – هش و رمزگذاری را مورد بحث قرار دادیم.
در ابتدا، ما در مورد هش صحبت کردیم که یک مقدار هش منحصر به فرد داده های ارائه شده را محاسبه می کند.
بعداً، رمزگذاری را مورد بحث قرار دادیم که داده ها را به یک متن رمزی تبدیل می کند و می تواند با استفاده از یک کلید مخفی بازیابی شود.