অনেক দিন পর আবার এই সিরিজ নিয়ে বসলাম। আজ আমরা কথা বলবো ভিজনেয়ার সাইফার নিয়ে। তবে তার আগে চলো একটি গল্প শুনে আসি। এলিস একটি প্রেমপত্র পাঠাতে চায় ববকে। কিন্তু সে চায় না যাতে এই প্রেমপত্র আর কেউ পড়তে পারে! তো সে ঠিক করলো, তার চিঠি এমন ভাবে লিখলো যেন শুধু ববই পারে চিঠিটা ডিক্রিপ্ট (Decrypt) করতে। তো খুব ভাল কথা, সে সিজার সাইফার ব্যবহার করে চিঠি লিখে পাঠিয়ে দিলো। কিন্তু মাঝে বাধ সাধলো ইভ। সে তো স্বশিক্ষায় ক্রিপ্টোগ্রাফি নিয়ে পড়ে ফেলছে। তাই পোস্টম্যানকে কিল-ঘুষি দিয়ে চিঠি হাতে পেয়েই বুঝে গেল যে, এটা সিজার সাইফার। সে এবার একটা কোড লিখলো। সে কোডে সে ২৬ ভাবে বর্ণ শিফট করে প্রিন্ট করে দেখলো কী আসে। ব্যাস, তার কাজ শেষ! সে পেয়ে গেল মূল চিঠিটা।
এই ইভ হল একজন ইভসড্রপার (Eavesdropper)। ইভসড্রপার মানে যারা কান পেতে অন্যের গোপন কথা শুনে বা শোনার চেষ্টা করে। এই গোপন চিঠি পড়তে তার খুব বেশী কষ্টও করা লাগলো না। মাত্র ২৬ ভাবে চেষ্টা করতে হল। একে কম্পিউটার সাইন্সের ভাষায় বলা হয় ব্রুট ফোর্স, আমরা বলবো কামলা খাটা। সিজার সাইফার কামলা খেটে ডিক্রিপ্ট করা সহজ, কারণ এখানে সম্ভাব্য উপায় আছে মাত্র ২৬ টা।
তো এই ইভসড্রপারদের জীবনটা একটু কঠিন (আর এলিস ববদের প্রেমের পথ কণ্টকহীন) করতেই Blaise de Vigenère নিয়ে এলেন Vigenère সাইফার। এটা সিজার সাইফারের একটু পরিবর্তীত রূপ। তবে সিজার সাইফারের মতো এতে প্রতি বর্ণকে একই পরিমাণ শিফট করা হয় না। এই সাইফারে Key হিসেবে আরেকটি Text থাকে। এই Key ব্যবহার করে এবার plain text-এর প্রতিটা বর্ণকে শিফট করা হয়। কঠিন লাগছে? একটি উদাহারণ দিলেই বুঝে যাবে!
ধরা যাক, আমাদের Key হল KISUPARINA
আমাদের Key-এর দৈর্ঘ্য ১০, তাহলে আমাদের এই KEY ব্যবহার করে সর্বোচ্চ ১০ দৈর্ঘ্যের একটি প্লেইনটেক্সটকে এনক্রিপ্ট করা যাবে। কিংবা আমরা ১০ দৈর্ঘ্যের এই key চক্রাকারে ব্যবহার করতে পারি, যেমন KISUPARINAKISUPARINA… তো এবার দেখা যাক, এই Key ব্যবহার করে আমি এনক্রিপ্ট করবো কীভাবে। আমরা প্রথমেই লিখে ফেলি এই Key-এর প্রতিটা বর্ণ বর্ণমালায় কততম [0 based index]।
K | I | S | U | P | A | R | I | N | A |
10 | 8 | 13 | 20 | 15 | 0 | 17 | 8 | 13 | 0 |
তাহলে আমরা প্রথম ক্যারেক্টারকে শিফট করবো ১০ ঘর, দ্বিতীয় ক্যারেক্টারকে শিফট করবো ৮ ঘর। এভাবে চলতে থাকবে। প্লেইন টেক্সটের দৈর্ঘ্য ১০ ছাড়িয়ে গেলে আমরা modulus ব্যবহার করবো, যেমন 21 তম ক্যারেক্টারকে শিফট করবো 10 ঘর (কারণ 21%length = 1)। এখানে ১০ হল Key-এর দৈর্ঘ্য। একইভাবে 99-তম ক্যারেক্টারকে শিফট করবো 13 (99%length = 9) ঘর। আর শিফট করে ২৬ পার হয়ে গেলে, আমরা সিজার সাইফারের মতই ২৬ দিয়ে ভাগ করে নিয়ে ভাগশেষ দিয়ে নতুন ক্যারেক্টারটা পাবো।
Plaintext: SHOSHIKKHA Key: KISUPARINA Ciphertext: CPGMWIBSUA
একটা সিক্রেট বলি! এই সাইফারটেক্সট আমি নিজে লিখে বের করি নাই, কোড করে দিছি, কম্পিউটার বের করে দিছে। 😛 কোডটা আছে এখানে।
এবার বলো তো আমরা 0 based ইনডেক্স কেন ব্যবহার করেছি? কারণ ধর তোমার key-এর এক জায়গায় ‘Z’ আছে। এখন তুমি যদি ‘A’-কে ২৬ ঘর শিফট করো, তাহলে কী পাবে? সেটা ঘুরে এসে আবার ‘A’ হয়ে যাবে! তাই আমরা ‘Z’-এর জন্য শিফট করবো ২৫ পরিমাণ!
গাণিতিকভাবে আমরা এই সাইফারকে নিচের মতো করে লিখতে পারিঃ
এনক্রিপশনঃ E(Mi) = ( Mi + Ki )%26, এখানে Mi হল প্লেইন টেক্সটের i তম বর্ণ। আর Ki হল Key-এর i তম বর্ণ।
ডিক্রিপশনঃ D(Mi) = ( Mi – Ki )%26
তবে এখনো যে কামলা খেটে বের করা সম্ভব না, তা না। তবে সিজার সাইফারের চেয়ে তা অনেক কঠিন। আবার প্লেইন টেক্সটের একটি শব্দ ঠিক মতো অনুমান করতে পারলেও এটি ডিক্রিপট করা অনেক সহজ হয়ে যায়। তবে সেগুলো নিয়ে কথা বলবো না আজ। আজ এ পর্যন্তই। সবাই ভাল থাকবেন, সুস্থ থাকবেন, দেশ ও আশেপাশের মানুষকে ভাল রাখবেন। 🙂