কীভাবে কাজ করে

কোনো নতুন উদ্ভাবন নেই - শুধু ভালোভাবে যাচাই করা প্রিমিটিভ: BIP-39, X25519, HKDF-SHA256, XChaCha20-Poly1305। এই হলো পুরো পথ, সহজ ভাষায়।

১২টি শব্দই পুরো পরিচয়

প্রোফাইল শুরু হয় একটি BIP-39 সিড ফ্রেজ দিয়ে - ১২টি ইংরেজি শব্দ, যাতে ১২৮ বিট এনট্রপি থাকে। শব্দগুলো প্রসারিত হয়ে একটি সিড তৈরি করে, আর HKDF সেখান থেকে এনক্রিপশনের কী-জোড়া বের করে। যেকোনো ডিভাইসে একই শব্দগুলো একই কী ফিরিয়ে আনে: ফেরত পাওয়ার মতো কোনো “অ্যাকাউন্ট” নেই, আছে শুধু ফ্রেজটি।

ঠিকানাই পাবলিক কী

আপনার X25519 পাবলিক কী, sk প্রিফিক্সসহ bech32-এ এনকোড করা, সেটাই আপনার ঠিকানা - sk1 দিয়ে শুরু হওয়া প্রায় ৬০টি অক্ষর। টেক্সট বা QR কোড হিসেবে দিয়ে দিন। নিবন্ধনের কোনো ডিরেক্টরি নেই, আর নাম ও মানুষ মেলানোর কোনো সার্ভারও নেই।

sk1qsva3e52awafjvedj5ethvc5hs9j4t0ml26m83kn6kycsh9m46rejzha

বার্তা হয়ে ওঠে একটি খাম

টেক্সটটি একটি র‍্যান্ডম মেসেজ কী দিয়ে XChaCha20-Poly1305 ব্যবহার করে একবারই এনক্রিপ্ট হয়। তারপর সেই কী প্রতিটি প্রাপকের জন্য একটি স্লটে মোড়ানো হয় - আর সবসময় আপনার জন্যও একটি বাড়তি স্লটে। এ কারণেই আপনার পাঠানো বার্তাগুলো পড়ার যোগ্য থাকে: ইতিহাস ডিক্রিপ্ট করা আর আসা বার্তা পড়া - একই কাজ।

স্লটগুলো বেনামি ও এলোমেলো করা: খামে কোনো ঠিকানা থাকে না, বাইরের কেউ শুধু আকারগুলোই দেখে। প্রতিটি স্লটের কী ঠিক হয় দুটি X25519 হ্যান্ডশেকে - একটি এই খামের জন্য তৈরি ক্ষণস্থায়ী কী-র সঙ্গে (forward secrecy), অন্যটি প্রেরকের স্থায়ী কী-র সঙ্গে (প্রেরক যাচাই)।

সংস্করণ ১ বাইট প্রেরকের কী ৩২ বাইট ক্ষণস্থায়ী কী ৩২ বাইট স্লট প্রতিটি ৪৮ বাইট nonce ২৪ বাইট সাইফারটেক্সট + ট্যাগ পেলোড
খামের গঠন (সংস্করণ ২)

খাম চলে সাধারণ টেক্সট হিসেবে

বাইনারি খামটি base64-এ মুড়ে একটি আর্মার্ড ব্লক বানানো হয়। এটি স্বয়ংসম্পূর্ণ: মেসেঞ্জার, ইমেইল, ফোরাম পোস্ট বা ফাইলে পেস্ট করুন - টেক্সট পৌঁছে দেয় এমন যেকোনো চ্যানেল Secret Keeper-এর বার্তাও পৌঁছে দেয়।

-----BEGIN SECRET MESSAGE V1-----
AlXhZ0Qq7bfPj…base64…M42kLBi6p4Jro
-----END SECRET MESSAGE V1-----

ফাইল: .skf কনটেইনার

ফাইলও একই স্লট-ব্যবস্থা ব্যবহার করে, তবে মূল অংশটি খণ্ডে খণ্ডে এনক্রিপ্ট হয়, যাতে কয়েক গিগাবাইটের ভিডিও মেমোরিতে না উঠে স্ট্রিম হয়ে যায়। খণ্ডগুলোর nonce STREAM নির্মাণ অনুসরণ করে (age ও Tink-এর মতো): একটি কাউন্টার ক্রম ওলটপালট ও নকল ধরে, আর শেষ বাইট ধরে অসম্পূর্ণ কেটে যাওয়া। এমনকি ফাইলের নামও থাকে এনক্রিপ্টেড হেডারের ভেতরে।

ব্যাকআপ

ব্যাকআপ হলো একটি .skb ফাইল: সেটিংস, পরিচিতি ও ইতিহাস - সবই নিজের কাছে এনক্রিপ্ট করা একটিমাত্র কন্টেইনারে, এনক্রিপ্ট করা ফাইলের মতো একই স্কিমে; বাইরে থেকে কিছুই পড়া যায় না, এমনকি পরিচিতিদের ঠিকানাও নয়। সিড ফ্রেজ কখনোই ব্যাকআপে থাকে না - প্রোফাইল ফিরে আসে ১২টি শব্দ দিয়ে, আর ব্যাকআপ ফিরিয়ে আনে তার চারপাশের সবকিছু।

এতে যা পাওয়া যায়

Forward secrecy
প্রতিটি খামের জন্য নতুন ক্ষণস্থায়ী কী
প্রেরক নিজে পড়তে পারেন
আপনার পাঠানো প্রতিটি খামে আপনার নিজের স্লট
কোনো স্টেট নেই
জোড়ায় জোড়ায় সেশন নেই, সার্ভারে কিছুই জমা থাকে না
কোনো ইউজার আইডি নেই
ঠিকানাই স্বয়ং পাবলিক কী
দুটি বাস্তবায়ন
অ্যাপে Dart, এক্সটেনশনে @noble - অভিন্ন টেস্ট ভেক্টর দিয়ে পরস্পর যাচাই করা

নিজে যাচাই করতে চান?

বাইট-স্তরের পূর্ণাঙ্গ স্পেসিফিকেশন উন্মুক্ত - অ্যাপ ও এক্সটেনশন এই একই নথির বিপরীতে পরীক্ষিত:

প্রোটোকল স্পেসিফিকেশন পড়ুন