in ,

অটোকী সাইফার- গোপন বার্তা আদান-প্রদান এবং ‘কী’ না জেনেও তা ভাঙ্গার কৌশল

আজ থেকে প্রায় পাঁচশ বছর আগেকার কথা। ইতালীয় আইনজ্ঞ ফাজিও কার্দানো ও চিয়ারা মিচেরির ভালোবাসার ফলস্বরুপ ১৫০১ সালের ২৪ সেপ্টেম্বর পৃথিবীর অধিবাসীদের তালিকায় নাম যোগ হয় এক ছেলের, বাবার নামের সাথে মিলিয়ে যার নাম রাখা হয় জিরোলামো কার্দানো। কিন্তু দুঃখজনক ব্যাপার হলো, জিরোলামো তার বাবা-মায়ের বৈধ সন্তান ছিল না। জন্মগত এ অবৈধতা তার বাকি জীবনের বিভিন্ন ক্ষেত্রেও বিরুপ প্রভাব ফেলেছে বিভিন্নভাবে।

মানুষের ভেতরে যদি আসলেই কোনো গুণ থাকে তাহলে একদিন যে তা ঠিকই প্রকাশ পায়, মানুষের জন্ম নয় বরং কর্মই যে অমর করে রাখে, বাকি জীবন জুড়ে এ কথাগুলোর বাস্তব প্রমাণই দিয়ে গেছেন জিরোলামো কার্দানো।

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

অনাগত ভবিষ্যতের বুকে নিজের নামটি খোঁদাই করে রাখতে মানুষের প্রচেষ্টার কোনো অন্ত নেই। জিরোলামো কার্দানোও ছিলেন এমনই একজন। জীবদ্দশায় মোট ২৪২ টি বই লিখেছিলেন তিনি! এর মাঝে ১৩১ টি বই তাঁর জীবিত অবস্থাতেই প্রকাশিত হয়। বাকি ১১১ টি পান্ডুলিপিতেই সীমাবদ্ধ ছিল। দুই শতাধিক বইয়ে তিনি কী নিয়ে আলোচনা করেছিলেন তা জিজ্ঞেস না করে বরং কী নিয়ে আলোচনা করেননি তা জিজ্ঞেস করাই বুদ্ধিমানের কাজ হবে।

গণিত, জ্যোতির্বিজ্ঞান, জ্যোতিষশাস্ত্র, দাবা, পদার্থবিজ্ঞান, জুয়া, আত্মার অমরত্ম, সক্রেটিসের ভাবধারা, রত্ন, বিষ, বাতাস, পানি, পুষ্টিবিদ্যা, স্বপ্ন, মূত্র, দাঁত, সঙ্গীত, নীতিশাস্ত্র ইত্যাদি বহুবিধ বিষয় নিয়ে লেখালেখি করেছেন তিনি।

মজার ব্যাপার হলো, আমাদের আজকের আলোচ্য ক্রিপ্টোলজির অটোকী সাইফার (Autokey Cipher) নিয়ে কিন্তু কার্দানোর আলাদা কোনো বই নেই। তার সর্বাধিক বিক্রিত দুটি বিজ্ঞান বিষয়ক বইয়ে তিনি ক্রিপ্টোলজি সম্বন্ধে অল্প বিস্তর আলোচনা করেছিলেন অবশ্য।

এর মাঝে প্রথমটি ছিল De Subtilitate। এ বইটি প্রকাশিত হয়েছিল ১৫৫০ সালে। বিজ্ঞানের বিভিন্ন বিষয়ে কার্দানোর চমৎকার উপস্থাপনা পাঠক সমাজকে সহজেই আকৃষ্ট করতে পেরেছিল। বইটির সাফল্যে উদ্বুদ্ধ হয়ে তাই ছয় বছর পর তিনি বের করেন এর দ্বিতীয় খন্ড- De Rerum Varietate। বিপুল জনপ্রিয়তার ফলে দুটি বই-ই বিভিন্ন ভাষায় অনূদিত হয় এবং নকল হয়ে ছড়িয়ে পড়ে গোটা ইউরোপ জুড়ে।

