এই লেখাটি যখন লিখছি তখন Google Authenticator সিস্টেম নিয়ে আমার ভাবনা চিন্তার বয়স প্রায় বছর ছুয়ে যাবে – এই দীর্ঘ সময়ের শুরুটা হয়েছিলো খুব ছোট্ট একটা কৌতূহলী বিষয় হতে “হঠাৎ একটা সময় গুগল অথেন্টিকেটর এপ্লিকেশন’টি অফলাইনে কোড জেনারেট করছে, তথাপি আরও আশ্চর্য হই যখন দেখি সেইসব অফলাইন কোড আমার অন্যান্য অনলাইন সিস্টেমে সফলভাবে লগিন করতে পারছে”।
আমার মাথাতে “সরল মনে” একটি প্রশ্ন জাগে যে অফলাইনে যদি একটি সিস্টেম অনলাইনের একাউন্ট লগিন কাজ করতে পারে তাহলে একই পদ্ধতির রিভার্স ইঞ্জিনিয়ারিং করে সিস্টেম লগিন এক্সেস তথা সিকিউরিটি বাইপাস করা কেন সম্ভব নয়? অনলাইনে বিস্তর ঘাটাঘাটি করেও ঠিক মনের মতো করে বিষয়টার উত্তর পাইনি কিংবা এমনটাও হতে পারে যে “আমি হয়তো অতো জটিল বিষয় বুঝতে পারার মতো ক্যাপাবিলিটি ছিলো না” – তারপরও মনের মাঝে একটা খুঁতখুঁতে ভাব নিয়ে কাঁটার মতো এই সিকিউরিটি সিস্টেমটা বিঁধে ছিলো।
এই বিষয়টাই Google এর বাগ হান্টিং (বাগ বাউন্টি প্রোগ্রামে সিস্টেম ত্রুটি হিসেবে হাইলাইট করি; তথাপি আমার মনের মাঝেই তো কনফিউশান রয়েছে যে “এটার কাহিনি কি?” তাই গুগল মামাকে যতোই ভূগল বোঝানোর চেষ্টা করি – সে উপরন্তু আমাকে বাউন্টির ( :-/ ) এর বদলে ইতিহাস পড়তে বলেন [মূলত এই HMAC-SHA1 লগারিদম সিস্টেম তৈরী ১৯৯৫ সনে (NSA দ্বারা যা পরবর্তীতে NIST কর্তৃক প্রকাশিত হয়) যার পরিপ্রেক্ষিতে HMAC-এর অফিসিয়াল স্ট্যান্ডার্ড (RFC 2104) প্রকাশিত হয় ১৯৯৭ সালে]।
কি আর করা…মামার বাধ্যগত ভাগ্নে হয়ে সত্যি সত্যিই উপদেশ মনে বিষয়টা একটু একটু স্ট্যাডি করার চেষ্টা করি (আইমিন বোকা মাথায় যতোটা ধরে আরকি)…
যাই হউক এরপর আরও কিছু স্ট্যাডি করার পর মূল কিছু বিষয় হাইলাইট করি:
(১) শুধু Google Authenticator এপ্লিকেশন’ই নয় বরং অন্যান্য প্রায় সকল এমন 2F Authentication সিস্টেম আসলে একইভাবে কাজ করে; এটি সম্পূর্ণ স্বাধীন একটি সিস্টেম।
(২) এই অথেন্টিকেশান সিস্টেমে টাইম বেইজ সিকিউরিটি নিশ্চিত করে – যা স্বাভাবিকভাবেই ৩০ সেকেন্ড সময়ের জন্য কার্যকরী থাকে [ব্যক্তিগত অবজারভেশন: এটি ৩০ সেকেন্ডের জন্য সময়সীমা হলেও সার্ভার বেইজ তা ৩০ সেকেন্ড+ (৩০ সেকেন্ড এর খানিক বেশী সময় অবধি) ভ্যালিড থাকে – যাকে একটি Vulnerability বলা যায় কিনা সেটাও একটি প্রশ্ন হওয়া উচিত]।
(৩) প্রতিটি Security Key এর টেক্সট কালচারের বিপরীতে টাইম বেইজড ৩০ সেকেন্ড সময়ের জন্য পুনঃপুন নতুন সিকিউরিটি কোড জেনারেট করে যা আসলে TOTP তথা Time-based One-Time Password
(৪) এই Time-based One-Time Password (TOTP) আসলে HMAC-SHA1 হ্যাশিং অ্যালগরিদম ব্যবহার করে – যা যদিও পাবলিক ক্রিপ্টোগ্রাফিক RFC 6238 স্ট্যান্ডার্ড মেথড তথাপি এটি কেবলমাত্র একমুখী কোড জেনারেশান সিস্টেম; এটি কখনোই TOTP হতে Secret Key ডিক্রিপ্ট / রিক্রিয়েট করতে পারে না।
যাই হউক – এতোসব জটিল বিষয়ের মূল মোরাল বিষয়টি সরল বাক্যে হলো “একটি লগারিদম সিস্টেম যা কিনা প্রতিটি Secret Key এর বিপরীতে নির্ধারিত সময় পরপর একমুখী লগিন ওয়ান টাইম পাসকোড তৈরী করতে পারে”।
আর অন্যান্য অনলাইন একাউন্টেপ লগিন করা যায় এই কারনেই কেননা তাদের সিস্টেমেও ঐ একই লগারিদম বেইজড Secret Key এর বিপরীতে কোড জেনারেট হয় – ফলে দুটি কোড ম্যাচিং হলে লগিন এক্সেস Successfull হয়।
আচ্ছা আমার মনের খুঁতখুঁত এখানেও শেষের সমাপ্তি হয়নি ফলে বিষয়টার কনক্লুশনে পৌছাতে একটি সময় মাথাতে আসে যে “যেহেতু এই লগিন সিস্টেমের বিপরীতে মাত্র ৩০ সেকেন্ড সময়ের জন্যই কোড ভ্যালিড থাকে তাহলে সেটার টাইম ডিউরেশান কিভাবে বাইপাস করা যায়?”।
নাহ, মনে বিষয়টা হচ্ছে যে “এই অথেনটিকেশনের মূল বিশেষত্ব হলো যে ৩০ সেকেন্ড পরপর নতুন জেনারেটেড কোড হতেই কেবল লগিন করা যাবে – সুতরাং এটি আসলেই অথেন্টিক এবং ইউনিক”; অপরাপর যদি সেই ৩০ সেকেন্ড সময়’কেই কোনভাবে ইনক্রিজ করানো যায় তাহলেও তো সিস্টেমের খানিক হলেও এক্সেস করা যায় বৈকি!
এরপর শুরু হয় বিষয়টা কিভাবে করা পসিবল?
সবার আগেই মাথাতে আসে যে “এটা অফলাইন কোড জেনারেটর” সুতরাং এমনকিছু ঐ Google Authenticator এপ্লিকেশন (Apk) ফরম্যাটের ভেতরেই লুকানো আছে যা হতে মূল বিষয়টার ম্যাজিক আবিষ্কার করা সম্ভব; তথাপি কঠিন কঠিন প্রোগ্রামিং লজিক একস্ট্রাক্ট করাও আমার জন্য একদমই সহজ ছিলো না।
তবুও আমার এই কৌতূহলে যেহেতু ভ্যালিড ও পয়েন্ট ছিলো তাই যুক্তিগত দিক হতে এটার অনুসন্ধান করেই গিয়েছি (আমন মনে কল্পনায়) – তদুপরি ভাবতে ভাবতে হঠাৎ করেই বিষয়টার একটা কনক্লুশন দাড়িয়ে যায় “যদি আমি বর্তমানের ৩০ সেকেন্ড সময়ের জন্য এক্টিভ থাকা TOTP এর বিপরীতে ভবিষ্যত ৩০ সেকেন্ড সময়ের জন্যও যে TOTP জেনারেট হবে সেটা জানতে পারি তাহলে আমার হতে মোট এক্সেস টাইম হবে ‘বর্তমান ৩০ সেকেন্ড + ভবিষ্যত ৩০ সেকেন্ড = ৬০ সেকেন্ড’ সুতরাং টাইম ডিউরেশানে ইন্টারএ্যাক্ট করা যাবে।
আবারও মাথার কৌতুহলী পোঁকা কিরকির করে বলে যে “যদি ভবিষ্যতের ৩০ সেকেন্ড সময়ের জন্যই নেক্সট ৩০ সেকেন্ডের সিকিউরিটি TOTP জেনারট করা যায় তাহলে আরও অধিক সময়ের জন্য কেন কোড জেনারেট করা যাবে না?”
যেহেতু এটা পুরোটাই অফলাইনে HMAC-SHA1 হ্যাশিং অ্যালগরিদম বেইজড কোড জেনারেট করে তাই তাই Base32 সিক্রেট’কে বাইট অ্যারে তে কনভার্ট করে TOTP অ্যালগরিদমের জন্য প্রয়োজনীয় ফরম্যাট জেনারেট করা যায়; এরপর async function totp(secret,offset=0){… return (code%1e6).toString().padStart(6,”0″); } দিয়ে পরবর্তী সেশন সমূহকে পাঁচটি ক্লাস্টার করে সেই সময়ের কোডগুলোও জেনে নেওয়া যাবে।
ফলে বর্তমানের ৩০ সেকেন্ড ছাড়াও ফিউচার30+30+30+30+30 = 150 second = 2 min 50 Second পরিমান অবধি যেকোন সিস্টেম এক্সেস করার লগিন কোড পাওয়া যাবে।
এই চিন্তার ওপর ভিত্তি করে গিটহাবে এক্সিকিউট করা প্রজেক্ট হলো RootCode যা একটি নির্দিষ্ট সময়ে ভবিষ্যত ৩০ সেকেন্ড সময়ের জন্য পরবর্তী ৫ বারের কোড এক্সিকিউটিভ করতে সক্ষম (একইসাথে এটি গুগল অথেন্টিকেটর এবং অনুরূপ সিস্টেমে ক্রস ভেরিফাই করে নিশ্চিত হয়েছি বিষয়টার একিউরেসি ভেরিফিকেশনে)।
নাহ, মামা বাড়ীর উন্নতি হয়েছে – দরজাতে ঠক ঠক করার পরিবর্তে কলিংবেল টিপলেই চলে; এখনকার গুগল সিকিউরিটি ডিপার্টমেন্ট ডিরেক্ট কমেন্ট কমপ্লিমেন্ট ছাড়াও বিষয়টাকে একটু গুরুত্ব দিয়ে ইস্যু ট্রাকারে নিয়ে আসেন priority: P4 → P3 নিয়ে আসেন; তদুপরি ক্ল্যারিটির জন্য সিকিউরিটি ডিপার্টমেন্টে ফরোয়ার্ড পূর্বক এনালাইসিস টাইমে যাবতীয় ডিটেইলস এটাচমেন্ট চাহিত পূর্বক ক্ল্যারিফাই করেন; বাউন্টি না হয় আপাত উহ্য থাকুক।
নাহ, এই কুরকুরানি শব্দটা আসলেই শ্রুতিকটু তথাপি মাথাতে একবার যদি কিছু ঢুকে সেটার কনক্লুশন চাই-ই-চাই। সুতরাং ঐ লাগরিদম বেইজড এক মুখী কোড না হয় জেনারেট হলো কিন্তু আমি যখন পরবর্তী যতোক্ষণ ইচ্ছা সময়ব্যাপী জেনারেট হওয়া TOTP জানার ক্ষমতাই রাখি – তাহলে ঐসব কোড হতে কেন মূল সিক্রেট কি রিট্রাইভ হবে না?
অবশ্যই হওয়া উচিত…
উচিত তো বটে, তবে ক্যামনে সেটা হবে সেই প্রশ্নের উত্তরে সলিউশন কোথা হতে পাবো?
ওয়েল, উপায় হিসেবে করা যায় ডিকশোনারী এট্যাক – যা কিনা সকল জেনারেটেড ভবিষ্যৎ কোডগুলো এনলাইসিস করে সেগুলোর ক্যাটালগ মিলিয়ে যদি ডিকশোনারীর সাথে ম্যাচ করানো যায়? হাতে সময় আছে ১৫০ সেকেন্ড – যাতে বিষয়টা ঐখানেই মাঠে মারা পড়ে যায় কেননা একটি সহজ পাসওয়ার্ড ক্র্যাক করতেই তো ব্রুটফোর্স বা ডিকশোনারী এট্যাকে সহজাত লম্বা সময় লাগে সুতরাং এটি কাজ করবে না; আবার বিষয়টা আমার কাছে আন্দাজে ঠিক ছোড়া মনে হয় ফলে স্মার্ট উপায় হিসেবে এটি এমনিতেই পছন্দ হয়নি।
এরপর ভাবনাতে আসে যেহেতু এটা গাণিতিক টার্ম তাই ম্যাথমেটিক্যালি এটাকে সলভ করা যেতে পারে। অর্থাৎ আমার কাছে আছে মোট সময় আছে ১৫০ সেকেন্ড + লগারিদম টার্ম লজিক জানা আছে + ভবিষ্যত সময়ের জন্য কার্যত ভ্যালিড হবে এমন ৫ টি কোড (লগিন সেশান) আছে সুতরাং মূল (Root) Secret Key যৌক্তিকভাবে রিকোভার হওয়া উচিত।
OTP = HAMC(SHA1)S,T(mod10^6) যেখানে S = Secret Key (অজানা) এবং T = Time Counter (বর্তমান সময় / 30) হওয়ায় OTP_1=f(S,T) হতে OTP_5=f(S,T+4) টার্ম [বিঃদ্রঃ এখানে আমি গানিতিক ফাংশান f যেমন ল্যামডা কিংবা 10^6 আসলে 10 To The Power of 6 এভাবে সাধারণ ইউনিকোডে লিখেছি – ক্লাস নাইন টেনের ফিজিক্স বই পড়া থাকলে আশা করি টার্মটির সরলীকরণ বুঝতে প্যারা লাগবে না]।
একইভাবে এই বিষয়টাকে ইমপ্লিমেন্ট করে তৈরী করা RootCodeExplorer যা মূলত সকল লাইভ ওটিপি + টাইম ডিউরেশান ক্যাপচার করে মূল Secret Key রিট্রাইভ করবে।
মস্তিষ্কের ভাবনার শেষ নেই – তাই এই 2 Factor এর এই অথেন্টিকেশানের বিষয়ের এরূপ ল্যাকিংসটাকে কোনভাবে যদি আরেকটু সিকিউর করা যায় সেইভাবে 3F Authenticator নিয়ে ভাবনা যেখানে আপনার Secret Key আপনার কাছেই থাকবে এবং সেটি আপনার লোকালহোস্ট (নিজস্ব সিস্টেম রান করানো হবে); যেসকল কোড জেনারেট হবে তা আপনি নরমালি ভিজ্যুয়ালইজ করতে পারবেন না বরং নানান নাম থাকবে মাত্র [ফলে কারোর সামনে যদি আপনি অথেন্টিকেশান কপিও করেন তবুও কেউ মূল Code জানতে পারবে না] ফলে ভবিষ্যত ৫ টি সময়ের কোড হতেও সিক্রেট Key জেনে লগিন বাইপাস করা যাবে না। উপরন্তু এই টোটাল বিষয়টাই বারবার আপনার সিক্রেট Key না বসিয়ে লোকাল হোস্টের জেসনে এনক্রপ্ট থাকবে। আবার টোটাল সিস্টেমটা’ই হবে পাসওয়ার্ড প্রটেক্টেড – চাইলে আপনি এমনি জাভাস্ক্রিপ্ট Logic দিতে পারেন যেন কেউ যদি অনুমতি ছাড়া আপনার সিকিউরিটি সিস্টেমে ভুল পিন দিয়ে এন্টার করতে চাই তাহলে সমস্ত লোকালহোস্টে সেইভ থাকা কোড ও সিক্রেট Key অটোম্যাটিক ডিলেট বা রিমুভ হয়ে যাবে।
Root Code Authenticator (Github) : –
Access Code: 333
গিটহাব ওপেন রিসোর্সে আপনি চাইলে আপনার মতো করে এপ্লিকেশন রিবিল্ড করে নিতে পারেন।
এনিওয়্যে মাথা হতে একটি জ্যান্ত পোঁকার সলিল সমাধিতে খানিক স্বস্তি এবং স্যাটিসফেকশান লাভ – এটিই ছিলো মূলত গুগল অথেন্টিকেশানের যাত্রা। “চেষ্টা ততোক্ষণ যতোক্ষণ না সফলতা” টার্মটি মাথাতে আক্ষরিকভাবে গেঁথে নিতে পারলে এভারেজলি প্রায় সফলতার লাভের ৯৯% সম্ভাবনা থাকে বলে আমি মনে করি (আমার ব্যক্তিগত ভাবনা) বাকি ঐ ১% তে আপনি যদি হাল ছেড়ে দেন তাহলে আকুল পাথারে পথ পাবেন কোই?
শুভকামনা ও ভালোবাসা রইলো
মন চাইলে টেলিগ্রামে যুক্ত হতে পারেন :- OpenEye
Logs/cookie/wallet.dat থেকে Crypto Phrase and Private Key Found ও coin, token আর nft withdraw)part-1(
Mar 5, 2026 | No Comments | 12 views
১৬০০ কোটি একাউন্ট পাসওয়ার্ড ফাঁস! আপনার একাউন্ট নিরাপদ আছে তো?
Mar 5, 2026 | No Comments | 11 views
ফেসবুকে প্রচলিত হ্যাকার টিম এবং তথাকথিত সার্ভিস!
Mar 4, 2026 | No Comments | 12 views
Logs/cookie/wallet.dat থেকে Crypto Phrase and Private Key Found ও coin, token আর nft withdraw)part-1(
Feb 23, 2026 | No Comments | 17 views