খবর · Blackbear-এ নিরাপত্তা

যা আমরা পড়তে পারি না

১৫ আগস্ট, ২০২৬ Xavi Group পর্ব ১ / ৩
ইলাস্ট্রেশন: কাঠের টেবিলে বসে একটি কালো ভালুক একটি খামে গালার সিল মারছে, পাশে আগেই সিল করা খামের একটি স্তূপ

Blackbear লোকাল-ফার্স্ট। প্রতিটি ফিচার আপনার ডিভাইসেই চলে, আর ডিফল্টভাবে আপনার ডেটা শুধু সেখানেই থাকে, মাঝখানে কোনো সার্ভার ছাড়াই।

ক্লাউড সিঙ্ক চালু করলে আমাদের সার্ভার আপনার ডিভাইসগুলো আর আপনার মানুষদের মধ্যে আপনার ডেটা বহন করতে শুরু করে। আপনার প্রাইভেসির জন্য এর অর্থ কী, এই সিরিজ তা-ই বোঝায়। পর্ব ১ এনক্রিপশন নিয়ে: কী আপনার ডিভাইস ছাড়ে, আর কেন আমরা তা পড়তে পারি না। পর্ব ২ হলো আমাদের সার্ভার যে মেটাডেটা সত্যিই রাখে তার সৎ হিসাব। পর্ব ৩ শেয়ারিং আর কোলাবোরেশন নিয়ে।

নিচে যা আছে, তা চালু কোডের বর্ণনা, ইচ্ছের নয়। যেখানে আমরা কোনো অ্যালগরিদম বা সংখ্যার নাম বলি, সেটিই আজ প্রোডাকশনে চলছে।

এনক্রিপশন হয় আপনার ডিভাইসেই

আপনি যে পরিবর্তনই সিঙ্ক করুন, নেটওয়ার্কে পৌঁছানোর আগেই তা এনক্রিপ্ট হয়। নোট, ডকুমেন্ট, টাস্ক, ইভেন্ট, জার্নালের লেখা, স্প্রেডশিট, ক্যানভাস, অডিও, ভার্সন হিস্ট্রি। প্রতিটি সিল করা হয় XChaCha20-Poly1305 দিয়ে, একটি অথেনটিকেটেড সাইফার, এমন একটি কি দিয়ে যা কখনো অরক্ষিত অবস্থায় আপনার ডিভাইস ছাড়ে না। আমাদের সার্ভার এনক্রিপ্টেড লেখা পায়, আর এনক্রিপ্টেড লেখাই রাখে।

ছবি আর অডিও ফাইলও একই ভাবে সামলানো হয়: আপনার ডিভাইসে এনক্রিপ্ট করে, অস্বচ্ছ ব্লব হিসেবে আপলোড।

এই সব কাজ করে একটিই Rust ইমপ্লিমেন্টেশন, যা RustCrypto ইকোসিস্টেমের ওপর তৈরি আর WebAssembly-তে কমপাইল করা। অ্যাপ আর Blackbear CLI বাইট ধরে ধরে একই কোড ব্যবহার করে, আর আমরা এটি বিভিন্ন ভাষার ফিক্সচারের সাথে পরীক্ষা করি, যাতে কোনো দ্বিতীয় ইমপ্লিমেন্টেশন চুপচাপ সরে যেতে না পারে।

এটি কী রক্ষা করে, আর কী করে না

এনক্রিপশন একটি নির্দিষ্ট হাতিয়ার, সব আটকানো বর্ম নয়। বিস্তারিতে যাওয়ার আগে, সীমানাগুলো।

এই নকশা আপনাকে রক্ষা করে:

  • আমাদের সার্ভার বা ডেটাবেসে নিষ্ক্রিয় হানা থেকে — জমা ডেটা চুরি হলে। যা ফাঁস হয়, তা শুধু এনক্রিপ্টেড লেখা আর মোড়ানো কি।
  • আমাদের থেকে। আমাদের চালু প্রোডাকশন সিস্টেম কখনো আপনার কনটেন্ট কি বা খোলা লেখা পায় না, তাই আপনার কনটেন্টের জন্য আইনি দাবি এলে আমরা যা রাখি তা-ই মেলে: মেটাডেটা (পর্ব ২) আর সিল করা ব্লব।