অটোকী সাইফারকে অটোক্লেভ (Autoclave) সাইফারও বলা হয়ে থাকে। এ সাইফারে Key বানানো হয় Plain Text এর উপর ভিত্তি করে অর্থাৎ অনেকটা স্বয়ংক্রিয়ভাবেই চলতে থাকে এর Key। এজন্য Key-এর আগে Auto বসিয়ে সাইফারটির নাম হয়েছে Autokey সাইফার। এ সাইফারের সাহায্যে কোনো মেসেজকে এনক্রিপ্ট করতে আমাদের দরকার একটি টেবুলা রেক্টা (Tabula Recta) টেবিল।

এনক্রিপশন

ধরা যাক, আমরা যে মেসেজটি এনক্রিপ্ট করবো সেটি হলো- “To be prepared is half the victory”। এটি মিগুয়েল ডি সার্ভেন্টেসের উক্তি। ধরে নিই, আমাদের Key হলো Miguel। যেহেতু অটোকী সাইফারে আমাদের দরকার Keystream, তাই Plain Text এর সাথে Keystream-কে সাজাতে হবে নিচের মতো করেঃ

ভালো করে একবার Keystream সাজানোর পদ্ধতিটি দেখুন। প্রথমে আমি Key Miguel লিখেছি। এরপর থেকে Plain Text এর মেসেজটিই হুবহু লিখে গিয়েছি। এভাবে Plain Text এর শেষ পর্যন্ত Keystream লিখে যেতে হবে। এখানে Key নিজে বারবার না এসে Plain Text-ই Keystream এ রূপান্তরিত হয়ে যাচ্ছে।

এবার আসা যাক দ্বিতীয় ধাপে। এখন আমাদের টেবুলা রেক্টার সাহায্য লাগবে। পাশের চিত্র দ্রষ্টব্য। আমরা প্রথম যে বর্ণটি এনক্রিপ্ট করবো তা হলো ‘t’। তাহলে টেবুলা রেক্টার একেবারে উপরের সারি থেকে (গাঢ় কাল অক্ষর) প্রথমেই t এর নিচে থাকা Keystream ‘m’ কে খুঁজে বের করতে হবে। তারপর একেবারে বামের কলাম থেকে (গাঢ় কালো অক্ষর) Plaintext ‘t’ কে খুঁজতে হবে।

m ও t থেকে যদি আমরা যথাক্রমে উপর থেকে নিচে এবং বাম থেকে ডানে এগোই তাহলে তারা পরস্পরকে F এ ছেদ করবে। অর্থাৎ F হলো t এর এনক্রিপ্ট করা রূপ।

এবার আসা যাক Plaintext এর ২য় বর্ণ ‘o’তে। এর নিচে থাকা Keystream হলো ‘i’। এবারও আগের মতোই টেবুলা রেক্টার সবার উপরের সারি থেকে i এবং একেবারে বামপাশের কলাম থেকে o-কে খুঁজে বের করতে হবে। তারপর I থেকে নিচে এবং o থেকে ডানে এগোতে থাকলে একসময় তারা পরস্পরকে W-এ ছেদ করবে। অর্থাৎ W হলো o এর এনক্রিপ্ট করা রূপ।

এভাবে Plain Text এর বাকি বর্ণগুলোকেও টেবুলা রেক্টা ও Keystream এর সাহায্যে এনক্রিপ্ট করা যাবে। পুরো মেসেজটি এনক্রিপ্ট করলে তাহলে আমরা পাচ্ছিঃ

ডিক্রিপশন

ধরা যাক, আমাদের কাছে এনক্রিপ্ট করা একটি মেসেজ এসেছে যেখানে লেখা আছে- BIOXJZA BG FSZK”। প্রেরক আমাদের জানিয়েছে, এ মেসেজের Key হলো ‘Game’। এবার মেসেজটি ডিক্রিপ্ট করে মূল মেসেজ বের করাই আমাদের লক্ষ্য। প্রথমেই তাহলে আগের মতো করে একটি টেবিলে Keystream ও Cipher Text সাজিয়ে নেয়া যাক। যেহেতু আমরা Keystream-এর কেবল ‘game’ অংশটুকু জানি, তাই বাকি ঘরগুলো ফাঁকা রাখতে হবে।

