فصل ۵
ابزارهای رمزگذاری بخش جداییناپذیر از امنیت، حریم خصوصی و ناشناس بودن در دنیای آنلاین هستند. شما نمیتوانید به ناشناس بودن برسید اگر حریم خصوصی نداشته باشید، نمیتوانید حریم خصوصی داشته باشید اگر امن نباشید، و نمیتوانید امن باشید اگر رمزگذاری وجود نداشته باشد.
رمزگذاری مانند خانهای است که در Minecraft میسازید؛ فقط به شما اجازه میدهد وارد شوید، نه به زامبیها و موجودات (mobs)، و چیزهای شما را زمانی که در خانه نیستید، امن نگه میدارد. الگوریتم و طرح رمزگذاری مانند موادی است که خانه شما از آنها ساخته شده است. یک طرح یا الگوریتم رمزگذاری ضعیف مانند خانهای در Minecraft است که با خاک یا چوب ساخته شده است؛ ممکن است با انفجار یک موجود Creeper در نزدیکی آن تخریب شود یا اگر تصادفاً آن را با یک چخماق روشن کنید، آتش بگیرد. هرچه الگوریتم بیشتر بررسی و آزمایش شود، امنتر میشود. بنابراین، اولین قانون رمزگذاری این است که هرگز رمزگذاری خودتان را ایجاد نکنید، زیرا این کار مانند ساختن خانهای از هوا در Minecraft است، بدون ساختار و مواد با کیفیت، که با حملات ساده یک حرفهای از هم میپاشد.
هرگز رمزنگاری خودتان را ایجاد نکنید
اگر در دنیای رمزنگاری تازهکار هستید، ممکن است فکر کنید اگر یک الگوریتم رمزنگاری برای دیگران ناشناخته باشد، ایمنتر خواهد بود، اما این در هیچوجه درست نیست. یک الگوریتم رمزنگاری باید نه به این دلیل که هیچکس نمیداند چگونه کار میکند، بلکه به دلیل امنیت خود الگوریتم ایمن باشد. الگوریتم باید تحت انواع حملات، چه خود الگوریتم و چه پیادهسازی آن، قرار گیرد. وقتی بدون آسیب باقی بماند، آنگاه بهعنوان امن برای استفاده در نظر گرفته میشود. بهعنوان مثال، الگوریتمهایی مانند AES، Twofish، Serpent و ChaCha20 همگی از فرآیند آزمون توسط ریاضیدانان و رمزنگاران واقعی عبور کردهاند و بهاندازه کافی قدیمی هستند که امنیت آنها اثبات شده باشد.
وقتی تصمیم میگیرید که طرح یا الگوریتم رمزنگاری خودتان را ایجاد کنید، این کار مانند جادوگری در مقابل یک الگوریتم رمزنگاری شناختهشده است، زیرا شما ریاضیدان، رمزنگار یا تحلیلگر رمزنگاری نیستید. نمیتوانید الگوریتم خودتان را بسازید و همچنین نمیتوانید آن را بهطور مؤثر آزمایش و حمله کنید. وقتی الگوریتم شما با یک فرد حرفهای که دههها با این نوع موارد کار کرده است، روبهرو شود، الگوریتم شما هیچ شانسی نخواهد داشت.
اینجا یک نقلقول از کتاب Introduction to Cryptography نوشته خالق PGP آمده است:
وقتی من در اوایل دهه ۷۰ در دانشگاه بودم، یک طرح رمزگذاری که به نظر من بسیار درخشان بود، ابداع کردم. یک جریان عدد تصادفی ساده به جریان متن اصلی اضافه شد تا متن رمز تولید شود. این ظاهراً هرگونه تحلیل فرکانس متن رمز را خنثی میکرد و برای حتی پیچیدهترین آژانسهای اطلاعاتی دولتی غیرقابل شکستن بود. من خیلی به دستاورد خودم افتخار میکردم.
سالها بعد، این همان طرح را در چندین کتاب درسی مقدماتی رمزنگاری و مقالات آموزشی پیدا کردم. چقدر خوب. دیگر رمزنگاران نیز به همان طرح فکر کرده بودند. متأسفانه، این طرح بهعنوان یک تکلیف ساده در مورد چگونگی استفاده از تکنیکهای ابتدایی رمزنگاری برای بهسادگی شکستن آن ارائه شده بود. این بود از طرح درخشان من.
از این تجربه فروتنانه یاد گرفتم که چقدر آسان است که به یک حس امنیت کاذب بیفتیم وقتی که یک الگوریتم رمزگذاری را طراحی میکنیم. اکثر مردم نمیدانند که چقدر سخت است که یک الگوریتم رمزگذاری طراحی کنیم که بتواند در مقابل حملهای طولانی و مصمم از سوی یک حریف مجهز مقاومت کند.
-- خالق PGP، فیل زیمرمن
این تجربه نشان میدهد که حتی افراد باهوش هم میتوانند دچار اشتباه شوند و امنیت را بهطور نادرست تصور کنند. به همین دلیل است که همیشه باید به الگوریتمهای رمزنگاری شناختهشده و آزموده شده اعتماد کرد.
حتی امنترین الگوریتمها نیز میتوانند آسیبپذیر باشند
این تنها الگوریتم رمزنگاری نیست که باید امن باشد؛ پیادهسازی آن نیز باید امن، شناختهشده و بررسیشده باشد، هم در سطح نرمافزار و هم سختافزار. چندین نوع حمله میتواند از طریق پیادهسازی یک الگوریتم انجام شود، مانند:
-
حملات زمانبندی (Timing Attacks): در این نوع حمله، مهاجم زمان لازم برای انجام عملیاتهای رمزنگاری را اندازهگیری میکند و از این اطلاعات برای استنتاج کلیدهای مخفی استفاده میکند. این اطلاعات به او کمک میکند تا تشخیص دهد که چه مقدار زمان برای هر عملیات خاص صرف میشود و از آن به عنوان یک سرنخ برای دستیابی به کلیدها بهره ببرد.
-
تحلیل ساده توان (Simple Power Analysis - SPA): مهاجم از طریق ردیابی میزان مصرف انرژی در هنگام اجرای عملیات رمزنگاری، تلاش میکند تا کلیدها یا اطلاعات حساس دیگر را استخراج کند. مصرف انرژی میتواند سرنخهایی درباره فرآیندهای داخلی سیستم به مهاجم بدهد.
-
تحلیل تفاضلی توان (Differential Power Analysis - DPA): این حمله مشابه تحلیل ساده توان است، اما پیچیدهتر است. مهاجم دادههای مصرف انرژی را در طول عملیاتهای مختلف رمزنگاری جمعآوری میکند و با استفاده از روشهای آماری، کلید مخفی را استخراج میکند.
-
حملات الکترومغناطیسی (Electromagnetic Attacks - EM Attacks): مهاجم از انتشار الکترومغناطیسی دستگاه برای بهدستآوردن اطلاعات درباره وضعیت داخلی دستگاه استفاده میکند و کلیدهای مخفی را استخراج میکند. این حملات معمولاً با اندازهگیری و تحلیل امواج الکترومغناطیسی انجام میشود.
-
حملات تزریق خطا (Fault Injection Attacks): مهاجم با استفاده از تکنیکهایی مانند ایجاد خطاهای ولتاژی، یا استفاده از لیزر برای ایجاد خطاهای کوچک، تلاش میکند دستگاه را به اشتباه بیاندازد و از خروجیهای نادرست برای استنتاج کلید مخفی استفاده کند.
-
حملات کش (Cache Attacks): در این نوع حمله، مهاجم از زمانبندی کش (Cache Timing) برای شناسایی اینکه کدام بخش از حافظه در هنگام عملیات رمزنگاری دسترسی شده، استفاده میکند و کلیدهای مخفی را از این طریق استنتاج میکند.
-
حملات سردراهاندازی (Cold Boot Attacks): مهاجم با فریز کردن رم (حافظه دسترسی تصادفی) تلاش میکند تا وضعیت حافظه را حفظ کند و پس از ریاستارت سیستم، محتویات حافظه را خوانده و کلیدهای رمزنگاری را استخراج کند.
-
تحلیل تفاضلی خطا (Differential Fault Analysis - DFA): در این نوع حمله، مهاجم خروجیهای صحیح و نادرست یک عملیات رمزنگاری را مقایسه میکند تا اطلاعاتی درباره وضعیت داخلی سیستم و کلیدهای مخفی بهدست آورد.
-
حملات گلیچ (Glitching Attacks): مهاجم با ایجاد گلیچ (اختلال) در برق یا کلاک سیستم، باعث میشود که عملیاتهای رمزنگاری بهصورت نادرست انجام شود و سپس خروجیهای نادرست را تحلیل میکند تا کلیدهای مخفی را استخراج کند.
-
سرریز بافر (Buffer Overflow): مهاجم دادههای ورودی را طوری تنظیم میکند که باعث سرریز بافر شود و کنترل جریان اجرای برنامه را بهدست گیرد تا کلیدها یا دادههای حساس را استخراج کند.
-
حملات کانال جانبی از طریق منابع مشترک (Side-Channel via Shared Resources): مهاجم با اجرای کدی بر روی همان سیستمی که نرمافزار رمزنگاری در حال اجرا است، از رفتار منابع مشترک (مانند کش، زمانبندی و پردازش) برای استنتاج کلیدهای مخفی استفاده میکند.
-
حملات فیزیکی (Physical Attacks): مهاجم از تکنیکهای فیزیکی مانند میکروپرابگذاری (Microprobing) برای خواندن مستقیم محتویات حافظه یا دستکاری اجزای سختافزاری استفاده میکند تا کلیدهای مخفی یا دادههای حساس را استخراج کند.
این حملات میتوانند بر الگوریتمهایی که بهطور معمول غیرقابل شکستن تلقی میشوند، تنها از طریق پیادهسازی آنها انجام شوند. البته، این حملات نیز قابل جلوگیری هستند. نرمافزار یا دستگاهی که بهخوبی بررسی و آزموده شده است، احتمالاً در برابر اکثر این حملات یا همه آنها مقاوم است.
برخی از بهترین روشها برای جلوگیری از این نوع حملات شامل بهروزرسانی مداوم نرمافزار، جستجوی بررسیهای مستقل، استفاده از کتابخانههای اثباتشده (اگر شما یک ابزار نیازمند رمزنگاری توسعه میدهید) و استفاده از الگوریتمها، حالتها و طرحهای رمزنگاری استاندارد است.
دادههای خود را در حالت استراحت رمزگذاری کنید
رمزگذاری تنها برای کانالهای ارتباطی، پیامرسانها، VPNها و غیره نیست. دادههای آفلاین شما نیز نیاز به رمزگذاری دارند. درست مانند وقتی که وسایل مهم خود را در یک گاوصندوق قرار میدهید و تنها زمانی که گاوصندوق باز میشود، آنها در دسترس شما هستند، دادههای شما روی گوشی، رایانه، NAS (ذخیرهساز متصل به شبکه)، فلش USB و دیگر دستگاهها نیز باید رمزگذاری شوند تا فقط زمانی که باز میشوند، دادهها در دسترس باشند. رمزگذاری دادهها در حالت استراحت به این معنا نیست که اگر بدافزاری به رایانه شما نفوذ کند نمیتواند به دادههایتان دسترسی پیدا کند، بلکه به این معناست که وقتی از آنها استفاده نمیکنید و آنها قفل هستند، دادهها غیرقابل دسترسی میشوند.
تصور کنید شخصی لپتاپ شما را سرقت میکند. اگر رمزگذاری نشده باشد، او به سادگی میتواند هارد دیسک را خارج کرده و تمام دادههای آن را سرقت کند، اما اگر دادهها رمزگذاری شده و قفل باشند، نباید هیچ راهی برای دسترسی به دادهها وجود داشته باشد.
برای رمزگذاری هارد دیسکهای خود میتوانید از نرمافزارهایی مانند VeraCrypt استفاده کنید اگر سازگاری میان سیستمهای مختلف برایتان مهم است. در ویندوز، نرمافزار BitLocker وجود دارد، و در لینوکس میتوانید از cryptsetup یا فایلسیستمی که امکان رمزگذاری دارد، استفاده کنید.
اما تفاوتهایی بین ابزارهای رمزگذاری کانتینر مانند VeraCrypt و cryptsetup و رمزگذاری در سطح فایلسیستم مانند fscrypt وجود دارد. در اینجا برخی از تفاوتهای کلیدی آورده شده است:
ویژگی | رمزگذاری فایلسیستم | رمزگذاری کانتینر |
---|---|---|
دامنه رمزگذاری | فایلها/دایرکتوریهای جداگانه | حجمها/کانتینرهای کامل |
یکپارچگی | در فایلسیستم ساخته شده (مثلاً ext4, F2FS) | جدا از فایلسیستم |
عملکرد | سربار کمتر، رمزگذاری انتخابی | سربار بیشتر، همه دادهها را رمزگذاری میکند |
مدیریت کلید | کلیدهای کاربرمحور، چندین کلید برای فایل/دایرکتوری | یک کلید یا رمزعبور برای هر کانتینر |
سهولت استفاده | پس از تنظیم، شفاف و بیدردسر | نیاز به مونت/آنمونت کانتینرها |
سازگاری بینپلتفرم | محدود به فایلسیستمهای پشتیبانیشده | پشتیبانی گسترده (ویندوز، لینوکس، macOS) |
امنیت | دادهها را رمزگذاری میکند، اما همیشه متادادهها را رمزگذاری نمیکند | همه دادهها و متادادهها را رمزگذاری میکند |
موارد استفاده | رمزگذاری انتخابی، حساس به عملکرد | رمزگذاری کامل حجم، نیاز به پشتیبانی بینپلتفرم |
هنگامی که به رمزگذاری کامل دیسک میپردازید، داشتن سختافزار مدرن واقعاً به امنیت و عملکرد رمزگذاری کمک میکند، زیرا پردازندههای مدرن ویژگیهای شتابدهنده AES دارند که به آنها اجازه میدهد بدون تأثیر زیاد بر عملکرد ورودی/خروجی (I/O)، عملیات رمزگذاری و رمزگشایی AES را انجام دهند. همچنین، اکثر دستگاههای مدرن دارای TPM (ماژول پلتفرم امن) هستند که ریزکنترلگرهای سختافزاری طراحیشده برای بهبود امنیت در سطح سختافزار هستند و محیطی امن برای تولید، ذخیرهسازی و مدیریت کلیدهای رمزنگاری فراهم میکنند.
پشتیبانهای خود را در مکانی دور و رمزگذاریشده نگه دارید
مهمترین نکته در مورد گرفتن پشتیبان از دادهها این است که آنها باید در مکانی دور از محل اصلی نگهداری شوند. در غیر این صورت، شما فقط یک کپی از دادههای خود تهیه کردهاید، نه یک پشتیبان. یک پشتیبان خوب باید حتی در صورتی که خانه شما بهطور کامل در آتش بسوزد، قابل بازیابی باشد و فقط توسط شما و نه هیچکس دیگری قابل بازیابی باشد.
همیشه باید پشتیبانهای خود را بهطور امن و رمزگذاریشده نگهداری کنید، بهویژه برای چیزهایی مانند کیفپولهای رمزنگاری، پشتیبان کلیدهای GPG و رمزهای عبور. این کار باید بهصورت استراتژیک و منظم انجام شود. برای دادههایی که بازیابی آنها بسیار مهم است، مانند کیفپولهای رمزنگاری و کلیدهای GPG، ممکن است نیاز داشته باشید آنها را در چندین مکان مختلف ذخیره کنید، از جمله خارج از خانه (این مکان میتواند یک سرویس ابری نیز باشد، فقط برای مواقع وقوع بلایای طبیعی) و روی دستگاههای مختلف مانند DVDها، فلش USBها، هارد دیسکها و کارتهای SD.
برای این کار، ابتدا باید یک استراتژی پشتیبانگیری توسعه دهید تا بدانید چه دادههایی مهمتر هستند، چگونه قرار است پشتیبانگیری را انجام دهید، چگونه قرار است پشتیبانها را رمزگذاری کنید و در کجا آنها را ذخیره کنید. این کار را بهطور منظم انجام دهید اگر دادههای شما تمایل به تغییر دارند. برخی دادهها ممکن است نیاز به پشتیبانگیری هفتگی نداشته باشند، اما برخی دیگر نیاز دارند و برخی ممکن است روزانه تغییر کنند. این موضوع بستگی به دادههای شما و استراتژی پشتیبانگیری شما دارد.
یک استراتژی پشتیبانگیری خوب و شناختهشده، قانون ۳-۲-۱ است که به این معناست:
- سه نسخه از دادهها: یک نسخه اصلی و دو نسخه پشتیبان.
- دو نوع رسانه مختلف: مانند هارد دیسکهای داخلی/خارجی، SSDها و فضای ذخیرهسازی ابری.
- یک نسخه خارج از محل: یک نسخه پشتیبان را در مکانی دور از محل اصلی یا در فضای ابری نگهداری کنید تا در برابر بلایای فیزیکی محافظت شود.
برای ذخیرهسازی ابری، بهتر است از یک ارائهدهنده معتبر استفاده کنید. حتی سرویسهایی مانند Google Drive، اگرچه حریم خصوصی آنها خوب نیست، گزینهای مطمئنتر نسبت به سایر سرویسها خواهند بود. همچنین میتوانید فضای ذخیرهسازی ابری خود را میزبانی کنید، اما هرگز به اندازه یک شرکت بزرگ مانند گوگل قابل اعتماد نخواهد بود.
میتوانید روی NAS (ذخیرهساز متصل به شبکه) سرمایهگذاری کنید تا پشتیبانگیری خودکار و متمرکز انجام دهید، و میتوانید آن را برای RAID (آرایه افزونهای از دیسکهای مستقل) پیکربندی کنید تا از دادهها بهطور افزونه محافظت شود. مطمئن شوید که از دادههای خود اسنپشات (snapshot) میگیرید و نسخهبندی میکنید تا بتوانید بهراحتی آنها را بازیابی کنید.
همیشه پشتیبانهای خود را بهطور منظم تست کنید تا مطمئن شوید که معتبر و قابل بازیابی هستند. در غیر این صورت، ممکن است سالها دادههای خراب را پشتیبانگیری کنید و زمانی که نیاز به بازیابی دادهها دارید، نتوانید این کار را انجام دهید و تمام دادههای شما از بین رفته باشد.
در نهایت، یک طرح بازیابی از فاجعه (Disaster Recovery Plan) توسعه دهید و اطمینان حاصل کنید که دستورالعملهای واضحی برای بازیابی دادهها در صورت بروز حادثههای از دست دادن دادهها دارید.
حمله آچار پنج دلاری
مهم نیست که یک هارد دیسک چقدر امن رمزگذاری شده باشد، همیشه در برابر حمله آچار پنج دلاری آسیبپذیر است. این به این معناست که همیشه کسی میتواند با یک آچار پنج دلاری شما را تهدید کند تا رمزهای عبور خود را فاش کنید. چگونه میتوان از این موضوع جلوگیری کرد؟ خوب، این موضوع پیچیده است، اما چند کار وجود دارد که میتوانید انجام دهید.
۱. داشتن یک سیستم Kill Switch (کلید قطعکن)
ایجاد یک سیستم کلید قطعکن که در صورت وارد کردن یک رمز عبور خاص، فایل کلیدی بهطور دائمی پاک شود، میتواند دادههای شما را با دسترسیناپذیر کردن برای همه، از جمله خود شما، حفظ کند. در این حالت حتی خودتان هم قادر به بازیابی دادهها نخواهید بود.
یا میتوانید بهجای آن یک دکمه اضطراری ایجاد کنید. در صورتی که به یک موقعیت بحرانی مانند ربودهشدن دچار شدید، این دکمه میتواند مقامات را مطلع کند. همه چیز به مدل تهدید شما بستگی دارد. بسته به تهدیدهایی که ممکن است دادههای شما را هدف قرار دهند، ممکن است نیاز داشته باشید این سیستم را برای تطبیق با شرایط تغییر دهید.
۲. داشتن یک سیستم طعمه (Decoy System)
میتوانید کیفپولها و حسابهای جعلی ایجاد کنید و بهجای موارد واقعی، آنها را نشان دهید. بهعنوان مثال، برخی از فعالان نسخهای از تلگرام به نام تلگرام پارتیزانی برای کمک به معترضان بلاروس ایجاد کردهاند. روش کار این است که میتوانید برای تلگرام خود یک قفل تنظیم کنید و چندین کد PIN داشته باشید و هر کد PIN را برای انجام کارهای خاصی برنامهریزی کنید. بهعنوان مثال، اگر PIN "1234" را وارد کنید، تمام دادهها پاک شده و به همه پیام ارسال میشود تا آنها را مطلع کند، اما اگر "1349" را وارد کنید، یک حساب طعمه نشان داده میشود و اگر "6782" را وارد کنید، بهطور عادی کار میکند.
این سیستمهای طعمه میتوانند در موقعیتهایی مانند اعتراض که ممکن است دستگیر شوید یا دستگاههای شما بازرسی شوند، بسیار مفید باشند. ترکیب آنها با کلیدهای قطعکن میتواند هم مهاجم را فریب دهد و هم دادهها را همزمان حذف کند.
۳. کاهش ارزش هدف
کمترین مقدار دادههای حساس را روی دستگاههایی که بیشترین آسیبپذیری را در برابر این نوع حملات فیزیکی دارند، ذخیره کنید. بهعنوان مثال، نیازی نیست که دادههای حساس زیادی روی گوشی داشته باشید که با خود به بیرون میبرید. بهطور مرتب دادههای حساس را بهصورت امن و در مکانی امن پشتیبانگیری کنید. این مکان میتواند یک مکان فیزیکی یا یک فضای ابری از راه دور باشد تا دادهها همه در یک مکان نباشند و همیشه همراه شما نباشند.
۴. استفاده از احراز هویت چندعاملی برای دادههای حساس
از دستگاههای احراز هویت فیزیکی مانند YubiKey استفاده کنید که هم نیاز به داشتن توکن فیزیکی و هم رمز عبور یا PIN دارند و آنها را در مکانی امن نگه دارید. به این ترتیب، بدون دستگاه احراز هویت، دادههای شما قابل دسترسی نخواهند بود. میتوانید رمزهای عبور را به آنها بدهید، اما هنوز نمیتوانند به دادهها دسترسی پیدا کنند.
از احراز هویت بیومتریک خودداری کنید؛ این نوع احراز هویت در برابر زور فیزیکی مقاوم نیست. کسی میتواند بهزور از اثر انگشت شما استفاده کند.
۵. آگاهی از تاکتیکهای مهندسی اجتماعی
برخی افراد ممکن است بهجای زور، از تاکتیکهای مهندسی اجتماعی استفاده کنند، بهویژه اگر در موقعیتی از قدرت باشند. همیشه از تاکتیکها و بازیهای روانی که ممکن است برای بهدست آوردن اطلاعات حساس، رمزهای عبور و مدارک شما استفاده شود، آگاه باشید.
از حقوق قانونی خود در زمینه دفاع از خود و حفاظت از دادهها در حوزه قضایی خود آگاه باشید. فهرستی از مخاطبین اضطراری، از جمله مشاور حقوقی، داشته باشید که بتواند در صورت تهدید یا اجبار کمک فوری ارائه دهد.
اینها نکاتی بودند که درباره رمزگذاری و ذخیره امن اطلاعات حساس داشتم. فصل بعدی درباره ردپاها و اثر انگشتهای دیجیتال خواهد بود و اقداماتی که میتوان برای به حداقل رساندن یا حتی پاک کردن ردپایی که هنگام بیتوجهی به حریم خصوصی بهجا گذاشتهاید، انجام داد.