এটি যা থেকে রক্ষা করে না:

  • ক্ষতিগ্রস্ত, চুরি হওয়া বা আনলক করা ডিভাইস। আপনার কি আপনার ডিভাইসেই থাকে; তার নিরাপত্তাই বাকি সবকিছুর ভিত।
  • যার কাছে আপনার পাসফ্রেজ বা বারোটি রিকভারি শব্দ আছে।
  • আপনি যা শেয়ার করেন, অনুমতিপ্রাপ্ত প্রাপকেরা তা দিয়ে কী করেন। শেয়ারিং মানুষের ওপর ভরসা, শুধু গণিত নয়।
  • ট্রাফিকের মেটাডেটা: কে, কখন, কতটা। এটাই পর্ব ২-এর পুরো বিষয়।
  • অ্যাপ নিজেই। ওয়েবে প্রতিবার লোড হওয়ার সময় অ্যাপ আসে আমাদের সার্ভার থেকে; ডেস্কটপে আসে সাইন করা রিলিজের মাধ্যমে। কোনো এনক্রিপশন ব্যবস্থাই ক্ষতিকর অ্যাপ থেকে বাঁচাতে পারে না, সেটা যেই পাঠাক।
  • যে মুহূর্তগুলোতে আপনি নিজেই খোলা অবস্থায় ডেটা বাইরে পাঠান: Pax-কে ক্লাউড মডেল ব্যবহার করতে বলা, বাইরের ক্যালেন্ডার যোগ করা, ফাইল এক্সপোর্ট করা, ইমেইলে আমন্ত্রণ পাঠানো। সেগুলো ইচ্ছাকৃতভাবে আপনার বেছে নেওয়া পক্ষের কাছে যায়, সেই পক্ষের নীতিমালা মেনে, আমাদের এনক্রিপশনে নয়।

কি-এর স্তরবিন্যাস

আপনার পাসফ্রেজ কখনো আপনার ডিভাইস ছাড়ে না। সবকিছু তা থেকেই গড়ে ওঠে:

আপনার পাসফ্রেজ
১২টি রিকভারি শব্দ
↓ Argon2id
↓ HKDF
অ্যাকাউন্ট কি
রিকভারি কি
প্রতিটিই মোড়ে রাখে ↓
ভল্ট কি · এলোমেলো, 256-বিট, খোলা অবস্থায় কখনো আপনার ডিভাইস ছাড়ে না
↓ এনক্রিপ্ট করে
নোট · ডক · টাস্ক · ইভেন্ট · শিট · মিডিয়া · হিস্ট্রি

সার্ভার শুধু মোড়ানো কপিগুলো রাখে: এনক্রিপ্টেড লেখাকে রক্ষা করছে আরেক এনক্রিপ্টেড লেখা।

এই ঘুরিয়ে পথ কেন? এতে আপনি পুরো জীবনের ডেটা আবার এনক্রিপ্ট না করেই পাসফ্রেজ বদলাতে পারেন, আর সামনের দরজা দুর্বল না করেই রিকভারির ব্যবস্থা রাখা যায়।

একটি সতর্কতা, যা লিখে রাখা উচিত: Argon2id অনুমান করাকে ব্যয়বহুল করে; দুর্বল পাসফ্রেজকে শক্ত করতে পারে না। মোড়ানো ভল্ট কি ঠিক ততটাই শক্ত, যতটা শক্ত তাকে মোড়ানো পাসফ্রেজ। লম্বা একটি বেছে নিন।

রিকভারি মানে বারোটি শব্দ

সিঙ্ক সেট আপ করার সময় Blackbear আপনাকে একটি রিকভারি ফ্রেজ দেয়: বারোটি শব্দ (BIP39), যাতে 128 বিট এন্ট্রপি থাকে। তা থেকে একটি স্বতন্ত্র কি তৈরি হয়, যা আপনার ভল্ট কি-কে দ্বিতীয়বার মোড়ে রাখে।

পাসফ্রেজ হারিয়েছেন? বারোটি শব্দ দিয়ে আবার ঢুকতে পারবেন। দুটোই হারিয়েছেন? আপনার সিঙ্ক করা ডেটা আর নেই। আমরা তা রিসেট করতে পারি না, কোনো সাপোর্ট টিকিটও আমাদের দিয়ে তা করাতে পারবে না, কারণ আমাদের দিকে রিসেট করার মতো কিছুই নেই। এটা আমাদের সাপোর্টের ঘাটতি নয়। এটা নকশাটাই ঠিকমতো কাজ করছে।

নতুন ডিভাইস যোগ করা

নতুন ডিভাইসে আপনি আপনার পাসফ্রেজ দেন। সেটি লোকালি আপনার অ্যাকাউন্ট কি তৈরি করে, আর আমাদের সার্ভারে থাকা মোড়ানো কপি থেকে ভল্ট কি খোলে। সার্ভার কখনো পাসফ্রেজ দেখে না, ফলাফলও না।

আগে থেকে আনলক করা কোনো ডিভাইসও সরাসরি কি হস্তান্তর করতে পারে। সে নতুন ডিভাইসের X25519 পাবলিক কি-তে ভল্ট কি সিল করে একটি ট্রান্সফার স্লটে রাখে, যা ব্যবহার হোক বা না হোক, পাঁচ মিনিট পর নিজে থেকেই মুছে যায়। এখানে একটি সৎ সীমানা: আপনার পুরনো ডিভাইস নতুন ডিভাইসের পাবলিক কি জানে আপনার সাইন ইন করা অ্যাকাউন্টের মাধ্যমে, তাই এই সহায়ক পথে ভরসা করতে হয় যে আমাদের সার্ভার আপনার বেছে নেওয়া ডিভাইসের ঠিক কি-টিই পৌঁছে দেবে। পাসফ্রেজের পথে এমন কোনো ভরসার দরকার নেই।

