End-to-End Encryption নিয়ে অল্প স্বল্প গল্প

Photo Credit: Pexels.com

কিছুদিন বিভিন্ন ব্যস্ততায় আর্টিকেল লেখায় বিরতি নিয়েছিলাম। এখন লিখতে গেলে অলসতা ভর করে। তাই মনে হলো ছোটোখাটো কোনো একটা আর্টিকেল লিখে লেখালেখির আলস্য কাটানোর চেষ্টা করি। সেই ভাবনা থেকেই আজকের এই আর্টিকেল লেখার চেষ্টা।

বেশ কিছুদিন আগেই শুনেছিলাম, WhatsApp, Telegram সহ বেশ কিছু ম্যাসেজিং এপ্লিকেশন তাদের কমিউনিকেশনে End-to-End এনক্রিপশন ব্যবহার করে, তাই তাদের কমিউনিকেশন অন্যদের থেকে বেশি সিকিউর। তখনই মাথায় প্রথম যেই প্রশ্নটি এসেছিলো তা হলো, ‘কেন এবং কীভাবে?’ সেই প্রশ্নের উত্তর খুঁজতে গিয়েই এটা নিয়ে সামান্য ঘাঁটাঘাঁটি করা হয়েছিলো। আজকে সেটা নিয়েই একটু লিখি।

‘প্রোগ্রামিং পাতা’য় ইদানীংকালে প্রকাশিত নীচের আর্টিকেলগুলো যদি আপনি পড়ে থাকেন তাহলে এনক্রিপশন নিয়ে আপনার কিঞ্চিৎ ধারণা হয়েছে ধরে নিতে পারি। আর না পড়লে পড়ে আসতে পারেন, কারণ এনক্রিপশন নিয়ে প্রাথমিক কথাবার্তা এই লেখায় থাকছে না।

আমরা যখন কোনো ম্যাসেজিং এপ্লিকেশন ব্যবহার করে ম্যাসেজ আদান প্রদান করি তখন সাধারণত ম্যাসেজগুলো প্লেইন টেক্সট(Plain text) হিসেবেই নেটওয়ার্কে যাওয়া আসা করে। সে কারণে নেটওয়ার্ক থেকে এই প্লেইন টেক্সট পড়ে নেয়া খুব কঠিন কিছু না। এটা ছাড়াও আমরা যেই ম্যাসেজিং প্লাটফর্ম (যেমনঃ Messenger, Hangouts ইত্যাদি) ব্যবহার করছি তাঁদের সার্ভারেও এই ম্যাসেজগুলো এরকম প্লেইনটেক্সট হিসেবেই থাকে। কোনো কারণে সরকারের বা কোনো গোয়েন্দাসংস্থার ধমকিতে বাধ্য হয়ে ব্যবহারকারীদের এই ম্যাসেজগুলো তাদের কাছে হস্তান্তর করা লাগতে পারে। কিংবা কোনো হ্যাকার যদি তাঁদের সার্ভারের এক্সেস পেয়ে যায় তাহলেও তো এই তথ্যগুলো বেহাত হয়ে যাবে। এ সকল কারণে এভাবে প্লেইন টেক্সট হিসেবে ম্যাসেজ আদান প্রদান বা সংরক্ষণ করাকে অনেক ব্যবহারকারীই নিরাপদ মনে করেন না।