এখন আবারো যেতে হবে টেবুলা রেক্টার কাছে। Cipher Text এ আমাদের প্রথম বর্ণ ‘B’। অন্যদিকে Keystream-এ প্রথম বর্ণ ‘g’। টেবুলা রেক্টার একেবারে উপরের সারি থেকে প্রথমে তাই g-কে খুঁজে বের করতে হবে। এরপর g-এর কলাম ধরে নিচে নামতে হবে যতক্ষণ না B-কে পাওয়া যাচ্ছে ততক্ষণ। B পাওয়া গেলে এরপর সেখান থেকে একেবারে বামের কলামে যে বর্ণটি আমরা পাবো সেটিই হবে B এর ডিক্রিপ্ট করা বর্ণ। এক্ষেত্রে এটি V। নিচের চিত্রে পুরো ব্যাপারটি দেখানো হয়েছে।

যেহেতু আমরা Plain Text এর একটি বর্ণ পেয়েছি তাই টেবিলকে নিচের মতো করে আপডেট করে নিতে হবে। এনক্রিপশনের সময় আমরা দেখেছিলাম, Keystream এ Key এর পর থেকেই Plain Text শুরু হচ্ছে। এবারও তাই ‘game’ এর পরই এসেছে ‘V’।

এবার আসা যাক Cipher Text এর দ্বিতীয় বর্ণ I এর কাছে। এক্ষেত্রে Keystream হলো ‘a’। তাহলে আগের মতো করেই প্রথমে টেবুলা রেক্টার উপরের সারি থেকে ‘a’ খুঁজে সেখান থেকে নিচে নেমে ‘I’ কে বের করতে হবে। I থেকে একেবারে বামের কলামে গেলে আমরা পাবো এর ডিক্রিপ্ট করা রূপ। এক্ষেত্রে সেটি ‘I’।

আবারো আগের মতো করে টেবিলকে নিচের মতো করে আপডেট করতে হবেঃ

এভাবে Cipher Text এর বাকি বর্ণগুলোকেও Keystream আর টেবুলা রেক্টার সাহায্যে ডিক্রিপ্ট করলে আমরা মূল মেসেজটি পেয়ে যাবো।

গল্প করতে করতে কখন যে আপনাকে একজন পলিম্যাথের আবিষ্কার করা একটি সাইফার সিস্টেম শিখে নিলাম তা নিজেও খেয়াল করিনি! তবে ঠান্ডা মাথায় পুরো পদ্ধতিটুকু যদি আপনি পড়ে থাকেন, তাহলে নিঃসন্দেহে মাথা খাটানোর অনেক কিছুই আছে এখানে।

দুর্গে ফাটল

এতক্ষণ ধরে অটোকী সাইফার নিয়ে পড়ার পর যে কেউই মেনে নিতে বাধ্য যে এ সাইফারটি বেশ সুরক্ষিত। কিন্তু সুরক্ষিত এ দুর্গের কি কোনো ফাটল নেই? অবশ্যই আছে। এবার সেই ফাটলেই সাথেই পরিচিত হওয়া যাক।

অটোকী সাইফারের Keystream বানানো হয় Plain Text কে ব্যবহার করে। Plain Text এ কোনো বহুল ব্যবহৃত শব্দ আসতেই পারে; যেমন- AND, THE ইত্যাদি। এ শব্দগুলোকে ক্লু হিসেবে ব্যবহার করেই পুরো অটোকী সিস্টেমকে ডিক্রিপ্ট করা সম্ভব।

ধরে নিচ্ছি, আমাদের কাছে একটি একটি মেসেজ এসেছে যাতে লেখা আছে PKBNEOAMMHGLRXTRSGUEWX। আমাদেরকে এটাও বলে দেয়া হয়েছে যে, এখানে অটোকী সাইফার ব্যবহার করা হয়েছে। কিন্তু Key জানা না থাকায় আমরা Plain Text পর্যন্ত যেতে পারছি না। কাজে এগোনোর স্বার্থে ধরে নিই, Plain Text এ ‘THE’ শব্দটি অন্তত একবার হলেও এসেছে। তাহলে ‘THE’ Keystream-এও এসেছে ধরে নিয়ে এগোনো যাক।

Keystream এর প্রতিটি ঘরে THE বসালে আমাদের হাতে থাকে Keystream ও Cipher Text। তখন একটু আগেই আলোচনা করা ডিক্রিপশনের নিয়মটি অনুসরণ করলে আমরা নিচের টেবিলটি পাবোঃ

Keystream এ THE এর অবস্থান সামনে-পেছনে নিয়ে আমরা নিচের আরো দু’ধরনের বিন্যাস পেতে পারি।

