কেন একটি কালো বক্স যথেষ্ট নয়

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

ডেভেলপার যে সমস্যার সম্মুখীন হয়েছিলেন

লেখকের এমন একটি PDF এডিটর প্রয়োজন ছিল যা সার্ভারে ফাইল আপলোড না করেই সম্পূর্ণভাবে ব্রাউজারে চলবে। এই সীমাবদ্ধতার কারণে টেক্সট মুছে ফেলার জন্য কোনো ব্যাক-এন্ড সার্ভিসের ওপর নির্ভর করা অসম্ভব হয়ে পড়ে। বিদ্যমান ক্লায়েন্ট-সাইড সমাধানগুলো কেবল কন্টেন্টের ওপর একটি শেপ (shape) যোগ করে, যা মূল টেক্সটকে অক্ষত রাখে। চ্যালেঞ্জটি ছিল অপারেশনটি দ্রুত রেখে এবং ডকুমেন্টটি ব্যবহারযোগ্য রেখে টেক্সটটিকে স্থায়ীভাবে মুছে ফেলা।

সিলেক্টিভ পেজ রাস্টারাইজেশন: মূল ধারণা

পুরো PDF-কে একটি ছবিতে রূপান্তর করার পরিবর্তে—যে পদক্ষেপটি ফাইলের আকার বাড়িয়ে দেবে এবং সার্চ করার ক্ষমতা নষ্ট করে দেবে—এই সমাধানটি শুধুমাত্র সেই পৃষ্ঠাগুলোকে রাস্টারাইজ করে যেগুলোতে রেডাকশন (redaction) রয়েছে। সেই পৃষ্ঠাগুলো বিটম্যাপে (bitmap) পরিণত হয়; অন্য প্রতিটি পৃষ্ঠা ভেক্টর PDF হিসেবেই থাকে, যা টেক্সট সিলেকশন, সার্চ এবং ছোট ফাইল সাইজ বজায় রাখে।

এই পদ্ধতিটি এমন একটি ডকুমেন্ট তৈরি করে যা দেখতে স্বাভাবিক মনে হয়: ১৯টি পৃষ্ঠা স্পষ্ট এবং সার্চযোগ্য থাকে, যেখানে একটি সংবেদনশীল পৃষ্ঠাটি কেবল একটি পিক্সেল-ভিত্তিক ইমেজ হিসেবে থাকে যেখানে লুকানো তথ্য আর থাকে না।

নির্ভরযোগ্য কনভার্সনের জন্য তিনটি ব্যবহারিক নিয়ম

  1. তিন গুণ স্কেলে রেন্ডার করা – বিটম্যাপটি পৃষ্ঠার স্বাভাবিক রেজোলিউশনের তিন গুণ স্কেলে তৈরি করা হয়। আশেপাশের ভেক্টর পৃষ্ঠাগুলোর পাশে একটি লো-রেজোলিউশন রেন্ডার ঝাপসা দেখায়, যা সন্দেহ তৈরি করতে পারে বা দেখতে অপেশাদার মনে হতে পারে।
  2. সমস্ত ভিজ্যুয়াল এলিমেন্টকে বিটম্যাপে মার্জ করা – পৃষ্ঠাটি রাস্টারাইজ করার আগে অ্যানোটেশন (annotations), স্বাক্ষর, ওয়াটারমার্ক এবং রেডাকশন আয়তক্ষেত্রকে একত্রে কম্পোজিট করা হয়। একই পৃষ্ঠায় ভেক্টর অ্যানোটেশনের সাথে রাস্টার ইমেজ মেশালে PDF রিডার বিভ্রান্ত হতে পারে, যার ফলে ডিসপ্লে ত্রুটি দেখা দিতে পারে।
  3. পিক্সেলের পরিবর্তে ভিউপোর্টে অ্যাঙ্কর করা – অ্যানোটেশনগুলো পৃষ্ঠার ভিউপোর্ট কোঅর্ডিনেটের (viewport coordinates) সাথে যুক্ত থাকে। যখন একজন ব্যবহারকারী জুম করেন, তখন এলিমেন্টগুলো এলোমেলোভাবে সরে যাওয়া বা অসামঞ্জস্যপূর্ণভাবে স্কেল হওয়ার পরিবর্তে সঠিক অবস্থানে থাকে, যা অন্যথায় নিচের টেক্সটটিকে প্রকাশ করে দিতে পারত।

রেস কন্ডিশন (race conditions) থেকে সুরক্ষা

প্রতিটি পৃষ্ঠা রেন্ডার করা একটি অ্যাসিনক্রোনাস (asynchronous) কাজ। যদি একজন ব্যবহারকারী দ্রুত ব্রাউজার উইন্ডো রিসাইজ করেন, তবে একাধিক রেন্ডার জব ওভারল্যাপ হতে পারে, যা ক্যানভাসে ভাঙা বা ওভারল্যাপিং ফ্রেম তৈরি করতে পারে। এই ইমপ্লিমেন্টেশনে প্রতিটি পৃষ্ঠার জন্য একটি রেন্ডার টোকেন ব্যবহার করা হয়েছে: প্রতিটি নতুন রেন্ডার রিকোয়েস্ট আগের টোকেনটিকে ইনভ্যালিড করে দেয়, যার ফলে পুরনো কাজটি স্বয়ংক্রিয়ভাবে বাতিল হয়ে যায়। এর ফলে দ্রুত UI পরিবর্তনের মধ্যেও একটি মসৃণ এবং গ্লিচ-মুক্ত অভিজ্ঞতা পাওয়া যায়।

ট্রেড-অফগুলো কেমন হয়

একটি পৃষ্ঠাকে বিটম্যাপে রূপান্তর করলে যেকোনো লুকানো টেক্সট মুছে যায়, তবে এটি সেই পৃষ্ঠার কন্টেন্ট সার্চ বা কপি করার ক্ষমতাও নষ্ট করে দেয়।

এর পরবর্তী ধাপ কী হতে পারে

সারসংক্ষেপ

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