ব্যবহারকারীদের আশ্বস্ত করার জন্য অনেক ম্যাসেজিং কোম্পানী হয়তো বলে থাকে আমরা ইউজারদের ম্যাসেজ এনক্রিপ্ট করে রাখি, সুতরাং ভয়ের কিছু নেই। কিন্তু এখানে একটা বড় প্রশ্ন থেকে যায় যে, এই যে ইউজারের ম্যাসেজ এনক্রিপ্ট করে রাখা হচ্ছে আবার প্রাপকের কাছে এই ম্যাসেজ ডিক্রিপ্ট করে দেখানো হচ্ছে, এই প্রসেসে key টা কার কাছে থাকে? (আপনি নিশ্চয়ই ইতোমধ্যে এনক্রিপশনের key সম্পর্কে জেনে গেছেন উপরে দেয়া আর্টিকেলগুলো থেকে, তাই না?) key যদি ম্যাসেজিং কোম্পানীর সার্ভারে থাকে বা কোনোভাবে তাঁদের কাছেই থাকে, তাহলেও তো জিনিসটা সিকিউর হলো না। কারণ সেই ক্ষেত্রে একই তো ব্যাপার, যে কোম্পানী কোনো কারণে চাইলে ঐ key ব্যবহার করে ইউজারের ম্যাসেজ পড়তে পারবে। হয়তো তাঁরা সেটা কখনোই করবে না, কিন্তু তাঁদের সেই সুযোগ তো আছে। একই রকমভাবে, key টা যদি সার্ভারে সেইভ থাকে তাহলেও তো সেটা হ্যাকার থেকে নিরাপদ না।

এই রকম পরিস্থিতিতেই, আরো জোরদার সিকিউরিটি হিসেবে আগমন End-to-End এনক্রিপশনের। আমি বোকাসোকা মানুষ, প্রথমে এটার নাম শুনে বুঝেছিলাম যে এক End এ, মানে প্রেরকের কাছ থেকে, এটা এনক্রিপ্ট হয়ে আরেক End এ, মানে প্রাপকের কাছে, এটা ডিক্রিপ্ট হয় এটা না হয় বোঝা গেলো। কিন্তু এটা বুঝতে পারছিলাম না যে key টা কীভাবে সিকিউর থাকে? মানে যদি এমন হয় যে, আমি যেই key দিয়ে এনক্রিপ্ট করলাম সেটা আবার প্রাপকের কাছে পাঠানোর চেষ্টা করি, যাতে করে সেটা ব্যবহার করে সে ডিক্রিপ্ট করতে পারে, তাহলেও তো সেটা ইনসিকিউর নেটওয়ার্কের মধ্য দিয়েই যাবে। সিকিউরিটি তো তাহলে থাকছে না। আগেই বলেছি, আমি বোকাসোকা বলেই এনক্রিপশন বলতেই Symmetric Encryption এর কথা ভাবছিলাম। যেখানে এনক্রিপ্ট এবং ডিক্রিপ্ট করতে একই key ব্যবহার হয়। আসলে End-to-End এনক্রিপশনে Asymmetric Encryption ব্যবহার করা হয়। যখনই কোনো একজন ইউজার ম্যাসেজিং এপ্লিকেশনটা তাঁর ডিভাইসে ইন্সটল করে তখন ডিভাইসেই তাঁর জন্য একটা public key এবং private key পেয়ার তৈরি হয়। ইউজারের এই private key টা শুধুমাত্র তাঁর ডিভাইসেই সংরক্ষিত থাকে, কখনোই নেটওয়ার্কে আদান প্রদান হয় না। শুধুমাত্র তাঁর public key টাই অন্যদের কাছে এক্সেসিবল থাকে এবং সার্ভারে সেইভ থাকে। তো যখনই করিম সাহেব রহিম সাহেবকে কোনো ম্যাসেজ পাঠাতে চান, তিনি রহিম সাহেবের public key ব্যবহার করে ম্যাসেজটা এনক্রিপ্ট করে পাঠান আর রহিম সাহেব সেই ম্যাসেজ তাঁর নিজের private key ব্যবহার করে ডিক্রিপ্ট করে পড়েন। যেহেতু রহিম সাহেবের private key শুধুমাত্র তাঁর নিজের কাছেই থাকে, সুতরাং অন্য কেউ এমনকি ম্যাসেজিং এপ্লিকেশন কোম্পানীও এই ম্যাসেজ পড়তে পারবে না। কারণ তাঁদের কাছে বা তাঁদের সার্ভারে রহিম সাহেবের private key সেইভ করা নেই।

সার্ভারের কাছে শুধুমাত্র এনক্রিপ্টেড ডাটাই যায়