এখন এ তিনটি টেবিল ভালো করে পর্যবেক্ষণ করা যাক। আমরা মূলত এখন ঘোরাঘুরি করবো Plain Text এর ঘরগুলোতে। সেখানে কোনো অর্থপূর্ণ শব্দাংশ খুঁজে বের করাই আমাদের লক্ষ্য।

যেমন- ২য় টেবিলের ‘ihw’ কিংবা ৩য় টেবিলের ‘skt’ একেবারেই নিরর্থক। কিন্তু ৩য় টেবিলেরই ‘tac’ কিংবা ‘ako’ এর কোনো শব্দাংশ হবার সম্ভাবনাকে একেবারে নাকচ করে দেয়া যায় না। আমরা তাই ‘tac’ নিয়ে এগোবো। যেহেতু অটোকী সাইফারে একই জিনিস Plain Text ও Keystream এ থাকে, তাই আমাদের আলোচ্য THE ও tac এ দু’জায়গায়ই আছে বলে ধরে নিচ্ছি।

প্রথমে মনে করি, আমাদের অজানা Key এর দৈর্ঘ্য ৪ অর্থাৎ এটি ৪টি বর্ণের সমন্বয়ে গঠিত। তাহলে Plain Text এ থাকা the এর t থেকে Keystream এর THE এর T ৪ বর্ণ পরিমাণ দূরে থাকবে। একই কথা বলা যাবে tac এর ক্ষেত্রেও।

Plain Text ও Keystream এর ঘরগুলো যথাক্রমে ‘the’, ‘tac’, ‘THE’ ও ‘TAC’ দিয়ে পূরণ করার পর যে ঘরগুলো বাকি থাকবে সেগুলোকে পূর্বে আলোচনা করা এনক্রিপশন-ডিক্রিপশনের পদ্ধতিতে টেবুলা রেক্টার সাহায্যে ভরাট করতে হবে। যে ঘরগুলো এভাবে ভরাট করতে হবে, পরবর্তী টেবিলে সেগুলো ডিম্বাকৃতির বক্সের মাধ্যমে দেখানো হয়েছে।

এখান থেকে পাওয়া ‘yxr’ Plain Text শব্দাংশ হিসেবে গ্রহণযোগ্য না। তাই নিচের টেবিল দুটোতে যথাক্রমে ৫ ও ৬ বর্ণবিশিষ্ট Key ধরে এগোনো হয়েছে। এ টেবিল দুটোতেও যে ঘরগুলো ফাঁকা থাকবে তা টেবুলা রেক্টা দিয়ে পূরণ করতে হবে।

উপরের টেবিল দুটি থেকেও আমরা কোনো গ্রহণযোগ্য শব্দাংশ (‘etp’ ও ‘arq’) পেলাম না। তাই এখন আমরা ‘tac’ বাদ দিয়ে এখন ‘ako’ দিয়ে এগোতে থাকবো। তাহলে আবার এ অংশের শুরুতে আলোচনা করা তিনটি টেবিলের মাঝে তৃতীয়টির শরণাপন্ন হতে হবে। Key এর দৈর্ঘ্য এক এক করে বৃদ্ধি করে এগোনো যাক।

প্রথমে Key এর দৈর্ঘ্য ৪। তখন Plain Text হিসেবে পাওয়া ‘uui’ কোনো গ্রহণযোগ্য শব্দাংশ হতে পারে না। তবে Keystream অংশে থাকা ‘NEN’ এর সেই সম্ভাবনা আছে।

অনুসন্ধান চলতে থাকুক আগের মতোই। নিচের টেবিল দুটিতে Key এর দৈর্ঘ্য যথাক্রমে ৫ ও ৬।

শেষের টেবিলের Keystream এ পাওয়া ‘TAC’ ও Plain Text এ পাওয়া ‘wn’ দুটোরই অর্থপূর্ণ শব্দাংশ হবার সম্ভাবনা রয়েছে। এখন আগের মতোই এগোতে হবে আমাদের। যেহেতু ‘TAC’ Keystream এ আছে, সুতরাং এটি Plain Text-এও থাকবে। সেক্ষেত্রে আমরা নিচের টেবিলটি পাবো। এ টেবিলে কিন্তু ঠিক আগের টেবিলের তথ্যগুলোই আছে। ফলে এখানেও Key এর দৈর্ঘ্য ৬-ই থাকছে।

