এটা পড়তে পারেন কেবল আপনি আর যাঁদের আপনি লেখেন

Cryptico হলো ওয়েব, Android আর iPhone-এর জন্য একটি অ্যানোনিমাস মেসেঞ্জার: ফোন নম্বর নেই, ইমেল নেই, আসল নাম নেই। প্রতিটি মেসেজ এন্ড-টু-এন্ড এনক্রিপ্টেড, আর সার্ভারের কোড তা ডিকোড করতে পারে না, আমরা চাইলেও না।

সাইন-আপ নেই, ফোন নম্বর নেই — সরাসরি ব্রাউজারেই খুলে যায়।

চওড়া ব্রাউজার উইন্ডোতে ওয়েব ক্লায়েন্ট: বাঁ দিকে চ্যাটের তালিকা, ডান দিকে খোলা একটা গ্রুপ কথোপকথন।

অ্যাকাউন্ট মানে একটা ফ্রেজ, কোনো মানুষ নয়

কিছু না দিয়েই আপনি শুরু করেন। Cryptico একটা র‍্যান্ডম পরিচয় আর 12 শব্দের একটা রিকভারি ফ্রেজ তৈরি করে, আর ওই ফ্রেজটাই আপনার অ্যাকাউন্ট — আপনার প্রতিটি কি ওখান থেকেই তৈরি হয়। ভেরিফাই করার মতো কোনো নম্বর নেই, নিশ্চিত করার মতো কোনো ঠিকানা নেই, আপনার সঙ্গে জুড়ে দেওয়ার মতো কোনো প্রোফাইল নেই। ইউজারনেম ঐচ্ছিক: খুঁজে পাওয়া যেতে চাইলে নিন, না চাইলে বাদ দিন।

01

চারটে কথা, যেগুলোর পেছনে আমরা সত্যিই দাঁড়াতে পারি

  • 01

    সার্ভার আপনার মেসেজ পড়তে পারে না

    এটা কোনো নীতির ব্যাপার নয়, বিল্ডেরই বৈশিষ্ট্য। সার্ভার বাইনারিতে মেসেজ বডির সংজ্ঞাই কম্পাইল হয় না, তাই ওতে এমন কোনো কোড-পথ নেই যা মেসেজ ডিকোড করতে পারে। এটা কখনও সত্যি না থাকলে আমাদের পাইপলাইনের একটা চেক বিল্ড ফেল করিয়ে দেয়।

    check-proto-content-boundary.mjs
  • 02

    বাস্তব দুনিয়ার কোনো আইডেন্টিফায়ার কখনও নয়

    ফোন নম্বর নেই, ইমেল ঠিকানা নেই, আসল নাম নেই — অ্যাপেও না, ডেটাবেসেও না, প্রোটোকলেও না। এমন কিছু যোগ করে এমন যেকোনো পরিবর্তন একটা অটোমেটেড চেক আটকে দেয়। কন্টাক্ট কার্ডের একটা ড্রাফটে একবার ফোন-নম্বরের ফিল্ড ঢুকে পড়েছিল; সেটা সরানো হয়েছে আর তার জায়গাটা চিরতরে বন্ধ করে দেওয়া হয়েছে।

    check-forbidden-columns.mjs
  • 03

    Signal Protocol, সঙ্গে পোস্ট-কোয়ান্টাম কি এগ্রিমেন্ট

    হ্যান্ডশেকের জন্য PQXDH, মেসেজের জন্য Double Ratchet, গ্রুপের জন্য Sender Keys। প্রতিটি সেশনে ক্লাসিক এক্সচেঞ্জের উপরে একটা পোস্ট-কোয়ান্টাম Kyber-1024 এক্সচেঞ্জ যোগ হয় — অপশন হিসেবে নয়, প্রতিটি হ্যান্ডশেকে — তাই আজ রেকর্ড করা ট্রাফিক ভবিষ্যতের কোয়ান্টাম কম্পিউটারের কাছে পড়ার মতো হয়ে যায় না। হ্যান্ডশেকের পরে যা চলে তা প্রচলিত ক্রিপ্টোগ্রাফি, আর তাই আমরা বলি পোস্ট-কোয়ান্টাম কি এগ্রিমেন্ট, পুরোটা জুড়ে এমন দাবি করি না।

    libsignal · PQXDH · Kyber-1024
  • 04

    যে কল আমাদের নিজেদের সার্ভারও শুনতে পারে না

    ওয়ান-টু-ওয়ান কল সরাসরি ডিভাইস থেকে ডিভাইসে যায়; কোনো সার্ভার মিডিয়ায় হাত দেয় না। গ্রুপ কল আমাদের মিডিয়া সার্ভারের মধ্য দিয়ে যায়, আর সেখানে পৌঁছানোর আগেই প্রতিটি ফ্রেম এমন একটা কি দিয়ে এনক্রিপ্ট হয়ে যায়, যা ওই সার্ভার কখনও পায় না। একটা বিল্ড চেক কল মিডিয়ার কি সার্ভারের কোড থেকে পুরোপুরি দূরে রাখে।

    check-call-media-key-boundary.mjs