একইভাবে রহিম সাহেবও করিম সাহেবের public key ব্যবহার করে তাকে ম্যাসেজ পাঠাতে পারবেন। এনক্রিপশন, ডিক্রিপশন কীভাবে করবেন সেটা নিয়ে চিন্তিত হওয়ার কিছু নেই, ম্যাসেজিং এপ্লিকেশন নিজেই সেটা হ্যান্ডেল করবে।

Security is just an illusion.

যতই বলি এটা সিকিউর, ওটা সিকিউর, আসলে কোনো কিছুই পুরোপুরি সিকিউর না। আজকে যেটা খুব সিকিউর মনে হচ্ছে, কালকে দেখা গেলো কেউ না কেউ সেটা ঠিকই ব্রেক করে বসে আছে। যাই হোক, End-to-End এনক্রিপশনেও অনেক ক্ষেত্রেই আপনার এবং প্রাপকের কমিউনিকেশনের মাঝখানে নেটওয়ার্কে বসে আপনাদের কমিউনিকেশনে ঘাপলা করা সম্ভব, যেটা কিনা Man in the Middle (MITM) এটাক নামেই বেশী পরিচিত।

এক্ষেত্রে এটাকার(Attacker) যেটা করে তা হলো, নিজেকে ম্যাসেজের প্রাপক হিসেবে প্রেরকের কাছে উপস্থাপন করে তাঁর public key প্রেরকের কাছে পাঠায় (আমরা ধরে নিচ্ছি এটাকার নেটওয়ার্কে খুব শক্ত অবস্থান নিয়ে বসে আছে, সুতরাং তাঁর পক্ষে এটা করা সম্ভব)। তো প্রেরক যখন ম্যাসেজ এনক্রিপ্ট করে তখন সে মূলত এটাকারের public key ব্যবহার করেছে, সুতরাং এটাকার খুব সহজেই এই ম্যাসেজ পড়ে ফেলতে পারবে। তারপর এটাকার এই ম্যাসেজটাকেই আবার প্রাপকের public key দিয়ে এনক্রিপ্ট করে প্রাপকের কাছে সুন্দর করে পাঠিয়ে দিবে। তো আপনি আর প্রাপক নিজেদের মধ্যে ঠিকভাবেই ম্যাসেজ আদান প্রদান করবেন কিন্তু বুঝতেই পারবেন না যে মাঝখানে বসে কেউ আপনাদের ম্যাসেজ পড়ে মজা নিচ্ছে। আপনি বা প্রাপক যদি গুরুত্বপূর্ণ কোনো ব্যক্তি হন বা আপনাদের ম্যাসেজে যদি খুব গুরুত্বপূর্ণ কোনো তথ্যের আদান প্রদান হয় তাহলে এই মজা নেয়া শেষ পর্যন্ত ঠিক মজাদার থাকবে না, দুঃচিন্তার কারণ হবে।

Man in the Middle এটাক যেভাবে হয়ে থাকে

এ সমস্যা থেকে বাঁচার জন্য ম্যাসেজিং এপগুলোয় কমিউনিকেশন শুরুর আগে কোনো ধরনের Authentication পদ্ধতি ব্যবহার করে নিশ্চিত করে নেয়া হয় যে প্রেরক আর প্রাপক নিশ্চিতভাবে নিজেদের মধ্যেই ম্যাসেজ আদান প্রদান করছেন, এবং তাঁদের মাঝে (সম্ভবত) তৃতীয় কোনো ব্যক্তি নেই।

এই অথেনটিকেশনের একটা পদ্ধতি হচ্ছে এরকম যেটা WhatsApp ব্যবহার করেঃ
রহিম এবং করিম সাহেবের public key কে হ্যাশ করে সেটার একটা ডাইজেস্ট তৈরি করা হয় এবং সেটা নীচের ছবির মত করে QR code বা Base64 স্ট্রিং হিসেবে তাঁদের প্রোফাইল থেকে দেখার সুযোগ করে দেয়া হয়।

