𝗖𝗕𝗖 𝗕𝗶𝘁 𝗙𝗹𝗶𝗽𝗽𝗶𝗻𝗴 𝗘𝘅𝗽𝗹𝗮𝗶𝗻𝗲𝗱
انکرپشن (Encryption) کا مطلب یہ نہیں ہے کہ آپ کا ڈیٹا چھیڑ چھاڑ (tampering) سے محفوظ ہے۔
بہت سے ڈویلپرز یہ غلطی کرتے ہیں۔ وہ سمجھتے ہیں کہ اگر حملہ آور ڈیٹا پڑھ نہیں سکتا، تو وہ اسے تبدیل بھی نہیں کر سکتا۔ یہ غلط ہے۔ کرپٹوگرافی میں رازداری (secrecy) اور سالمیت (integrity) کو دو الگ الگ کاموں کے طور پر دیکھا جاتا ہے۔
CBC Bit Flipping حملہ اس بات کو ثابت کرتا ہے۔ ایک حملہ آور آپ کی خفیہ کلید (secret key) جانے بغیر آپ کے ڈیٹا کو تبدیل کر سکتا ہے۔
یہ کیسے کام کرتا ہے، یہاں دیکھیں:
AES ڈیٹا کو ایک بڑے ٹکڑے میں انکرپٹ نہیں کرتا۔ یہ ڈیٹا کو 16-بائٹ کے بلاکس میں تقسیم کرتا ہے۔ CBC موڈ میں، یہ بلاکس ایک دوسرے کے ساتھ زنجیر کی طرح جڑے ہوتے ہیں۔ پہلے بلاک کا انکرپٹڈ آؤٹ پٹ دوسرے بلاک کے پلین ٹیکسٹ (plaintext) میں شامل ہو جاتا ہے۔
یہ زنجیر ڈیکرپشن (decryption) کے دوران ایک کمزوری پیدا کرتی ہے۔ بلاک 2 کا اصل متن حاصل کرنے کے لیے، سرور اسے ڈیکرپٹ کرتا ہے اور اسے بلاک 1 کے سائفر ٹیکسٹ (ciphertext) کے ساتھ ملا دیتا ہے۔
ایک حملہ آور اس کا فائدہ اٹھا سکتا ہے:
- حملہ آور آپ کے انکرپٹڈ ٹریفک کو روک لیتا ہے۔
- وہ کلید (key) نہیں جانتے، اس لیے ڈیٹا بے معنی (gibberish) نظر آتا ہے۔
- وہ بلاک 1 کے سائفر ٹیکسٹ میں مخصوص بٹس (bits) کو تبدیل کر دیتے ہیں۔
- وہ یہ تبدیل شدہ ڈیٹا آپ کے سرور کو بھیج دیتے ہیں۔
- جب سرور اسے ڈیکرپٹ کرتا ہے، تو بلاک 1 میں تبدیلی بلاک 2 کے حساب کتاب (math) کو بدل دیتی ہے۔
حملہ آور کو پیغام پڑھنے کی ضرورت نہیں ہوتی۔ وہ صرف حتمی نتیجے کو بدلنے کے لیے بٹس کو الٹ (flip) دیتے ہیں۔
ایک پرانی ویب ایپ پر غور کریں جو سیشنز کے لیے انکرپٹڈ کوکیز استعمال کرتی ہے۔ ایک کوکی میں یہ ہو سکتا ہے:
userid=994;role=user;
ایک حملہ آور اس کوکی کو روک لیتا ہے اور سائفر ٹیکسٹ میں بٹس کو الٹ دیتا ہے۔ وہ اتنی زیادہ درخواستیں بھیجتے ہیں جب تک کہ سرور ایک کو قبول نہ کر لے۔ چونکہ سرور صرف یہ چیک کرتا ہے کہ آیا ڈیٹا ڈیکرپٹ ہو رہا ہے، اس لیے وہ تبدیل شدہ متن کو پروسیس کر لیتا ہے۔ اچانک، ڈیکرپٹ شدہ اسٹرنگ یہ بن جاتی ہے:
userid=994;role=admi;
اب حملہ آور کے پاس ایڈمن (admin) رسائی ہے۔ انہوں نے کبھی کلید یا اصل کوکی کو نہیں پڑھا۔
غلطی یہ سمجھنا ہے کہ انکرپشن سالمیت (integrity) کی ضمانت دیتی ہے۔
- رازداری (Confidentiality) لوگوں کو ڈیٹا پڑھنے سے روکتی ہے۔
- سالمیت (Integrity) لوگوں کو ڈیٹا تبدیل کرنے سے روکتی ہے۔
اسے ٹھیک کرنے کے لیے، AES-GCM جیسی Authenticated Encryption استعمال کریں۔ یہ ایک کرپٹوگرافک ٹیگ (cryptographic tag) بناتی ہے۔ یہ ٹیگ ایک مہر (seal) کی طرح کام کرتا ہے۔ اگر حملہ آور ایک بٹ بھی تبدیل کرتا ہے، تو مہر ٹوٹ جاتی ہے۔ سرور فوری طور پر ڈیٹا کو مسترد کر دیتا ہے۔
اگر آپ کو CBC استعمال کرنا ہی ہے، تو Encrypt-then-MAC آرکیٹیکچر استعمال کریں۔ سائفر ٹیکسٹ کے لیے ایک آتھنٹیکیشن کوڈ بنائیں اور ڈیکرپشن شروع کرنے سے پہلے اسے ویریفائی کریں۔
خفیہ ڈیٹا ہمیشہ قابلِ اعتماد ڈیٹا نہیں ہوتا۔ فیصلے کرنے کے لیے ڈیٹا استعمال کرنے سے پہلے ہمیشہ یہ ثابت کریں کہ آپ کا ڈیٹا تبدیل نہیں ہوا ہے۔
CBC Bit-Flipping کی وضاحت: کیوں صرف انکرپشن (Encryption) انٹیگریٹی (Integrity) کی ضمانت نہیں دیتی
انکرپشن کو اکثر غلط سمجھا جاتا ہے کہ یہ رازداری (confidentiality) اور انٹیگریٹی (integrity) دونوں کو یقینی بناتی ہے۔ اگرچہ انکرپشن رازداری کے لیے بہترین ہے (یعنی رازوں کو چھپانے کے لیے)، لیکن یہ بذات خود انٹیگریٹی کی ضمانت نہیں دیتی (یعنی اس بات کی کہ ڈیٹا کے ساتھ چھیڑ چھاڑ نہیں کی گئی)۔
یہیں پر CBC bit-flipping حملہ کام آتا ہے۔
CBC موڈ کیا ہے؟
Cipher Block Chaining (CBC) موڈ میں، ہر plaintext بلاک کو انکرپٹ کرنے سے پہلے پچھلے ciphertext بلاک کے ساتھ XOR کیا جاتا ہے۔
انکرپشن کا فارمولا یہ ہے: $C_i = E_k(P_i \oplus C_{i-1})$
ڈیکرپشن کا فارمولا یہ ہے: $P_i = D_k(C_i) \oplus C_{i-1}$
Bit-Flipping حملہ
ڈیکرپشن کے فارمولے پر غور کریں۔ Plaintext بلاک $P_i$ کو موجودہ ciphertext بلاک $C_i$ کو ڈیکریپٹ کر کے اور پھر پچھلے ciphertext بلاک $C_{i-1}$ کے ساتھ XOR کر کے حاصل کیا جاتا ہے۔
اس XOR آپریشن کی وجہ سے، اگر کوئی حملہ آور $C_{i-1}$ میں ایک بٹ (bit) تبدیل کر دیتا ہے، تو ڈیکرپشن کے بعد $P_i$ میں بھی وہی بٹ تبدیل ہو جائے گا۔
ایک عملی مثال
فرض کریں کہ ایک ciphertext ڈیکریپٹ ہونے پر یہ بنتا ہے:
amount=000100
ایک حملہ آور اسے amount=000900 میں تبدیل کرنا چاہتا ہے۔ اس ہندسے (digit) کی پوزیشن جان کر جسے وہ تبدیل کرنا چاہتا ہے، وہ پچھلے ciphertext بلاک $C_{i-1}$ میں متعلقہ بٹس (bits) کو تبدیل کر سکتا ہے۔
اگرچہ اس سے پچھلا بلاک $P_{i-1}$ خراب (garbled) ہو جائے گا، لیکن حملہ آور کو اس سے فرق نہیں پڑ سکتا اگر اس کے لیے اہم بلاک $P_i$ ہو۔
اس سے کیسے بچا جائے؟
رازداری اور انٹیگریٹی دونوں کو یقینی بنانے کے لیے، آپ کو درج ذیل استعمال کرنا چاہیے:
- Authenticated Encryption (AEAD): جیسے کہ
AES-GCMیاAES-CHACHA20-POLY1305۔ - MAC (Message Authentication Code): جیسے کہ
HMAC، جسے ciphertext پر لاگو کیا جائے (Encrypt-then-MAC)۔