02

এটা দিয়ে আসলে কী কী করা যায়

এটা একটা মেসেঞ্জার, ডেমো নয়। এই তালিকার সবকিছুই প্রোডাক্টে আছে, যে প্ল্যাটফর্মে যেটার মানে হয় সেখানে।

  • চ্যাট, যা চ্যাটের মতোই চলে

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

  • 128 জন পর্যন্ত গ্রুপ

    গ্রুপ তৈরি করুন, লোক যোগ করুন ও সরান, মেয়াদ আর ব্যবহারের সীমা দেওয়া লিংক দিয়ে ইনভাইট করুন, একজনকে বা সবাইকে মেনশন করুন। সার্ভার মেসেজগুলো সবার কাছে পৌঁছে দেয়, কিন্তু গ্রুপের নাম, বর্ণনা বা কার নামে নাম রেখেছেন — কিছুই জানে না।

  • ফাইল, ছবি আর ভয়েস

    8 ধরনের অ্যাটাচমেন্ট, প্রতিটি 100 MiB পর্যন্ত — ছবি, ভিডিও, ভয়েস মেসেজ, ভিডিও নোট, ফাইল, GIF, স্টিকার, অডিও — সঙ্গে অ্যালবাম আর স্পয়লার। প্রতিটি ফাইল আপনার ডিভাইসে নিজস্ব এক-বারের কি দিয়ে লক করা থাকে, আর খোলার আগে সেটা বদলে দেওয়া হয়েছে কি না তা যাচাই করা হয়।

  • মেসেঞ্জারের ভেতরেই মিনি-অ্যাপ

    একটা ক্যাটালগ, এক ট্যাপে ইনস্টল আর স্যান্ডবক্সড রানটাইম, সঙ্গে ডেভেলপার কনসোল আর অ্যানোনিমাস রিপোর্ট বাটন। যে অ্যাপের চেকসাম তার ম্যানিফেস্টের সঙ্গে মেলে না, সেটা চালুই হয় না।

  • ব্লক, যা সত্যিই ব্লক করে

    ব্লক করা কারও মেসেজ প্রাইভেট চ্যাটে আপনার কাছে পৌঁছায় না, আর তারা কখনও জানতেও পারে না যে পৌঁছায়নি। একটা ব্লক 180 দিন চলে, আর লেখার প্রতিটি চেষ্টায় সেটা আরও বাড়ে।

  • এক অ্যাকাউন্টে 10টি পর্যন্ত ডিভাইস

    ফ্রেজ দিয়ে নতুন ডিভাইস যুক্ত করুন, পুরো তালিকা দেখুন, যেকোনোটা আনলিংক করুন — এমনকি কোনো চালু সেশন না থাকলেও একটা আনলিংক করা যায়। কন্টাক্ট, ফোল্ডার, চ্যাট লিস্ট, ব্লক আর সেটিংস এনক্রিপ্টেড অবস্থায় সঙ্গে যায়। আপনার মেসেজের সংরক্ষণ মূলত যায় না; সেটা “আমরা যা প্রতিশ্রুতি দিই না”-র মধ্যে পড়ে।

03

কল, একা একজনের সঙ্গে আর গ্রুপেও

অডিও আর ভিডিও, সামনে-পেছনের ক্যামেরা, একসঙ্গে 8টি পর্যন্ত ভিডিও টাইল, হাত তোলা, স্ক্রিন শেয়ার, প্রতিটি টাইলে মাইক ও ক্যামেরার ইন্ডিকেটর। মিডিয়া ডিফল্টে রিলে হয়ে যায়, তাই অন্য পক্ষ আপনার ঠিকানা দেখতে পায় না।

চারজন অংশগ্রহণকারী নিয়ে একটা গ্রুপ কল; তাদের একজনের হাত তোলা।একটা ফোনে চলা গ্রুপ কল।
04

ফোল্ডার, পিন আর চুপচাপ চ্যাট

