Cryptography (رمزنگاری) عبارت است از تلاش برای اطمینان حاصل کردن از محرمانه بودن دادهها، تأیید هویت افراد، دیوایسها یا تأیید صحت اطلاعات در محیطهای پُرریسک و اصطلاح Cryptographic Engineering (مهندسی رمزنگاری) نیز مرتبط با استفاده از رمزنگاری به منظور حل مشکلات روزمره است و یک حوزۀ میانرشتهای از ریاضیات و مهندسی کامپیوتر است. در این مقاله، به معرفی یک ورکشاپ (کارگاه) خواهیم پرداخت که در آن مفهوم Cryptographic Engineering بر اساس لایبرری Libsodium و بدون پرداختن به بُعد ریاضیاتی آن تشریح شده است.
Libsodium یک لایبرری رمزنگاری بوده و نقطۀ مقابل ماژول Crypto برای Node.js است که این ماژول نیز خود مبتنی بر لایبرری Openssl توسعه یافته است. در واقع، این لایبرری مجموعهای از اصول اولیهٔ سطح بالا را برای رمزنگاری دارا است که آن را در برابر سوءاستفادههای هکرها مقاوم میسازد؛ بدین معنی که این لایبرری در فرآیند رمزنگاری و تأمین امنیت کمتر دچار اشتباه میشود.
معرفی ورکشاپ Learntocrypto
Learntocrypto ورکشاپی است که تمام برنامههایش با زبان جاوااسکریپت و در نودجیاس پیادهسازی میشوند؛ اما از آنجایی که خود لایبرری Libsodium با زبان C پیادهسازی شده است، یکسری اصطلاحاً Binding تحت عنوان Sodium Native نیز در برنامه مورد استفاده قرار میگیرد که این بایندینگها دارای یکسری قابلیت از پیش تعریف شده نیز میباشند که این امکان را برای دولوپرها فراهم میکنند تا بتوانند آنها را به صورت کراسپلتفرم، در سیستمهای مختلف به کار گیرند که در این صورت، دولوپرها نباید در مورد کامپایل برنامهها و ابزارهای مورد نیاز خود نگرانی داشته باشند (منظور از Binding یک زبان برنامهنویسی به لایبرری، یک API است که با استفاده از آن میتوان از لایبرری مد نظر خود در یک زبان برنامهنویسی دیگر استفاده کرد.)
به طور کلی، با انجام این تمارین یاد خواهید گرفت که داشتن کنترل کامل بر روی سیستم به منظور درک ویژگیهای امنیتی آن امری حیاتی است. همچنین در پایانِ این ورکشاپ یک بانک ایجاد خواهیم کرد و بررسی خواهیم کرد که تا چه حد این بانک ناامن است و چگونه میتوان امنیت آن را با اصول رمزنگاری بهبود بخشید. ایجاد این بانک با تمرکز بر امنیت محل ذخیرهسازی اسناد و اشیاء باارزش موجود در آن شروع شده و در ادامه به این مسئله پرداخته میشود که چگونه هر مشتری میتواند از حساب بانکی خود در برابر تهدیدات مخرب محافظت کند.