নিরাপত্তা কীভাবে কাজ করে, সহজ কথায়।
যাঁরা জানতে চান এবং যাঁরা সাবধানে থাকতে চান, তাঁদের জন্য। আগে সংক্ষেপে, তারপর বিস্তারিত।
সহজ কথায়
আপনার প্রতিটি ডিভাইস নিজে নিজে একজোড়া চাবি তৈরি করে। আপনি যখন কোনো বার্তা পাঠান, আপনার phone সেটিকে একটি নতুন এককালীন চাবি দিয়ে তালাবদ্ধ করে, তারপর সেই চাবিটিকে চ্যাটের প্রতিটি ডিভাইসের জন্য আলাদাভাবে তালাবদ্ধ করে। শুধু সেই ডিভাইসগুলোই তালা খুলতে পারবে। আপনার phone বার্তাটিতে স্বাক্ষরও করে, যাতে পাঠকের phone বুঝতে পারে এটি সত্যিই আপনার কাছ থেকে এসেছে এবং পথে কেউ বদলায়নি।
প্রযুক্তিগত সারসংক্ষেপ
- ডিভাইস চাবি: চাবি আদান-প্রদানের জন্য X25519 এবং স্বাক্ষরের জন্য Ed25519, ডিভাইসেই তৈরি হয়। গোপন চাবি ডিভাইসের সুরক্ষিত জায়গায় রাখা হয়, কখনো আপলোড করা হয় না।
- বার্তা: একটি এলোমেলো ২৫৬-বিটের বিষয়বস্তু-চাবি ChaCha20-Poly1305 দিয়ে তথ্য তালাবদ্ধ করে। বিষয়বস্তু-চাবিটি প্রতিটি প্রাপক ডিভাইসের জন্য আলাদাভাবে ephemeral X25519 + HKDF-SHA256 ব্যবহার করে মোড়া হয়। খামের শিরোনাম (কথোপকথন, প্রেরক, ডিভাইস, বার্তা id, প্রাপকের তালিকা) সংযুক্ত তথ্য হিসেবে আবদ্ধ এবং Ed25519 দিয়ে স্বাক্ষরিত।
- ফাইল: ডিভাইসেই একটি এককালীন চাবি দিয়ে তালাবদ্ধ করা হয়, সেই চাবিটি তালাবদ্ধ বার্তার ভেতরে যায়। সার্ভারে শুধু তালাবদ্ধ তথ্যই জমা থাকে।
- কল: WebRTC এবং DTLS-SRTP মিডিয়া ব্যবহার করা হয়। অফার, উত্তর ও ICE candidate একই স্বাক্ষরিত, তালাবদ্ধ খামে যায়, তাই সার্ভার কল শুরুর প্রক্রিয়া পড়তে বা নকল করতে পারে না।
- নিরাপত্তা নম্বর: দুজনের ডিভাইস চাবির একটি ছাপ। মাঝখানে কেউ নেই তা নিশ্চিত করতে সামনাসামনি মিলিয়ে দেখুন। কোনো পরিচিতের চাবি বদলে গেলে app সতর্ক করে দেয়।
- সাইন-ইন: scrypt পাসওয়ার্ড হ্যাশ, ঐচ্ছিক TOTP দুই-ধাপের যাচাই হ্যাশ করা রিকভারি কোড সহ, 5 বার ভুল হলে লক হয়ে যায়, 12 ঘণ্টা নিষ্ক্রিয় থাকলে এবং সর্বোচ্চ 24 ঘণ্টার সেশন, HttpOnly SameSite=Strict কুকি। কোথাও SMS ব্যবহার হয় না।
- ওয়েব: কড়া Content-Security-Policy মেনে চলা হয়, তৃতীয় কোনো পক্ষের সাইট থেকে কিছু আনা হয় না, অন্য সাইটে এটি frame করে দেখানো যায় না, production-এ HSTS চালু থাকে।
- Android: স্ক্রিন ধারণ করা আটকাতে FLAG_SECURE ব্যবহার করা হয়, সাধারণ (cleartext) ট্র্যাফিক বন্ধ রাখা হয়, app-এর backup বন্ধ রাখা হয়।
সার্ভার কী দেখতে পায়
কে কার সঙ্গে কখন কথা বলছেন, বার্তা ও ফাইলের আকার, দলের নাম ও সদস্যপদ, এবং কোনো কল শুরু হচ্ছে কি না — এটুকু সার্ভার দেখতে পায়। কাজের তালিকা, চুক্তি ও রিপোর্টের খসড়া সার্ভারে সম্পূর্ণ সুরক্ষা ছাড়াই জমা থাকে। এটি আমরা গোপনীয়তা পাতায় খোলাখুলি জানিয়েছি।
আমরা কীভাবে পরীক্ষা করি
প্রতিটি রিলিজ 40-এর বেশি স্বয়ংক্রিয় পরীক্ষার ধাপ পার করে, যার মধ্যে রয়েছে: Python-এ লেখা প্রোটোকলের একটি স্বতন্ত্র রূপায়ণ, যেটিকে অ্যাপের সঙ্গে ঠিকঠাক কাজ করতেই হবে; বদলে দেওয়া, জাল করা এবং পুনরায় পাঠানো এনভেলপের উপর আক্রমণ পরীক্ষা; সার্ভার ডেটাবেসে সরাসরি পাঠযোগ্য লেখা আছে কি না তার খোঁজ; মেয়াদ-শেষ হওয়া স্বয়ংক্রিয়-মুছে-যাওয়া বার্তাগুলি তাদের চাবিসহ সত্যিই মুছে গেছে কি না তার যাচাই; এবং ব্রাউজার পরীক্ষা যে ওয়েব অ্যাপটি কোনও তৃতীয় পক্ষের কাছে একটিও অনুরোধ পাঠায় না।
জানা সীমাবদ্ধতা
- এখনো forward secrecy ratchet নেই: কোনো ডিভাইসের চাবি চুরি হলে সেই ডিভাইসে পাঠানো আগের বার্তা পড়া সম্ভব হতে পারে। double-ratchet পদ্ধতি পরিকল্পনায় রয়েছে।
- উপরে বলা হয়েছে যে metadata সার্ভার দেখতে পায়।
- ওয়েব সংস্করণের নিরাপত্তা নির্ভর করে ব্রাউজারের উপর এবং আমাদের সার্ভার থেকে পাঠানো কোডের উপর। এই কারণেই ওয়েব সংস্করণ এখন শুধু একটি ছোট আমন্ত্রণ-ভিত্তিক পাইলটের মধ্যে সীমাবদ্ধ রাখা হয়েছে: Google Play-র অ্যাপ আগে আসবে, এবং তার সাইনিং সার্টিফিকেট আমরা Namaskara নিন পাতায় প্রকাশ করব।
নিরাপত্তা সংক্রান্ত সমস্যা জানান
কোনো দুর্বলতা খুঁজে পেয়েছেন? প্রকাশ করার আগে অনুগ্রহ করে আমাদের গোপনে জানান — বিষয়ে "Security" লিখে যোগাযোগ করুন। আমরা উত্তর দেব, সমস্যা ঠিক করব এবং আপনি চাইলে কৃতজ্ঞতাও জানাব। অন্যের অ্যাকাউন্টে পরীক্ষা করবেন না।