নিয়ম-ভিত্তিক ফোল্ডার, পিন করা চ্যাট, মিউট করা চ্যাট, শেয়ার করা মিডিয়ার ভিউ আর একটা কানেকশন ব্যানার, যা আপনার লিংকের অবস্থা সত্যি করেই বলে। মিউট করা চ্যাটেও মেনশন ঠিকই পৌঁছায় — এটা ইচ্ছে করেই।

ফোল্ডার এডিটর, সঙ্গে সেই ফিল্টার নিয়মগুলো যা ঠিক করে কোন চ্যাট এই ফোল্ডারে পড়বে।ফোনে চ্যাটের তালিকা, সঙ্গে নতুন গ্রুপ তৈরির স্ক্রিন।
05

এটা আসলে কীভাবে কাজ করে

সংক্ষিপ্ত ব্যাখ্যা — যাঁরা বিশ্বাস করার বদলে যাচাই করতে চান তাঁদের জন্য।

প্রাইভেসি সেটিংস: রিড রিসিট, একটা PIN আর অটো-লক টাইমার।ফোনে প্রাইভেসি সেটিংস: বায়োমেট্রিক আনলক, অটো-লক আর কন্টাক্ট যাচাই করার সেফটি নম্বর।
হ্যান্ডশেক
PQXDH: Curve25519 আর সঙ্গে একটা Kyber-1024 প্রি-কি, প্রতিটি সেশনেই — তাই প্রথম মেসেজ থেকেই কি এগ্রিমেন্ট কোয়ান্টাম-প্রতিরোধী।
মেসেজ
Double Ratchet: প্রতিটি মেসেজ কি-গুলো এক ধাপ এগিয়ে দেয়, তাই পরে কোনো কি হাতে এলেও তা দিয়ে আগের মেসেজ খোলা যায় না।
গ্রুপ
Sender Keys, 128 জন সদস্য পর্যন্ত। সার্ভার সদস্যের তালিকা জানে, কারণ মেসেজ সবার কাছে পৌঁছাতে গেলে সেটা জানতেই হয়; কিন্তু গ্রুপের নাম সে জানে না।
গ্রুপ কল
আমাদের মিডিয়া সার্ভারে পৌঁছানোর আগেই ফ্রেমগুলো এনক্রিপ্ট হয়ে যায়। কি তৈরি করে সেই ডিভাইস, যেটা কলটা শুরু করে; সেটা বিলি করে মেসেঞ্জার নিজেই, আর কেউ যোগ দিলে বা বেরিয়ে গেলে কি বদলে যায়।
ফাইল আর ছবি
প্রতিটি ফাইলের জন্য নতুন কি সহ AES-256-GCM, যা এনক্রিপ্টেড খামের ভেতরেই যায়, আর ডিক্রিপ্ট করার আগে একটা SHA-256 যাচাই। স্টোরেজে এমন বাইট থাকে, যার মানে সে বুঝতে পারে না।
আপনার ডিভাইসে
লোকাল মেসেজ ডেটাবেস জমা অবস্থাতেই এনক্রিপ্টেড — Android আর iPhone-এ SQLCipher, ব্রাউজারে AES-256-GCM।
আপনার রিকভারি ফ্রেজ
12টি শব্দ। অ্যাকাউন্টের প্রতিটি কি ওখান থেকেই তৈরি হয়: BIP39, তারপর প্রতিটি অনুমানের জন্য 64 MiB আর তিন পাসে Argon2id — এই কারণেই ব্রুট ফোর্স চালানো পোষায় না। সার্ভারে এমন কিছু থাকে না, যা দিয়ে এটা উল্টে বের করা যায়।
মানুষটাকে যাচাই করা
প্রতিটি কথোপকথনের জন্য একটা 60-অঙ্কের সেফটি নম্বর, আর কলের ভেতরে দেখানো একটা ছয়-অঙ্কের কোড, যেটা আপনাদের একজন পড়ে শোনাবেন। কলের কোডটা শুধু ওই কানেকশন থেকেই হিসেব হয়, তাই প্রতিবার আলাদা।
অ্যাপ লক
Argon2id আর AES-256-GCM দিয়ে মোড়ানো একটা চার-অঙ্কের PIN, পাঁচবার চেষ্টা, ডিভাইসে থাকলে বায়োমেট্রিক, আর নিষ্ক্রিয় থাকলে অটো-লক। PIN খোলে ডিভাইস; অ্যাকাউন্টের মালিক ওই ফ্রেজ।
সেটিংস আর কন্টাক্ট
আপনার রিকভারি ফ্রেজ থেকে তৈরি একটা কি দিয়ে সাইফারটেক্সট হিসেবে সিংক হয় — এমনকি প্রতিটি রেকর্ডের নামও টেক্সট নয়, একটা কি-ভিত্তিক হ্যাশ। সার্ভারে ফিল্ড জমা থাকে না, জমা থাকে অস্বচ্ছ ব্লব।
লাইব্রেরি
Android আর iPhone ব্যবহার করে Signal-এর অফিশিয়াল লাইব্রেরি। ব্রাউজারের জন্য Signal এর কোনো বিল্ডই প্রকাশ করে না, তাই ওয়েব ইঞ্জিন আমরা নিজেরাই Signal-এর নিজস্ব সোর্স থেকে কম্পাইল করি, একটা নির্দিষ্ট ভার্সনে পিন করা — এখানে বিল্ড করানোর জন্য একটা লাইন বদলানো হয়েছে, ক্রিপ্টোগ্রাফিতে কিছুই ছোঁয়া হয়নি।
06