এই শব্দগুলোই যেহেতু ফিশিংকারীরা ধার করে, তাই একটি নিয়ম লিখে রাখা দরকার: আমরা কখনো আপনার পাসফ্রেজ বা রিকভারি শব্দ চাইব না, আর কখনো আপনাকে ডিভাইস ট্রান্সফার অনুমোদন করতে বলব না। এসব অনুরোধ আসবে শুধু আপনার নিজের খোলা অ্যাপের ভেতরে। অন্য কেউ চাইলে সেটা আক্রমণ।

মেসেজ

মেসেজিং সিঙ্ক থেকে আলাদা, নিজস্ব কি ব্যবহার করে। প্রতিটি অ্যাকাউন্টের একটি X25519 মেসেজিং পরিচয় আছে, আর প্রতিটি মেসেজ HKDF-SHA256 দিয়ে, মেসেজপ্রতি নতুন স্যাল্ট থেকে একটি অনন্য কি তৈরি করে। মেসেজ যায় সিল করা খাম হিসেবে। সার্ভার সেগুলো পৌঁছে দেয়; খুলতে পারে না। খামের বাইরের দিক কী জানায়, তা পর্ব ২-এ আছে।

নকশা নিয়ে একটি কথা, সোজাসুজি: মেসেজপ্রতি অনন্য কি আর কিছু মেসেঞ্জারের ঘুরন্ত র্যাচেট নকশা এক জিনিস নয়। কোনো ডিভাইসের দীর্ঘমেয়াদি মেসেজিং কি কখনো ফাঁস হলে, সেই কি-তে সিল করা মেসেজগুলো ঝুঁকিতে পড়বে। মেসেজপ্রতি কি ক্ষতির পরিসর সীমিত করে; এটা ফরওয়ার্ড সিক্রেসি নয়, আর আমরা চাই আপনি পার্থক্যটা জানুন।

কনটেন্টের ছাপ ছাড়াই ইতিহাস

ভার্সন হিস্ট্রি সিঙ্ক হয় এনক্রিপ্টেড স্ন্যাপশট হিসেবে, যেগুলোর ID শুধু আপনার ভল্টের মধ্যেই অর্থবহ। আপনি আর কোনো অচেনা মানুষ একই ফাইল সেভ করলে সার্ভার দেখে দুটি অসম্পর্কিত ID: একই কনটেন্ট অ্যাকাউন্টের সীমা পেরিয়ে মেলানো যায় না। সব সিঙ্ক ট্রাফিকের মতোই আকার আর সময় দেখা যায়। এটা মেটাডেটা, আর সেই বিষয় পর্ব ২-এর।

না দেখিয়েই প্রমাণ করা

অ্যাকাউন্টের ধ্বংসাত্মক কাজে ভল্ট প্রুফ লাগে: আপনার ভল্ট কি থেকে তৈরি একটি Ed25519 কি-এর সিগনেচার। ভল্ট কোথাও না পাঠিয়েই আপনি প্রমাণ করেন যে ভল্টটি আপনার কাছে আছে। আর মেমরিতে কাজ শেষ হলে কিগুলো শূন্য করে মুছে ফেলা হয়।

এর কোনোটাই অদ্ভুত কিছু নয়। XChaCha20-Poly1305, Argon2id, X25519, Ed25519, HKDF-SHA256: মানসম্মত, নিরস, বহুবার যাচাই করা মৌলিক উপাদান। আকর্ষণীয় অংশটা হলো সবখানে সেগুলো প্রয়োগ করার শৃঙ্খলা, আর সেগুলো কী সামলায় না তা জোর গলায় বলা। এই সিরিজের বাকি অংশ সেই শৃঙ্খলা নিয়েই।

আরও পড়ুন

  • Local-first software — এই দর্শনের পেছনের Ink & Switch প্রবন্ধ
  • RFC 9106 — Argon2-এর স্পেসিফিকেশন
  • XChaCha20-Poly1305 — IETF-এর স্পেসিফিকেশন খসড়া
  • RFC 7748 — X25519-এর পেছনের উপবৃত্তীয় কার্ভ
  • RFC 8032 — Ed25519 সিগনেচার
  • The Password Hashing Competition — যেখানে Argon2 জিতেছিল

Blackbear-এ নিরাপত্তা

  1. 1. যা আমরা পড়তে পারি না (আপনি এখানে আছেন)
  2. 2. আমাদের সার্ভার যা দেখতে পায়
  3. 3. শেয়ার করার সময়ও সব সিলমোহর করা থাকে যেভাবে

Blackbear ব্যবহার করে দেখুন

ব্যবহার করতে কোনো খরচ নেই। ক্রেডিট কার্ড লাগবে না।

Blackbear খুলুন