প্রতি দুইজন ইউজারের মধ্যে one-to-one কমিউনিকেশনের জন্য এই QR code বা Base64 স্ট্রিং ইউনিক হবে, কারণ এটা ঐ দুইজন ইউজারের public key ব্যবহার করে জেনারেট করা হয়।
এখন রহিম সাহেব এই QR code বা স্ট্রিংটিকে করিম সাহেবেরটার সাথে ম্যাচ করিয়ে নিশ্চিত হয়ে নিতে পারেন যে তাঁরা দুজনে নিজেদের মধ্যেই ম্যাসেজ আদান প্রদান করছেন, এবং তৃতীয় কোনো ব্যক্তির public key এই কমিউনিকেশনে ব্যবহার হবে না। কীভাবে এই ম্যাচিংটা তাঁরা করবেন? WhatsApp এর মধ্য দিয়ে এই তথ্য আদান প্রদান করতে গেলে তো সেই ঘুরেফিরে আগের মত সমস্যাই তৈরি হচ্ছে, কারণ আমরা এখনো দুইজনের মধ্যেকার ম্যাসেজ আদান প্রদানের নিরাপত্তা নিয়ে নিশ্চিত নই। আবার যদি অন্য কোনো সিকিউর এপ থাকে যেটার মাধ্যমে এই ডাটা আদান প্রদান করা যায়, তাহলে সেই এপ বাদ দিয়ে তাঁরা কেন WhatsApp ব্যবহার করবেন? এ কারণে বলা হয়, এই নিশ্চিতকরনের কাজটা কোনো একটা out-of-band বা নেটওয়ার্কের বাইরের মাধ্যমে করতে হবে। সেটা হতে পারে দুজনে সামনাসামনি একজন আরেকজনের ডিভাইস থেকে দেখে বা QR code স্ক্যান করে এটা ম্যাচ করে নেয়া। কিংবা ফোন কল বা এসএমএস এর মাধ্যমে এটা আদান প্রদান করেও করা যেতে পারে। নিশ্চয়ই ভাবছেন, এটাও কি কোনো ভালো পদ্ধতি হলো? আসলে এটাও খুব একটা ভালো পদ্ধতি না, কিন্তু এর চাইতে ভালো কিছু ব্যবহার করা হয় কিনা আমার জানা নেই। এখানে এবং এখানে এই পদ্ধতির কথাই বলা আছে যেটা আমি খুঁজতে গিয়ে পেয়েছি।

আশা করি কিছুটা হলেও End-to-End এনক্রিপশন এবং ম্যাসেজিং এপগুলো এটা কেন, কীভাবে ব্যবহার করে সেটা সম্পর্কে ধারণা পেয়েছেন। তবে আমি বলি কি, যতই ম্যাসেজিং এপগুলো আমাদের আশ্বস্ত করার চেষ্টা করুক না কেন যে আমাদের ম্যাসেজগুলো তাঁরা যথেষ্ট সিকিউরিটি নিশ্চিত করে আদান প্রদান করে এবং এমনকি তাঁরাও এই ম্যাসেজ পড়তে পারে না — এসব কথায় খুব একটা বিশ্বাস করার দরকার নেই। কেন বলছি? কারণ, ম্যাসেজিং এপগুলো তো বেশীরভাগই ক্লোজডসোর্স, অর্থাৎ তাঁদের কোডে তাঁরা কি করছে সেটা আমরা জানছি না। তাঁরা যদি public key এর সাথে ইউজারের private key ও সার্ভারে স্টোর করে রাখে, সেটা কি আমরা জানতে পারছি? তাঁদের মুখের কথাই তো আমাদের ভরসা। তাই, তাঁদের কথা চোখ বন্ধ করে বিশ্বাস করে আসলে খুব একটা ফায়দা নেই। মোদ্দাকথা, জগতের কোনো সিস্টেম, কোনো মাধ্যমই পুরোপুরি সিকিউর না, এটা সবসময় মাথায় রাখলেই হলো।

আজ এ পর্যন্তই। শুভ রাত্রি/সকাল/দুপুর(যার জন্য যেটা প্রযোজ্য)।

--

--

Ahmed shamim hassan
প্রোগ্রামিং পাতা

Curious mind. Software Engineer. Polyglot programmer. Avid learner. Average person.