আমরা যা প্রতিশ্রুতি দিই না

প্রতিটি মেসেঞ্জারের প্রথম পাতা বলে, সে কী রক্ষা করে। এই পাতাটা এটাও বলে, সে কী করে না — কারণ যেগুলো আমরা ঠিক করতে পারি না, সেগুলোই আপনার সবচেয়ে বেশি জানা দরকার।

  • কে কার সঙ্গে কথা বলছে, তা আমরা দেখতে পাই

    এন্ড-টু-এন্ড এনক্রিপশন আপনি কী বললেন তা আড়াল করে, বললেন যে — সেই ঘটনাটা নয়। মেসেজ পৌঁছে দিতে হলে সার্ভারকে জানতেই হয় কে সেটা পাচ্ছে আর কখন। সে গ্রুপের সদস্য তালিকাও রাখে, কারণ সেটা ছাড়া সবার কাছে মেসেজ পাঠানো সম্ভব নয়। কে কার সঙ্গে কথা বলে তা আমরা জানি না — এমন দাবি সৎভাবে করা যায় না। যা দাবি করতে পারি তা হলো, কনটেন্ট আমরা কখনও দেখি না, আর সার্ভারের কোড সেটা পার্স করতেই পারে না।

  • পুশ নোটিফিকেশন Google আর Apple-এর কাছে সময়ের তথ্য ফাঁস করে

    Android-এর নোটিফিকেশন যায় Firebase Cloud Messaging দিয়ে আর iPhone-এরটা Apple-এর সার্ভিস দিয়ে। পুশে কোনো টেক্সট থাকে না, প্রেরকও থাকে না — কিন্তু বাহক দেখতে পায় কোন ডিভাইস কখন জেগে উঠল, আর সময়ের মিল মিলিয়ে কে কার সঙ্গে কথা বলছে তা বের করার জন্য এটুকুই যথেষ্ট। যতক্ষণ অন্য কারও সার্ভিস জাগানোর মাধ্যম, ততক্ষণ যোগাযোগ ঘটেছে এই ঘটনা আর তার সময়ের উপর অ্যাকাউন্টের অ্যানোনিমিটি খাটে না।

  • আপনার পুরনো মেসেজ আপনার সঙ্গে প্রায় যায় না

    নতুন ডিভাইসে সাইন ইন করলে আপনার পরিচয়, প্রোফাইল, কন্টাক্ট, ফোল্ডার, চ্যাট লিস্ট, ব্লক আর সেটিংসের একটা অংশ ফিরে আসে — কিন্তু জমে থাকা মেসেজগুলো নয়। যাঁদের সঙ্গে আপনি কথা বলেন তাঁরা তার একটা পাতলা অংশ আবার পাঠান, 30 দিনের বেশি পুরনো নয়, আর ওইটুকুই। আপনার পুরনো মেসেজের কোনো সার্ভার-সাইড ব্যাকআপ নেই — ইচ্ছে করেই নেই।

  • ফ্রেজ হারালে কেউ আপনাকে সাহায্য করতে পারবে না

    সাপোর্ট আপনাকে ফিরিয়ে আনতে পারবে না, কারণ ফিরিয়ে আনার মতো কিছুই আমাদের দিকে নেই — কোনো নম্বর নেই, ঠিকানা নেই, পাসওয়ার্ড হিন্ট নেই। 12টা শব্দই গোটা অ্যাকাউন্ট। এই পাতার বাকি সবকিছুর দাম এটাই, আর আমরা চাই আপনি সাইন আপের পরে নয়, আগেই এটা জেনে নিন।

  • আমরা লগ রাখি, তবে আপনার নয়

    আমরা সার্ভিস চালানোর লগ রাখি, যাতে কোনো মেসেজের কনটেন্ট নেই, সাইফারটেক্সট নেই, কি নেই আর রিকভারি ফ্রেজও নেই। “কোনো লগই রাখি না” বললে সেটা মিথ্যে হতো; “লগে কোনো কনটেন্ট নেই” — এটা সত্যি, আর এই প্রতিশ্রুতিটাই আমরা দিই।

