تفاوت چهار اصطلاح برنامه‌نویسی و امنیت: Encryption ،Encoding ،Hashing و Obfuscation

شاید تا به حال با چهار اصطلاح encryption ،encoding ،hashing و obfuscation برخورد کرده باشید. نزدیکی مفاهیم این چهار اصطلاح می‌تواند هر کسی را به اشتباه بیندازد، به همین خاطر در این نوشته می‌خواهیم به اختصار تفاوت‌های آن‌ها و معنی دقیق‌تر هریک را بررسی کنیم. آشنایی با Encoding یا کدگذاری هدف از Encoding، تبدیل اطلاعات به گونه‌ای است که بدون مشکل، بتواند در سیستم‌های متفاوت قابل تحلیل و مشاهده باشد. برای مثال حروف و کاراکترهای موجود در یک ایمیل و یا کاراکترهای صفحات وب پس از اینکه به داده‌ی باینری (binary) معادل‌شان تبدیل شدند، می‌توانند توسط سیستم‌های مختلف ارسال و دریافت شوند. هدف اصلی، قابل استفاده بودن داده‌ها و تحلیل صحیح این اطلاعات است و در Encoding به دنبال مخفی نگه داشتن اطلاعات نیستیم. فرآیند Encoding داده‌ها، ازطریق یک نقشه‌ی عمومی انجام می‌شود و درنتیجه برگرداندن آن به فرمت قبلی نیز به راحتی انجام‌پذیر است. پس برای Decode کردن تنها به الگوریتمی نیاز خواهیم داشت که با آن Encode را انجام دادیم و هیچ‌گونه نیازی به Key (کلید) نخواهد بود.از استانداردهای رایج برای Encoding می‌توان به ASCII ، Unicode و Base64 اشاره کرد.آشنایی با Encryption یا رمزنگاریهدف از Encryption یا رمزنگاری تبدیل اطلاعات به فرمت دیگر به منظور مخفیانه نگه داشتن آنها می‌باشد. برای مثال ارسال یک نامه‌ی محرمانه به گونه‌ای که تنها خود مخاطب قادر به رمزگشایی و خواندن آن باشد و یا ارسال رمزعبور به صورت امن و مخفیانه در اینترنت. در Encryption هدف دسترسی‌پذیری نیست بلکه می‌خواهیم اطلاعات توسط کسی جز مخاطب اصلی آن‌ها قابل رؤیت نباشد.در Encryption اطلاعات به گونه‌ای تبدیل می‌شود که تنها مخاطب‌(های) آن اطلاعات قادر به معکوس کردن فرآیند تبدیل اطلاعات هستند. فرآیند رمزنگاریبا استفاده از یک کلید (که باید مخفی نگاه داشته شود)، یک متن آشکار و یک الگوریتم برای انجام عملیات رمزنگاری صورت می‌پذیرد. به همین شکل، برای رسیدن به متن آشکار نیز به متن رمزگذاری‌شده، الگوریتم و کلید نیاز خواهیم داشت.از الگوریتم‌های رایج رمزنگاری می‌توان به AES ،Blowfish و RSA اشاره کرد.آشنایی با Hashing یا درهم‌سازیهدف از Hashing، اطمینان از یکپارچگی یا صحت (integrity) است، به شکلی که اگر چیزی تغییر کند، شما متوجه شوید که تغییری صورت گرفته است. به شکل دقیق‌تر می‌توان گفت که در Hashing، یک ورودی دلخواه گرفته شده و رشته‌ای با طول ثابت به نام Hash تولید می‌شود به شکلی که این رشته خروجی ویژگی‌های زیر را داشته باشد:ورودی یکسان همیشه خروجی یکسان تولید می‌کند.معمولاً چند ورودی متفاوت، خروجی یکسانی تولید نمی‌کنند.امکان رسیدن از خروجی به ورودی وجود ندارد.هرگونه تغییر در ورودی موجب تغییر اساسی در Hash می‌شود.در واقع Hashing می‌تواند در کنار رمزنگاری نامتقارن استفاده شود تا اطمینان قوی به دست بیاید که پیام تغییر نکرده است. در این فرآیند یک ورودی اولیه ابتدا درهم‌سازی (Hash) شده و سپس این hash با کلید خصوصی فرستنده امضا می‌شود. سپس پیام، hash و امضا به مخاطب ارسال می‌شود. مخاطب پس از باز کردن پیام قادر است ابتدا امضای hash را با کلید عمومی فرستنده تطبیق دهد تا مطمئن شود خود فرستنده hash را امضا کرده است. سپس خودش پیام را یک بار دیگر hash می‌کند و آن را با hash دریافت‌شده از فرستنده مقایسه کند. اگر هر دو یکی بود، پیام معتبر است.از الگوریتم‌های رایج Hashing می‌توان به SHA-3 و MD5 اشاره کرد.آشنایی با Obfuscation یا مبهم‌سازی کدهدف از Obfuscation یا مبهم‌سازی کد، سخت‌‌تر کردن درک آن است و معمولاً با این منظور صورت می‌گیرد که از کپی شدن کد یا آسیب‌پذیری آن جلوگیری به عمل آید.به عنوان مثال یک کاربرد متداول Obfuscation، جلوگیری از دسترسی غیرمجاز به کدهای منبع یک محصول و کپی شدن آن توسط رقبا در فرآیند مهندسی معکوس است.لازم به ذکر است که Obfuscation برخلاف Encryption یک محافظ قوی نیست، بلکه تنها یک مانع موقت است و همچون Encoding در اینجا نیز اغلب می‌تواند با همان تکنیکی که مبهم‌سازی شده، دوباره فرآیند معکوس شود. در مواقعی هم که Obfuscation پیچیده‌تر است، باز به شکل دستی و زمان‌بر، می‌توان در نهایت به اطلاعات اولیه دسترسی پیدا کرد.نکته‌ی مهم دیگر، توجه به این موضوع است که بسته به محتوای کد، میزان مبهم‌سازی‌ای که می‌تواند روی آن صورت بگیرد با محدودیت‌هایی همراه است. مثلاً اگر یک کد کامپیوتری را مبهم‌سازی می‌کنید، نتیجه باید همچنان قابلیت اجرا توسط کامپیوتر را داشته باشد وگرنه برنامه از کار خواهد افتاد.برخی از ابزارهای موجود برای Obfuscation عبارت‌اند از: ProGuard و Javascript Obfuscator ترجمه بر اساس:"Encoding vs encryption vs hashing vs obfuscation" by Daniel Miessler کوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های کوئرامگ، می‌توانید اکانت توئیتر یا کانال تلگرام ما را دنبال کنید.