শুরুতেই বলে রাখি, ক্রিপ্টোগ্রাফি খুবই কম্পলেক্স একটা জিনিস। এটার জন্য আলাদা ম্যাথমেটিক্স রয়েছে, কিন্তু আমি আজ নিচে যেগুলো শেখাবো, সেগুলো ডাটা এনক্রিপ্ট ও ডিক্রিপ্ট করার সবচেয়ে সহজ পদ্ধতিগুলো, কোনো এডভান্স পদ্ধতি শেখাচ্ছি না, কারণ আমি নিজেও ক্রিপ্টোগ্রাফি নিয়ে উচ্চ পড়াশোনা করিনি।
তবে এই পদ্ধতিতেও আপনারা সঠিক ও সহজভাবে ডাটা এনক্রিপ্ট ও ডিক্রিপ্ট করতে পারবেন।
ক্রিপ্টোগ্রাফির সবচেয়ে জনপ্রিয় বিভাগ হলো সাইফার(Cipher)।
উপরে দেখতে পাচ্ছেন সাইফার তিন প্রকারের- Historic, Block ও Stream সাইফার। এই তিনটার ই আবার অনেকগুলা শাখা আছে।
এই পর্বে আমরা Historic Cipher শিখবো ও প্র্যাক্টিস করবো, তাই অন্য গুলোর শাখা-প্রশাখা নিয়ে আগামী পর্বে কথা বলবো। তবে তার আগে ব্যাসিক ৬টি বিষয় জানতে হবে।
নিচে ৬টি বিষয় ব্যাখ্যা করা হলোঃ
Plain Text:
যে তথ্য বা লেখা আপনি গোপন করতে চান এবং পাঠাতে চান সেটাই প্লেইন টেক্সট।
Encryption:
প্লেইন টেক্সট গুপ্ত করার পদ্ধতি হলো এনক্রিপশন।
Cypher Text:
এনক্রিপশন করার পর যে লেখা টি পাওয়া যাবে সেটাকে সাইফার টেক্সট বলে। (Cypher ও Cipher একই)
Decryption:
সাইফার টেক্সট কে প্লেইন টেক্সট এ পরিণত করার পদ্ধতিই হলো ডিক্রিপশন।
Algorithm:
যে গানিতিক নিয়ম মেনে প্লেইন টেক্সট কে সাইফার টেক্সট করা হয় বা সাইফার টেক্সট কে প্লেইন টেক্সট করা হয় তাকে অ্যালগরিদম বলা হয়।
Key:
যে সংখা মেনে অ্যালগরিদম প্রয়োগ করা হয় সেটা হলো “কি” (চাবি) বলি। এই Key শুধু গ্রাহকের জানা থাকবে। অর্থাৎ আপনি যাকে পাঠাবেন তার এই চাবি সংখ্যা জানা থাকতে হবে, নাহলে সে এটা ডিক্রিপ্ট করতে পারবে না।
এটা ভালোভাবে বুঝাতে গত পোস্টের উদাহারণটা প্রয়োগ করি চলুন।
এখানে Plain Text হলোঃ There is 1M taka in a box in the small room.
এই এনক্রিপশন ও ডিক্রিপশন পদ্ধতি হলোঃ সিজার সাইফার (Caesar Cipher) যেটা Historic Cipher এর একটি শাখা।
এখানে Cypher Text হলোঃ Uifsf jt 2N ublb jo b cpy jo uif tnbmm sppn.
এখানে Algorithm হলোঃ পরবর্তী ১ সংখ্যার যোগ করা।
তাই সে হিসেবে Key হলোঃ 1
আপনি যাকে পাঠালেন লেখা সে যদি জানে যে আপনি ১ ঘর পরেরটার সাথে পরিবর্তন করেছেন, তাহলেই সে মুল লেখা থেকে ১ ঘর কমিয়ে পরিবর্তন করার মাধ্যমে মুল লেখা পাবে।
এবার আমাদের হিস্টরিক সাইফার শুরু।
Historic Cipher
প্রথমে একটি বাক্য/তথ্য বেছে নিলাম যেটা আমরা এনক্রিপ্ট করবো-
Know for sharing
1. Caesar Cipher:
ইংরেজি বর্ন কে আপনি কয়েক ঘর পিছিয়ে বা এগিয়ে যে লেখা বা বাক্য তৈরি করবেন সেটাই সিজার সাইফার।
ইতোমধ্যে যেহেতু আমরা ১ বর্ন এগিয়ে দিয়ে দেখেছি, তাই এবার আমরা ৩ বর্ন এগিয়ে দিয়ে চেস্টা করবো। তাহলে “know for sharing” কে ৩ বর্ন এগিয়ে নিলে,
k = n
n = q
o = r
w = z
তাহলে পুরো বাক্য দাঁড়ায় – nqrz iru vkdulqj
বলুন তো, এখানে key কত?
হ্যা, ৩।
অনেকে প্রশ্ন করতে পারেন যে Z এর পরের ১ ঘর বা ৩ ঘর নিবো কীভাবে? উত্তরঃ আবার প্রথম থেকে শুরু। অর্থাৎ, Z এর পরে আবার A আসবে। আর A কে যদি এক বর্ণ পিছিয়ে সাইফার বানাই, তাহলে A এর বদলে Z হবে, অর্থাৎ এটা একটা ২৬ অক্ষরের বৃত্তের সাথে তুলনা করতে পারেন।
কেউ যদি Key কে ২৫ করে দেয়, তাহলে সেটা কে ১ বর্ন পেছানো বলা হবে। যেমন- E কে যদি ২৫ ঘর এগিয়ে নিয়ে যাই তাহলে আমরা D পাবো। হিসাব করে দেখুন। তাহলে আপনি যদি এক বর্ন পিছিয়ে নিতে চান, তাহলে আপনি দুইটা Key পাবেন 25 ও -1, হ্যা -1 দিয়ে এক ঘর পেছানো।
এবার ২ বর্ন পিছিয়ে নিবো।
তাহলে,
k = i
n = l
o = m
w = u
এভাবে পুরো বাক্য লিখলে পাবো- ilmu dmp qfypgle
(আমার কোথাও লেখা ভুল হলে জানাবেন)
আপনারা চাইলে ১ লাখ ঘর পেছনে বা সামনে নিয়েও সিজার সাইফার করতে পারেন। যেহেতু মানুষের পক্ষে এতো ঘর হিসাব করা অনেক বেশি সময় কষ্টসাধ্য তাই সেক্ষেত্রে ডিভাইস বা সফটওয়্যার এর প্রয়োজন পড়বে।
2. Vigenere Cipher:
ভিজিনিয়ার সাইফার এর জন্য আপনাকে একটা টেবিল ফলো করতে হবে। নিচে আমি দিয়ে দিলাম। এটা তো মুখস্ত করা প্রায় অসম্ভব, তাই প্রতিবার এনক্রিপ্ট বা ডিক্রিপ্ট করার সময় এই টেবিলটা ব্যবহার করতে হবে।
টেবিলের লাল চিহ্নিত অংশটি হলো “কলাম” ও নিল চিহ্নিত অংশটি হলো “সারি”।
আমরা এখন যেটা এনক্রিপ্ট করবো সেটা হলো- know for sharing
এখন একটা Key প্রয়োজন।
ধরলাম Key হলো- trickbd
এবার আমরা সব স্পেস গুলা সরিয়ে দিবো। এতে এনক্রিপ্ট করতে সুবিধা হবে। তাহলে,
Plain Text: knowforsharing (১৪টি বর্ন)
Key: trickbd (৮টি বর্ন)
এই ধরনের এনক্রিপশনের ক্ষেত্রে আমাদেরকে Plain Text ও Key এর বর্ন সমূহ সমান সংখ্যক করতে হবে। কিন্ত plain text এ কোনো পরিবর্তন করা যাবে না। Key এর পরিধি বাড়াতে হবে। তাহলে trickbd কে যদি পরপর দুই বার লিখি, তবে পাওয়া যায়- trickbdtrickbd যেখানে ১৬ টি অক্ষর। কিন্তু key এর পরিধি বাড়ানোর ফলে একে এখন আমরা key stream বলবো। আমাদের প্রয়োজন ১৪ অক্ষর, তাই শেষের দুই অক্ষর মুছে ফেলবো। অতএব, trickbdtrick লিখবো যেটা ১৪ অক্ষর হয়েছে।
(বিঃদ্রঃ key বা keystream কে আপনি সংখ্যাবাচকে রাখতে পারবেন না। অর্থাৎ Plain Text যদি ইংরেজি বর্ণমালায় হয়, তাহলে key কেও ইংরেজি বর্ণমালায় রাখতে হবে। Key কে সংখ্যাবাচকে রেখেও সাইফার করা যায়, কিন্তু ঐ পদ্ধতি মুটামুটি কম্পলেক্স। আমি নিজেই একটু কম বুঝি, তাই আপনাদের কে সে পদ্ধতি শেখাচ্ছি না)
সব তথ্যতে চোখ বুলিয়ে নিই।
Plain Text: knowforsharing
Keystream: trickbdtrick
এবার,
উপরের চিত্র তে আগেই বলেছি লাল বর্ণ হলো কলাম আর নিল বর্ন হলো সারি। উপরের লাল বর্ণ গুলো আমাদের Plain Text এবং পাশের নিল বর্ণ গুলো আমাদের Key, লেখাও আছে।
আমাদের Plain Text এর প্রথম অক্ষর হলোঃ K (লাল)
আমাদের keystream এর প্রথম অক্ষর হলোঃ T (নিল)
এখন ভিজিনিয়ার টেবিল এর লাল কলামে আমরা K খুজলাম এবং নিচের মতো সেটা চিহ্নিত করলাম।
এরপর টেবিলের নিল সারিতে T খুজলাম ও চিহ্নিত করলাম।
এবার দেখুন K ও T বরাবর আমরা কোন বর্ণ টি পেলাম।
সুতরাং, D হলো আমাদের Cipher Text এর প্রথম অক্ষর।
কেবল এক অক্ষর গেল। এখন,
আমাদের Plain Text এর ২য় বর্ণটি হলোঃ N (লাল)
আমাদের keystream এর ২য় বর্ণটি হলোঃ R (নিল)
এখন আগের মতোই আবার ভিজিনিয়ার টেবিল এর লাল কলামে আমরা N খুজলাম এবং নিচের মতো সেটা চিহ্নিত করলাম।
এরপর টেবিলের নিল সারিতে R খুজলাম ও চিহ্নিত করলাম।
এবার দেখুন N ও R বরাবর আমরা কোন বর্ণ টি পেলাম।
সুতরাং, E হলো আমাদের Cipher Text এর ২য় অক্ষর।
আমাদের Plain Text এর ৩য় বর্ণটি হলোঃ O (লাল)
আমাদের keystream এর ৩য় বর্ণটি হলোঃ i (নিল)
এখন আগের মতোই আবার ভিজিনিয়ার টেবিল এর লাল কলামে আমরা O খুজলাম এবং নিচের মতো সেটা চিহ্নিত করলাম।
এরপর টেবিলের নিল সারিতে i খুজলাম ও চিহ্নিত করলাম।
এবার দেখুন O ও i বরাবর আমরা কোন বর্ণ টি পেলাম।
সুতরাং, W হলো আমাদের Cipher Text এর ৩য় অক্ষর।
এভাবে বারবার করতে থাকুন, তাহলে পুরো সাইফার টেক্সট হবে নিচের মতোন।
DEWYPPULYITSOJ
বা, ছোট হাতের অক্ষরে লিখলে,
dewyppulyitsoj
কাজ শেষ।
এবার,
Plain Text: knowforsharing
Key: trickbd
Keystream: trickbdtrick
Cipher Text: dewyppulyitsoj
আজ এ পর্যন্তই।
আপনাদের জন্য একটা প্র্যাক্টিস রেখে গেলাম।
আমি এতোক্ষন Encrypt করা শেখালাম, এখন আপনারা মেধা খাটিয়ে Decrypt করুন।
Encrypt যেভাবে করলেন, পুরো প্রসেস টা উল্ট করলেই সেটা decrypt করা হবে।
আমি plain text কে cipher text করা শেখালাম।
এখন, আপনাদের কে ছোট একটা cipher text দিবো, সেটা plain text করে কমেন্ট করুন। (জোর করবো না, আপনাদের প্র্যাক্টিস এর জন্যই দিলাম৷ কিছু শেখার পর সেটা প্র্যাক্টিস করলেই তা মগজে থাকে অনেক কাল।)
Cipher text: QOFZHYA
Key: X
এখন বলুন Plain text কী হবে?
যারা পারছেন না, অসুবিধা নেই, আগামী পর্বে আমি Decrypt করাও শেখাবো। এই পর্বেই শেখাতে চাইছিলাম, কিন্তু দেখতেই পাচ্ছেন যে পোস্ট কত বড় হয়ে গেছে।
আগামী পর্বে আমরা শিখবো স্কাইটেল(skytale) ও এনিগমা(enigma)।
ট্রিকবিডির সাথেই থাকুন।