তথ্য লুকানোর নিরাপদ উপায়
মোটামুটি সেই প্রাচীনকাল থেকে যত সাইফার এখন পর্যন্ত আমাদের আলোচনায় উঠে এসেছে, সবগুলোর ক্ষেত্রেই একটা সাধারণ সমস্যা সব সময়ই থেকে গেছে। সেটা হলো ফিঙ্গারপ্রিন্ট। যত যাই করা হোক না কেন, সাইফারে এই দুর্বলতার কারণে ইনফরমেশন লিক হবেই, আর সেটা ধরে ঘাঁটাঘাঁটি করতে থাকলে একটা সময় মূল বক্তব্য উদ্ধার করে ফেলা যাবে।
কীভাবে একটা সাইফারের ফিঙ্গারপ্রিন্টকে প্রায় মুছে ফেলা যায়? ধরা যাক, চিঠিটাতে নীতু ইয়া বড় একটা শিফটিং ব্যবহার করেছে আর সেটা পুরোপুরি নিরপেক্ষ (Unbiased)। আপনার মনে হতে পারে, এটা কী রকম? নীতু কি তাহলে ইচ্ছামতো যা খুশি সংখ্যা ধরে নেবে?
ধরলাম, নীতু ১ থেকে ২৬ পর্যন্ত সংখ্যাগুলো থেকে নিজের ইচ্ছামতো একটার পর একটা সংখ্যা লিখে গেল, পরপর প্রায় ১০০টি সংখ্যা। এবার এই বিশাল সংখ্যার তালিকা ধরে সে যদি তার চিঠিতে এনক্রিপ্ট করে, তাহলে দেখা যাবে, মূল চিঠি উদ্ধার করা বেশ কঠিন হয়ে যাচ্ছে। তবে এই কাজটা আরও ভালো করে করা যাবে, যদি নীতু নিজে এই কাজটি না করে অন্য কোনো উপায়ে তার শিফটিংয়ের সংখ্যাগুলো পেয়ে যায়, যেটা আরও বেশি নিরপেক্ষ।
আমাদের কেউই কিন্তু পুরোপুরি নিরপেক্ষ চিন্তা করি না। আপনাকে যদি একটা সংখ্যা চিন্তা করতে বলা হয়, কত চিন্তা করবেন? হয়তো ৭ বা ১১? অথবা ৯? যা-ই হোক না কেন, আপনার মনের চিন্তাটা যেহেতু প্রভাবিত, যদি পরপর ১০০ বা আরও বেশি সংখ্যা লিখতে বলা হয় আপনাকে, সেগুলো প্রত্যেকেই ১ থেকে ২৬-এর মধ্যে আছে, দেখা যাবে কিছু বিশেষ সংখ্যার অনেক বেশিবার পুনরাবৃত্তি হয়েছে। এটা খুবই স্বাভাবিক একটা বিষয়। আমাদের চিন্তাভাবনা যেহেতু পুরোপুরি নিরপেক্ষ নয়, কাজেই আমাদের শিফটিং স্ট্রিং সুষম (Uniform) হবে না, এটা ধরেই নেওয়া যায়। এই ঝামেলা থেকে মুক্তির উপায় কী? খুব সহজ, নিরপেক্ষ কোনো কিছু থেকে এই সংখ্যাগুলো বাছাই (Sampling) করা।
আমরা সবাই কমবেশি লুডু তো খেলেছি। একটা লুডু খেলায় ছক্কাটি নিরপেক্ষভাবে ঠিকঠাক মতো বানানো হলে দেখা যাবে অনেক বেশি সংখ্যকবার ছক্কা নিক্ষেপ করলে প্রতিটি ফলাফল (Outcome) মোটামুটি সমান সংখ্যকবার এসেছে। এটি একদমই সাধারণ সম্ভাব্যতার বিষয়। আরও মজার ব্যাপার হলো, লুডু খেলার সময় ছক্কা নিক্ষেপ করলে কোনবার কী আসবে, তা কোনোভাবেই অনুমান করা সম্ভব নয়। ছক্কা নিক্ষেপের ফলাফল অন্য যেকোনো কিছুর থেকে পুরোপুরি প্রভাবমুক্ত!
তাহলে চিন্তা করুন, ছক্কাতে তো মাত্র ছয়টা সংখ্যা লেখা থাকে ছয় পাশে। আমাদের হাতে যদি এমন একটা ছক্কা থাকত, যেটির মোট ২৬টি তল (Face) রয়েছে, তাতে ১ থেকে ২৬ পর্যন্ত সব সংখ্যা লেখা। তাহলে আমরা ২৬ রকমের ভিন্ন ভিন্ন ফল পেতাম এবং এই ফলগুলো হতো পুরোপুরি নিরপেক্ষ। কার পর কে আসবে বা ফলাফল কী হতে পারে, কোনোভাবেই অনুমান করা সম্ভব নয়। এ রকম একটা ছক্কা যদি পরপর ১০০ বার নিক্ষেপ করা হয়, তাহলে বিশাল একটা সংখ্যার স্ট্রিং (String) পাওয়া যাবে। এটা আমরা শিফটিংয়ের জন্য ব্যবহার করতে পারি। কীভাবে? খুব সোজা, প্রথমত এই শিফটিং স্ট্রিংয়ের দৈর্ঘ্য যত খুশি বড় করা যাবে, যত খুশি ছোট করা যাবে নিজের মতো করে। এরপর যেহেতু এটির ফলাফল কোনো ব্যক্তির ওপর নির্ভরশীল নয়, কাজেই কোনোভাবেই এটার ফলাফল অনুমান করা সম্ভব নয়। এ ছাড়া যেহেতু সবগুলো ফলাফলই নিরপেক্ষ, এ ক্ষেত্রে প্রাপ্ত শিফটিং স্ট্রিংয়ের ফলে মেসেজের এনক্রিপশন করা হলে দেখা যাবে, এতে প্রায় সবগুলো অক্ষরই সমানভাবে পুনরাবৃত্তি করবে। অর্থাৎ ফ্রিকোয়েন্সি অ্যানালাইসিস করেও কোনো লাভ হবে না এই মেসেজে। সবগুলো বর্ণই ব্যবহৃত হয়েছে শিফটে এবং নিরপেক্ষভাবে। কাজেই এনক্রিপ্ট করা হলে দেখা যাবে, এনক্রিপ্টেড চিঠির অক্ষরগুলোর ফ্রিকোয়েন্সি প্রায় সুষম ও এ থেকে তথ্য পাচারের (Information Leak) সম্ভাবনা প্রায় থাকে না বললেই চলে। অর্থাৎ সবগুলো অক্ষরের ফ্রিকোয়েন্সি সমান থাকবে। তবে একই সঙ্গে এটাও মাথায় রাখতে হবে, শিফটিংয়ের জন্য যে স্ট্রিং আমরা ব্যবহার করি, সেটা যাতে নিরপেক্ষ ও সুষম থাকে। তাহলে এই পদ্ধতিতে এনক্রিপশনের মধ্যে আমার না থাকছে পুনরাবৃত্তিক শিফটিং অর্থাৎ কোনোভাবেই পরবর্তী শিফটিংয়ের প্রকৃতি অনুমান করা সম্ভব নয়। বিশালসংখ্যক উপাত্ত নিলে দেখা যাবে এনক্রিপ্টেড মেসেজের সব অক্ষরের ফ্রিকোয়েন্সি হবে সমান।
এতক্ষণ আমরা যে তথ্য পাচারের কথা বলে যাচ্ছি, যে সমস্যা আমাদের সব এনক্রিপশনকে দুর্বল করে ফেলছিল, আমাদের সেই সমস্যার সমাধান হয়ে গেল।
এই যে একাধিক স্ট্রিংয়ের ব্যবহারের মাধ্যমে এনক্রিপশন, এই পদ্ধতিকে বলা হয় ওয়ান টাইম প্যাড (One Time Pad) পদ্ধতি। মোটামুটিভাবে আমরা যত রকমের এনক্রিপশন দেখি, ব্যবহার করি, তার মধ্যে এটি সবচেয়ে শক্তিশালী। এই ধারণার প্রথম প্রায়োগিক ফলাফল দেখা যায় ঊনবিংশ শতাব্দীর শেষ ভাগে। কেন এই এনক্রিপশন এত শক্তিশালী? বা এটা ভাঙা কেন অনেক বেশি কঠিন? আসুন, আমরা এর পেছনের গাণিতিক ব্যাখ্যাটা একটু দেখে নিই।
সিজার সাইফারে মূলত শিফটিং করা হতো প্রতিটি অক্ষরকেই একই সংখ্যা দ্বারা, সবগুলো অক্ষর নির্দিষ্ট দূরত্বে শিফট করে। মূল মেসেজ উদ্ধার করতে হলে আমাদের সর্বোচ্চ ২৬ বার চেষ্টা করলেই যথেষ্ট। আর কপাল ভালো হলে এর আগেই মূল অর্থ উদ্ধার হয়ে যেতে পারে। কিন্তু ওয়ান টাইম প্যাডের শিফটিং প্রতিটি অক্ষরভেদে ভিন্ন। ধরা যাক, আমরা BANGLADESH-এর এনক্রিপশন করতে চাই। এ ক্ষেত্রে মোট বর্ণ ১০টি। প্রতিটি অক্ষরের জন্য শিফটিং ১-২৬-এর মাঝে যেকোনো কিছুই হতে পারে। কাজেই সমাবেশের ধারণা ব্যবহার করে আমরা যদি মোট সম্ভাব্য ফলাফল হিসাব করি, সংখ্যাটি দাঁড়াবে ২৬১০ বা 1.4×1014 এর চেয়েও বেশি। এই সংখ্যাটা কত বড় ধারণা করতে পারেন?
আমি একটু ধারণা দেওয়ার চেষ্টা করি, আপনি যদি সাধারণ এ-ফোর কাগজে করে সবগুলো সম্ভাব্য অপশন লেখা শুরু করেন, একটি কাগজে একটি করে সম্ভাব্য ফলাফল এবং সেগুলো একটির ওপর একটি রেখে স্ট্যাক পাইলিং করতে থাকেন, তাহলে যে কাগজের স্তম্ভটা পাওয়া যাবে, সেটার পুরুত্ব হবে পৃথিবী থেকে সূর্যের দূরত্বের ১২ ভাগের ১ ভাগ। একবার ভাবুন তো, আপনাকে এ রকম একটা বিশাল কাগজের স্তম্ভের সামনে দাঁড় করিয়ে দিয়ে প্রতিটি কাগজ পরীক্ষা করতে বলা হলো, এর মধ্যে মাত্র একটি হচ্ছে সমাধান? হতবুদ্ধির মতো দাঁড়িয়ে থাকা ছাড়া আপনার আর কী করার আছে?
মোটামুটিভাবে বলা যায়, এটার মর্মোদ্ধার করা সম্ভব, এই পরিমাণ বিশাল তথ্য নিয়ে প্রতিটির শুদ্ধতা যাচাই করে দেখাটা বাস্তবসম্মত নয় কোনোভাবেই। কাজেই বিশুদ্ধ গোপনীয়তা বজায় রাখতে চাইলে এটাই সর্বোত্তম পন্থা। ওয়ান টাইম প্যাড হচ্ছে আমাদের সেই গোপনীয়তা বজায় রাখার জন্য সবচেয়ে শক্তিশালী অস্ত্র।