07

কোথায় চলে

একটা ফোনে খোলা গ্রুপ কথোপকথন।একটা ফোনে চলা গ্রুপ কল।ফোনে ইনভাইট স্ক্রিন, যেখানে একটা QR কোড আর অন্যকে দেওয়ার মতো একটা ইনভাইট কোড দেখা যাচ্ছে।
08

মানুষ আসলে যা জিজ্ঞেস করে

খরচ কত?

কিছুই না। কোনো পেইড প্ল্যান নেই, বিজ্ঞাপন নেই, বাড়তি বিক্রির চেষ্টা নেই — সীমা যা আছে তা কারিগরি, যেমন প্রতি ফাইলে 100 MiB আর একটা ফাইলের জন্য 30 দিনের স্টোরেজ। কখনও পেইড প্ল্যান এলে আমরা সেটা আগেই বলব, পরে নয়।

কোড কি সবার জন্য খোলা?

এখনও নয়। ডেভেলপমেন্ট থিতু হলে সেটা প্রকাশ করা হবে। সেই দিন আসার আগে আমরা নিজেদের ওপেন সোর্স বলি না — আপনি দাবিটা যাচাই করতে পারবেন না, আর আমরা আপনাকে বিশ্বাসের ভরসায় থাকতে বলব না। রিপোজিটরি সবার জন্য খুললে তার ঠিকানা ঠিক এখানেই থাকবে।

রিকভারি ফ্রেজ হারিয়ে ফেললে কী হবে?

অ্যাকাউন্টটা চলে গেল। কোনো রিসেট লিংক নেই, সাপোর্টের আপনাকে ফিরিয়ে আনার কোনো উপায়ও নেই — আমাদের হাতে থাকা কোনো রিকভারি পথ অন্য কারও জন্যও ঢোকার পথ হয়ে যেত।

আমাকে কে মেসেজ করতে পারে?

কারও লাগবে আপনার ইউজারনেম, আপনার দেওয়া কোনো ইনভাইট লিংক, বা আপনার QR কোড। একেবারেই খুঁজে পাওয়া যেতে না চাইলে ইউজারনেম নেবেন না। যে কাউকে ব্লক করতে পারেন, আর ব্লক করা কেউ আর আপনার কাছে পৌঁছাতে পারে না।

আমি ঠিক লোকের সঙ্গেই কথা বলছি কি না, যাচাই করা যায়?

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

একাধিক ডিভাইসে ব্যবহার করা যায়?

হ্যাঁ, 10টি পর্যন্ত। প্রতিটি ডিভাইস রিকভারি ফ্রেজ দিয়ে যুক্ত হয়, আর তালিকা থেকে যেকোনোটা আনলিংক করা যায়। কন্টাক্ট, ফোল্ডার, চ্যাট লিস্ট আর সেটিংস এনক্রিপ্টেড অবস্থায় চলে আসে; আপনার জমে থাকা মেসেজ মূলত আসে না।

আপনারা কি আমার প্রোফাইল বানান বা কিছু বিক্রি করেন?

কোনো বিজ্ঞাপন নেই, ডেটা বিক্রিও নেই। এই পাতায় কোনো অ্যানালিটিক্স নেই, কোনো থার্ড-পার্টি স্ক্রিপ্টও নেই — অন্য কারও সার্ভারে একটা রিকোয়েস্টও যায় না।

তৈরি হলে আমাকে জানাবেন

একটাই মেসেজ, যেদিন ইনস্টল করার মতো কিছু থাকবে। কোনো নিউজলেটার নেই, ধারাবাহিক মেইলের ঝাঁক নেই, কোনো থার্ড-পার্টি মেইলিং সার্ভিসও নেই — ঠিকানাটা আমাদের নিজেদের ডেটাবেসেই থাকে, আর কোথাও যায় না।

আমরা কোনো কনফার্মেশন পাঠাই না, তাই একটা টাইপো মানে চুপচাপ কিছুই না আসা। জমা দেওয়ার আগে ঠিকানাটা দেখে নিন।