majid
majid
خواندن ۵ دقیقه·۲ سال پیش

Hash vs Encrypt

هش و رمزگذاری دو عملیات مهم و اساسی هستند. هر دوی این تکنیک ها داده‌های ورودی را به فرمت متفاوتی تغییر می‌دهند. هش کردن روی متن ورودی، یک hash value ایجاد می کند، در حالی که رمزگذاری داده ها را به ciphertext تبدیل می کند.

رمزگذاری یک فرآیند برگشت پذیر است ( دو طرفه )، در حالی که هش کردن یک فرآیند برگشت ناپذیر است (‌یک طرفه).

هش کردن / Hashing

هش کردن یک پروسس است که هر نوع داده ای با طول‌‌های متفاوت رو با استفاده از تابع هش، به یک داده با طول مشخص و ثابت (معمولا ۱۶۰، ۲۵۶، ۵۱۲ بیت) تبدیل می‌کند. این داده با نام‌هایhash value, hash code checksum, simply hash شناخته می‌شود.

دو کاربرد Hashing:

  • برای بررسی اینکه محتوا یک فایل یا پیام در حین انتقال از طریق شبکه تغییر نکرده است. به عنوان مثال، کاربر A می تواند یک فایل را برای کاربر B ارسال کند و مقدار هش را همراه با پیام اصلی ارائه دهد. کاربر B می تواند مقدار هش فایل دریافتی را محاسبه کند. تطبیق هر دو مقدار هش به کاربر B اطمینان می دهد که فایل تغییر نکرده است.
  • یکی دیگر از کاربردها در hash table است. hash table یک ساختار داده است که داده‌ها را با hash value به عنوان شاخص جدول و داده‌های اصلی را به عنوان مقدار شاخص ذخیره می کند.
یکی از ویژگی های الگوریتم‌های هش این است که ورودی یکسان، تا ابد خروجی یکسان دارد.

۳ ویژگی اصلی و مهم توابع Hash

۱: قطعی بودن (Deterministic)

مهم نیست چند بار یک ورودی دلخواه را وارد تابع هش می‌کنید، در هر بار تلاش باید یک نتیجه یکسان دریافت کنید. کوچکترین تغییر در ورودی باید باعث تغییر خروجی شود.

۲: محاسبه سریع

یک تابع هش باید ورودی را به سرعت تبدیل به خروجی (hash value) کند. اگر این فرآیند به اندازه کافی سریع نباشد، سیستم ما کارآمد نخواهد بود.

۳: غیرقابل بازگشت بودن

تابع هش ما باید به گونه‌ای باشد که اگر ما ورودی خود را A در نظر بگیریم و هش خروجی را (H(A در نظر بگیریم، رسیدن به A از روی (H(A غیرعملی باشد. در واقع توابع هش برگشت پذیر هستند، اما باید به نحوی باشند که باتوجه به منابع سخت افزاری امروز این کار در عمل غیرممکن باشد.

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

What is salting?

یکی از ویژگی های هش این است که ورودی یکسان خروجی یکسان دارد. حالا تصور کنید یک مهاجم جدولی (rainbow list) از پسوردهای ممکن و خروجی آنها داشته باشد اگر مهاجم بتواند به دیتابیس دسترسی پیدا کند و مقدار هش های پسوردها رو بدست آورد، می‌تواند با مقایسه هش پسورد و جدولی که دارد پسورد صحیح را پیدا کند. این یکی از اصلی ترین مشکلات امنیتی توابع هش است.

روش salting جایگزینی برای رمزگذاری یا هش نیست. این در واقع یک تابع است که می تواند به هش اضافه شود تا ایمن تر شود. با این روش، چندین کاراکتر رندم و اضافی به خروجی هش اضافه می‌کنیم تا به این صورت حتی با استفاده از rainbow list ورودی تابع هش قابل شناسایی نباشد.

حتی در این روش هم مهاجم می‌تواند به rainbow lis کاراکترهای اضافی و رندم اضافی کند تا بتواند پسورد صحیح را پیدا کند، اما زمانی که برای یافتن پسورد نیاز دارد بصورت نمایی زیاد می‌شود تا در عمل پیدا کردن پسورد غیر ممکن شود.

هش به خودی خود امنیت خاصی ندارد. در حالی که لایه‌ای از امنیت را به ذخیره‌سازی رمز عبور اضافه می‌کند، بیشتر مهاجمان سایبری می‌توانند به راحتی با استفاده از ابزارهایی مانند rainbow lis، هش را دور بزنند. افزودن unique salt به هر هش به طور تصاعدی امنیت هش را بالا می‌رود.

رمزگذاری / Encryption

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

هدف اصلی از رمزگذاری محافظت از محرمانه بودن داده‌ها است. الگوریتم‌های مدرن رمزگذاری، محرمانه بودن داده‌ها را تضمین می‌کنند و ویژگی‌های امنیتی کلیدی از جمله احراز هویت، یکپارچگی را ارائه می‌کنند.

ویژگی احراز هویت اجازه می دهد تا مبدا پیام را تایید کنید و ویژگی یکپارچگی تضمین می کند که محتوای یک پیام از زمان ارسال آن تغییر نکرده است.

انواع رمز نگاری

  • Asymmetric encryption algorithms
  • Symmetric encryption algorithms
  • Deterministic encryption algorithms
  • Probabilistic encryption algorithms

الگوریتم رمزنگاری Symmetric

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

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

چند مدل از الگوریتم رمزنگاری متقارن

  • AES (Advanced Encryption Standard)
  • DES (Data Encryption Standard)
  • IDEA (International Data Encryption Algorithm)
  • Blowfish (Drop-in replacement for DES or IDEA)
  • RC4 (Rivest Cipher 4)
  • RC5 (Rivest Cipher 5)
  • RC6 (Rivest Cipher 6)

الگوریتم رمزنگاری Asymmetric

الگوریتم های رمزگذاری نامتقارن از دو کلید استفاده می کنند نه یک کلید. یک کلید عمومی و یک کلید خصوصی.

کلید خصوصی مانند کلید در الگوریتم رمزگذاری متقارن مخفی نگه داشته می شود. با این حال، برخلاف رمزگذاری متقارن، این کلید خصوصی هرگز نیازی به انتقال یا اشتراک گذاری ندارد.

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

چند مدل از الگوریتم رمزنگاری نامتقارن

  • RSA
  • Diffie-Hellman
  • Elliptic-curve algorithms
تابع هشhashhashingmd5رمزنگاری
شاید از این پست‌ها خوشتان بیاید