বর্তমান সময়ঃ- 5 June, 2020

2-Factor Authenticator এবং Authentication এপগুলো কিভাবে কাজ করে?

বরাবরের মত সেদিনও একটা অনলাইন সার্ভিসে লগইন করার সময় ইমেইল, পাসওয়ার্ড দেয়ার পর সেটার 2FA(2-Factor Authentication) চালু থাকায় OTP (One Time Password) চেয়ে বসলো। তো মোবাইলে থাকা Google Authenticator অন করে সেখান থেকে OTP টা দেখে নিতে গিয়ে খেয়াল করলাম আমার মোবাইলে নেট চালু নেই। অথচ দিব্যি আমি OTP জেনারেট করে নিয়ে সেটা সার্ভিসের ফর্মে এন্ট্রি দিয়ে লগইন করতে পারছি। সাধারণভাবে আপনারা হয়তো জানেন যে SMS এ অনেক সময় কিছু কিছু সার্ভিস OTP পাঠায়। তো আমি সেই ধারণাতেই মনে করতাম যে, Google Authenticator এর মত 2FA Authenticator এপগুলোও সম্ভবত রিয়েল টাইমে সার্ভার থেকে একটা OTP রিসিভ করে আমাকে দেখায়। কিন্তু এ দেখি আজব কারবার! 
নেট না থাকলে এপ OTP পায় কোথায়? 
আবার ও যদি নিজের মন মত OTP জেনারেট করে দেয়, তাহলে সার্ভার আবার সেটাকে ভ্যালিডেট করে কিভাবে?

এ কি জাদু?

না ভাই, জাদু নহে। এই অত্যাশ্চর্য ব্যাপারের পেছনের গল্প জানতেই আজকের এই আলোচনা। চলুন শুরু করা যাক।

প্রথমেই একটু বলে নেই 2FA বা 2-Factor Authentication নিয়ে। আমরা সাধারণত যেই Authentication প্রসেসগুলো দেখি, যেমন ইমেইল, পাসওয়ার্ড দিয়ে লগইন বা সোশ্যাল লগইন যেমন (ফেসবুক, গুগল দিয়ে লগইন) এগুলো মূলত 1 Factor Authentication। অর্থাৎ আমি ‘জানি’ এরকম একটা বিষয়ের উপরই Authentication প্রসেস নির্ভর করে। কিন্তু সিকিউরিটি আরেকটু জোরদার করার জন্য এর সাথে আরও এক ধাপ বাড়ানো হয়। আপনি যদি ATM বা এই রকম কার্ড দিয়ে ব্যাংকের ট্রান্সেকশন করে থাকেন তাহলে দেখে থাকবেন যে, আপনার Authentication এর জন্য দুইটা জিনিস লাগে। একটা হল আপনার ‘কার্ড’, আরেকটা হলো ‘পিন/পাসওয়ার্ড’। তারমানে বুঝতেই পারছেন এখানে ২ টা ফ্যাক্টর দিয়ে আপনার Authentication নির্ধারণ করা হচ্ছে, একটা হচ্ছে- ‘Something You Know’ অর্থাৎ ‘পিন’, আরেকটা হলো ‘Something You Have/Possess’ অর্থাৎ ‘কার্ড’। তারমানে কেউ যদি আপনার কার্ড হাতিয়েও নেয় তাতে করে কিন্তু আপনার একাউন্টে সে কিছুই করতে পারবে না। আবার আপনার পিনটা কোনোভাবে সোশ্যাল ইঞ্জিনিয়ারিং করে জেনে ফেললেও যদি না কার্ড পায় তাহলেও আপনার একাউন্ট সিকিউর।

সাধারণত অনেকেই তাঁদের একাউন্টে খুব দূর্বল পাসওয়ার্ড ব্যবহার করে থাকেন, কিংবা কখনো কোন অনলাইন সার্ভিসের ডাটাবেজ হ্যাক হলে সেখান থেকে ইউজারদের ডাটাবেজ চুরি যাওয়ার চান্স থাকে। যেহেতু অনেকেই একই পাসওয়ার্ড একাধিক সার্ভিসে ব্যবহার করে থাকেন, তাই কোন একটা সার্ভিস কম্প্রোমাইজ হলে অন্যান্য সার্ভিসেও ঐ ইউজারের একাউন্ট ইন্সিকিউর হয়ে পড়ে। এক্ষেত্রে 2FA কিছুটা হলেও বাড়তি নিরাপত্তা দিতে পারে।
এই ফাঁকে বলে রাখি, অনেকে ‘পিন’ নাম্বার ভুলে যাবে দেখে বুদ্ধি করে সেটা ATM কার্ডের উপরেই লিখে রাখে। বুঝতেই পারছেন, সেই কার্ড খোয়া গেলে ব্যাপারটা কি দাঁড়াবে?

যাই হোক, 2FA নিয়ে এই হলো মোদ্দাকথা। আসল কথায় আসি এবার।