দুর্গের ফাটল এতক্ষণে ধরা দিতে শুরু করেছে। আমরা ধরেছিলাম, Keystream এ Key এর দৈর্ঘ্য ৬। উপরের টেবিলের Keystream এ ‘INC’ দখল করেছে যথাক্রমে ৩য়, ৪র্থ ও ৫ম স্থান। সবচেয়ে গুরুত্বপূর্ণ ব্যাপার হলো, ‘INC’ এর সামনে-পেছনে বর্ণ বসিয়ে একে ৬ বর্ণের একটি Key-তেই রূপান্তর করা সম্ভব! কীভাবে?

‘Prince’ কিংবা ‘Flinch’ এর মতো শব্দ যে ঠিকই আছে ইংরেজী শব্দের ভান্ডারে! রাজপুত্র অর্থাৎ Prince কে দিয়েই তাহলে সম্ভাব্য জয়যাত্রা শুরু করা যাক। Key হিসেবে Prince লেখার পর এর উপরের Plain Text এর ফাঁকা জায়গাগুলো টেবুলা রেক্টার সাহায্য নিয়ে পূরণ করা হয়েছে।

কী আনন্দ! আরেকটি অর্থপূর্ণ শব্দ পেয়ে গেলাম আমরা, ‘attack’! আক্রমণ আরো জোরদার করা দরকার এখন। দূর্গের দেয়াল ভেঙে পড়তে বুঝি আর বেশি দেরি নেই আমার ক্লান্ত সৈনিকেরা। ঐ তো দেয়ালের পাথরগুলো এক এক করে খসে পড়ছে। যেহেতু Key পাওয়া গেছে, তাহলে এখন Plain Text কে Keystream এ বসানো শুরু করতে পারি আমরা। এভাবে PRINCE এর পর ATTACK আসলে নিচের টেবিলটি পাবো আমরা।

এভাবে Plain Text এর ফাঁকা জায়গাগুলো টেবুলা রেক্টার সাহায্যে এবং Keystream এর ফাঁকা জায়গাগুলো আবার Plain Text এর সাহায্যে ভরাট করলেই একসময় আমরা পেয়ে যাবো আমাদের কাঙ্ক্ষিত মেসেজ- ‘attack at the break of dawn’।

মারহাবা, মারহাবা! শত্রুপক্ষের দুর্গ একেবারেই ভেঙে পড়েছে। অনেক মাথা খাটিয়ে বিজয়ের সন্ধান পেলাম আমরা অবশেষে।

প্রকৃতপক্ষে অটোকী সাইফারের Key জানা না থাকলেও কীভাবে তার মর্মোদ্ধার করা যায় তার খুব সহজ উদাহরণ ছিল এটি। এখানে এমন একটি মেসেজই দেয়া হয়েছে যাতে ‘THE’ শব্দটি ছিল। বাস্তবে কিন্তু অনেক শব্দ ঘাটাঘাটি করে পরেই পাওয়া যেতে পারে কাঙ্ক্ষিত শব্দটি!

আবার আমরা কিন্তু ‘tac’ দিয়ে কাজ না হবার পরপরই সোজাসুজি ‘ako’-তে চলে এসেছি। বাস্তব জগতের সমস্যা এতটা সহজ হবে এমন আশা করা বৃথা! Key হিসেবে আমরা এ উদাহরণে পেয়েছি Prince যা একটি শব্দ। কিন্তু তথ্যের সুরক্ষার জন্য কেউই প্রকৃতপক্ষে চেনা-পরিচিত কোনো শব্দ ব্যবহার করবে না। বরং অর্থহীন কোনোকিছু এক্ষেত্রে বেশি সুরক্ষা দিবে।

ক্রিপ্টোলজির নিয়মিত পাঠকেরা আজকের এ লেখার মাধ্যমে অনেক উঁচু কোনো পাহাড়কে ছোঁয়ার আনন্দ পেয়েছেন বলেই আমার বিশ্বাস। সাথেই থাকুন, কারণ সামনে আসছে আরো অসাধারণ সব সাইফার, অসাধারণ অনেক ঐতিহাসিক কাহিনী যার পরতে পরতে লুকিয়ে আছে অ্যাডভেঞ্চার।

featured image: disneydude-94.deviantart.com

অতীত জলবায়ু পুনর্গঠন

পৃথিবীর সবচেয়ে ক্ষুদ্র বাতি