Encryption
bae মেঘ-ঘরে যা রাখে সব ডিভাইস ছাড়ার আগে encrypted হয়; encryption ছাড়া কোনো mode নেই। bae নিজের cryptography implement করে না: পুরো scheme coven-এর, আর এই পৃষ্ঠা বর্ণনা করে bae সেটি কীভাবে ব্যবহার করে।
কীগুলো
এই অংশের লিঙ্ক| কী | কী করে |
|---|---|
| store কী | লাইব্রেরি ও তার সদস্যপদের record encrypt করে |
| প্রত্যেক মানুষের circle কী | সেই মানুষ যা ব্যক্তিগত রাখেন তা encrypt করে: তাঁর ব্যক্তিগত শোনার ইতিহাস ও প্লেলিস্ট |
| প্রতিটি ফাইলের কী | একটি ফাইল encrypt করে, এবং শুধু তার সারির encrypted পরিবর্তনের ভেতরে চলে |
| একজন মানুষের স্বাক্ষর কী-জোড়া | তাঁর ডিভাইসগুলো যে প্রতিটি পরিবর্তন পাঠায় তাতে স্বাক্ষর করে |
| একজন মানুষের sealing কী-জোড়া | সেই মানুষের জন্য sealed কী খোলে |
store কী এলোমেলো, লাইব্রেরি মেঘ-ঘর পেলে তৈরি হয়। একজন মানুষের কী-জোড়া তাঁর সব ডিভাইস ভাগ করে। ব্যক্তিগত কী এবং লাইব্রেরির কী OS keyring-এ থাকে, কখনও ফাইল বা ডেটাবেসে নয়। সেগুলো দুইভাবে ডিভাইসে পৌঁছায়, দুটিই পরিচয় এবং সদস্যপদ-এ বর্ণিত: রিস্টোর কোড মানুষটির নিজের কী-জোড়া বহন করে, আর আমন্ত্রণ অনুমোদনকারী অ্যাডমিন store কী নতুন মানুষের sealing কী-র জন্য seal করেন।
কোনো কী কখনও জায়গাতেই বদলানো হয় না; নতুন একটি যোগ হয়। কাউকে সরানোর পরে, থেকে যাওয়া কোনো সদস্যের ডিভাইস সেখানে আরও ডেটা লেখার আগে একটি নতুন store কী যোগ করে, এবং তিনি যে প্রতিটি circle-এ ছিলেন তার জন্য একটি নতুন কী: এরপর লেখা সব তাঁর কাছে অপাঠ্য, আর বাকি সদস্যরা প্রতিটি পুরোনো কী রাখেন এবং পুরো ইতিহাস পড়তে পারেন। একটি ডিভাইস সরালে কিছুই বদলায় না, কারণ মানুষটির অন্য ডিভাইস তার কী ভাগ করে; সরানোর পর থেকে সেই ডিভাইস যা পাঠায় তা গণ্য হয় না।
কী sealed হয়
এই অংশের লিঙ্কঘরের প্রতিটি object: পরিবর্তন, snapshot, সদস্যপদের record এবং ফাইল। বিষয়বস্তু XChaCha20-Poly1305 দিয়ে encrypt হয়, প্রতিটি পরিবর্তন Ed25519 দিয়ে স্বাক্ষরিত হয়, আর কী মানুষের জন্য X25519 sealed box দিয়ে seal হয়। ফাইল 64 KiB chunk-এ encrypt হয়, প্রতিটি আলাদাভাবে প্রমাণিত এবং নিজের অবস্থানের সঙ্গে বাঁধা, তাই কোনো chunk ধরা না পড়ে বদলানো, অদলবদল বা পুনর্বিন্যাস করা যায় না। Chunking-এর কারণেই streaming কাজ করে: player ঠিক যে chunk আনে সেগুলোই decrypt করতে পারে।
Provider কী দেখতে পারে
এই অংশের লিঙ্কObject-এর সংখ্যা, object-এর মাপ, আপলোডের সময়, কোন অ্যাকাউন্ট প্রতিটি object লেখে, এবং কোন ডিভাইস প্রতিটি ফাইল ও snapshot আপলোড করেছে, কারণ তাদের path-এ ডিভাইসের নাম থাকে। নাম নয়, মেটাডেটা নয়, অডিও নয়, চিত্র নয়। ফাইল এলোমেলো নামের নিচে থাকে, কখনও তার বিষয়বস্তুর hash-এর নিচে নয়। Server-side recovery নেই: প্রত্যেকে যদি প্রতিটি ডিভাইস ও প্রতিটি রিস্টোর কোড হারান, লাইব্রেরি হারিয়ে যায়; এটাই design-এর উদ্দেশ্য।
keyring-এর ভূমিকা
এই অংশের লিঙ্কলাইব্রেরি খুললে OS keyring থেকে তার কী পড়া হয়। যে keyring এই মুহূর্তে লক, লক করা সেশন বা ঘুমন্ত স্ক্রিনের কারণে, তাকে নষ্ট keyring থেকে আলাদা করা হয়: bae লাইব্রেরিকে লক হিসেবে দেখায় এবং আনলকের পরে আবার চেষ্টা করে, লাইব্রেরি অকেজো বলে জানানোর বদলে। কোনো ডিভাইস কী ভুলেও যেতে পারে, তাতে সেই ডিভাইসে লাইব্রেরি আবার আনলক না হওয়া পর্যন্ত লক থাকে।