প্রথম যখন আপনি আপনার মোবাইলে Authenticator এপটা ইন্সটল করে কোনো একটা সার্ভিসে 2FA সচল করতে যাবেন, তখন সার্ভিস থেকে আপনাকে একটা টোকেন দিবে বা একটা QR কোড স্ক্যান করতে বলবে। এটা হলো ইনিশিয়ালাইজেশন প্রসেস, যেখানে সার্ভার Authenticator এপের সাথে একটা সিক্রেট শেয়ার করে এবং নিজের কাছেও সেই সিক্রেটটা রেখে দেয়। পরবর্তীতে OTP জেনারেট করতে গেলে এই সিক্রেটটা কাজে লাগে। এখন ইনিশিয়ালাইজেশন হয়ে যাওয়ার পর মূলত ২ ভাবে 2FA Authenticator এপগুলো OTP জেনারেট করে। একটা হলো HOTP, আরেকটা হলো TOTP.

HOTP (HMAC-based One-time Password):

TOTP (Time-based One-time Password):

আপনি যেই ঝামেলাটার কথা চিন্তা করছেন, এই ঝামেলাটা দূর করার জন্যই TOTP জেনারেটের সময় সাধারণত 30 সেকেন্ড বা 60 সেকেন্ডের একেকটা ফ্রেমে OTP জেনারেট করা হয়। আরেকটু সহজ করে বলি। TOTP তে OTP জেনারেট করার সহজ ফরমুলা অনেকটা এরকমঃ

Time Counter = floor(Current Time since Unix Epoch / 30)

এখন তারমানে Current Time যদি হয় 1556293816 তাহলে একে 30 দিয়ে ভাগ করে ম্যাথম্যাটিক্যাল Floor করলে যেই Counter আমরা পাবো, 10 সেকেন্ড পরেও (1556293826) আমরা একই Counter পাবো। তারমানে প্রতি ৩০ সেকেন্ড ডিফেরেন্সে Counter একই হবে। সুতরাং আপনি এপে OTP জেনারেট করার কিছুক্ষণ পরেও যদি সার্ভারে সেটা ভ্যালিডেট করার জন্য দেন, তাতেও প্রব্লেম নেই। এ কারণেই TOTP ভিত্তিক Authenticator এপে খেয়াল করলে দেখবেন যে OTP জেনারেট হওয়ার পরে একটা ঘড়ির মত ঘুরতে থাকে আর কিছুক্ষন পরেই আগের OTP চেঞ্জ হয়ে নতুন OTP দেখায়। 
এই ফাঁকে একটা বিখ্যাত কৌতুক আপনাদের আবার একটু শুনাই। 
এক ওয়াজ মাহফিলে হুজুর বলতেছিলেন, যে একটা খুব অলৌকিক গাছ আছে, যেটার পাতা মাটিতে পড়লে বাঘ হয়ে যায়, আর পানিতে পড়লে কুমির। এটা শুনে স্রোতাদের মাঝখান থেকে নোয়াখালীর এক লোক দাঁড়িয়ে বললো, ‘হুজুর, গাছের হাতা যদি অর্ধেক মাডিত হড়ে আর অর্ধেক হানিত হড়ে, তাইলে কি অইবো?’ 
যাই হোক, আমার বাড়িও যেহেতু নোয়াখালী, এ কারণে আমিও TOTP এর প্রসেসটা দেখার পর ভাবতেছিলাম, আচ্ছা, যদি আমার Current Time হয় 1556293829 আর মাত্র ২ সেকেন্ড পরেই আমি সার্ভারে আমার OTP দেই ভ্যালিডেট করার জন্য তাহলেই তো সার্ভার এটাকে ইনভ্যালিড দেখাবে কারণ মাত্র এই ২ সেকেন্ডের ব্যবধানেই তো আমার আর সার্ভারের 30 সেকেন্ড ফ্রেম চেঞ্জ হয়ে গেছে। ওই মাঝখানে পড়ার মত ব্যাপার আর কি, হে হে। 
যাই হোক, যারা Authenticator এপ বানাইছে তারা এত বোকা না। তারা এই জন্য করে কি, ±1 টাইম ফ্রেমে ম্যাচ করে, অর্থাৎ আগের 30 সেকেন্ড ফ্রেমে পড়লে বা পরের 30 সেকেন্ড ফ্রেমে পড়লে OTP কি হবে সেটাও জেনারেট করে ম্যাচ করার চেস্টা করে। সুতরাং, নো চিন্তা, ডু OTP.ই হোক, অনেক কথা হলো। আশা করি, Authenticator এপগুলো সার্ভারের সাথে রিয়েল টাইম কমিউনিকেট না করেও বা অনলাইনে না থাকলেও কিভাবে কাজ করে সেটা বোঝাতে পেরেছি। তারপরও কোনো প্রশ্ন থাকলে কমেন্টে জানাতে পারেন। আজ এ পর্যন্তই।

Share

Leave a Reply