সরল সাইফার

সরল সাইফার

মধ্যম

নির্দেশনা

সিজার সাইফারের মতো একটি সরল শিফট সাইফার এবং আরও নিরাপদ একটি সাবস্টিটিউশন সাইফার তৈরি করুন।

ধাপ ১

"যদি তাঁর বলার মতো কোনো গোপনীয় বিষয় থাকত, তিনি তা সাইফারে লিখতেন, অর্থাৎ বর্ণমালার অক্ষরগুলোর ক্রম এমনভাবে বদলে দিতেন যে একটি শব্দও বোঝা যেত না। কেউ যদি এগুলো পাঠোদ্ধার করতে চান এবং এর অর্থ বুঝতে চান, তবে তাঁকে বর্ণমালার চতুর্থ অক্ষর, অর্থাৎ D, A-এর বদলে বসাতে হবে, আর একইভাবে বাকিগুলোর ক্ষেত্রেও।" সুয়েটোনিয়াস, Life of Julius Caesar

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

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

আপনার কাজ হলো সিজার সাইফারের মতো একটি সরল শিফট সাইফার তৈরি করা। এই ছবিটি সিজার সাইফারের একটি দারুণ উদাহরণ:

সিজার সাইফার

যেমন:

এনকোড ফাংশনে ইনপুট হিসেবে "iamapandabear" দিলে সাইফার হিসেবে "ldpdsdqgdehdu" রিটার্ন আসে। এটা যথেষ্ট দুর্বোধ্য, যা দিয়ে আমাদের বার্তা চলাচলের সময় গোপন রাখা যায়।

ডিকোড ফাংশনে "ldpdsdqgdehdu" দিলে তা আসল "iamapandabear" রিটার্ন করবে, যাতে আপনার বন্ধু আপনার আসল বার্তাটি পড়তে পারেন।

ধাপ ২

বিপক্ষের সেনাপতি যখন শিফট সাইফার ভেঙে ফেলেন, তখন সেগুলো দ্রুত অকেজো হয়ে পড়ে। তাই এর বদলে চলুন একটি সাবস্টিটিউশন সাইফার ব্যবহার করে দেখি। কোডটি একটু বদলে দেখুন, যাতে আমরা একটি কী নির্দিষ্ট করতে পারি এবং সেটিকেই শিফটের দূরত্ব হিসেবে ব্যবহার করতে পারি।

এখানে একটি উদাহরণ:

"aaaaaaaaaaaaaaaaaa" কী ধরে নিলে, "iamapandabear" স্ট্রিংটি এনকোড করলে রিটার্ন আসবে আসল "iamapandabear"।

"ddddddddddddddddd" কী ধরে নিলে, আমাদের "iamapandabear" স্ট্রিংটি এনকোড করলে রিটার্ন আসবে দুর্বোধ্য "ldpdsdqgdehdu"

উপরের উদাহরণে আমরা কী-এর মান হিসেবে a = 0 ধরে নিয়েছি। তাই প্লেইনটেক্সটের সাথে কী যোগ করলে আউটপুটে একই বার্তাই আসে। তাই "aaaa" আদর্শ কী নয়। কিন্তু আমরা যদি কী হিসেবে "dddd" ধরি, তাহলে সিজার সাইফারের মতোই ফলাফল পাব।

ধাপ ৩

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

কেউ যদি কোনো কী একেবারেই না দেয়, তবে কমপক্ষে ১০০টি ছোট হাতের অক্ষরের একটি সত্যিকারের র‍্যান্ডম কী তৈরি করুন।

সম্প্রসারণ

শিফট সাইফার লেখাকে সামান্য অদ্ভুত করে তোলে, কিন্তু ফ্রিকোয়েন্সি অ্যানালাইসিসের মুখে দুর্বল। সাবস্টিটিউশন সাইফার এতে সাহায্য করে, তবে কী ছোট হলে বা স্পেস অক্ষুণ্ন থাকলে তা এখনও খুবই দুর্বল। পরে আপনি "crypto-square" অনুশীলনীতে এই সমস্যার একটি সমাধান দেখতে পাবেন।

আপনি যদি এই ক্ষেত্রে আরও এগোতে চান, তবে প্রশ্ন দাঁড়ায় আমরা কীভাবে নিরাপদে কী বিনিময় করতে পারি। এই পদ্ধতির প্রথম দিকের একটি বাস্তবায়ন দেখতে উইকিপিডিয়ায় Diffie-Hellman দেখুন।

নোট

সীমা ছাড়িয়ে গেলে ইনডেক্স র‍্যাপ করতে মডুলোর মতো গাণিতিক অপারেশন ব্যবহার করে দেখুন। Character আর String ক্লাসও আপনার বন্ধু।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Pharo Exercism

সরল সাইফার শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Pharo ট্র্যাকের 50টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।