আপনি VPN ক্লায়েন্ট খোলেন, পাসওয়ার্ড লেখেন, আর আপনার অথেনটিকেটর থেকে আসা ছয়টি অঙ্ক অবৈধ হিসেবে ফিরে আসে — দুবার, তারপর তৃতীয়বার। গতকাল থেকে অ্যাকাউন্টে কিছুই বদলায়নি, তাই স্বভাবতই অথেনটিকেটর এন্ট্রিটি মুছে আবার স্ক্যান করতে ইচ্ছে করে — সাধারণত এটাই ভুল মেরামত। একবার-ব্যবহারের কোড দ্বিতীয় পাসওয়ার্ড নয়: গেটওয়েকে এটি নির্দিষ্ট ধাপে, নির্দিষ্ট নথিভুক্ত এন্ট্রি থেকে, নির্দিষ্ট সময়সীমার মধ্যে চাইতে হয়, আর বেশিরভাগ প্রত্যাখ্যান অঙ্কগুলো তুলনার আগেই ঘটে। নথিভুক্তি স্পর্শ করার আগে বুঝে নিন আপনি কোন ধাপে আছেন।

প্রম্পটের ক্রম বলে দেয় আপনি কোন প্রবাহে আছেন

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

আকার ভুল ধরা খারাপ কোডের মতো দেখায়। কেবল পাসওয়ার্ডের ফিল্ডে নতুন কোড পেস্ট করুন, সার্ভার তা পাসওয়ার্ডের অংশ হিসেবে পড়বে। ক্লায়েন্টের দিকে OpenVPN 2.4 ও পরের সংস্করণ পার্থক্যটি দৃশ্যমান করে: যে সার্ভার AUTH_FAILED,CRV1: দিয়ে উত্তর দেয় সে চ্যালেঞ্জ-প্রতিক্রিয়া প্রত্যাশা করে, তাই প্রোফাইলে static-challenge বা SCRV1: আকারের পাসওয়ার্ড ফাইল দরকার। কেবল auth-user-pass থাকা পুরোনো প্রোফাইল পাসওয়ার্ড যাচাই করে থেমে যায়, যা লগে OTP ব্যর্থতার মতো দেখায়, যদিও কোনো কোড পাঠানো হয়নি।

WireGuard-কে ব্যতিক্রম হিসেবে বলা দরকার: এটি মানুষ নয়, কী-জোড়া প্রমাণীকরণ করে, তাই কোডের কোনো ফিল্ড নেই। কোনো প্রদানকারী এমন কোড বিজ্ঞাপন দিলে টানেলের বাইরের কিছু তা গ্রহণ করছে।

সার্ভার ছয়টি অঙ্ক দিয়ে কী করে

সময়ভিত্তিক কোড RFC 6238 অনুসরণ করে, যা RFC 4226-এর পুরোনো কাউন্টারভিত্তিক গঠনকে মোড়কে রাখে: চলমান ফ্যাক্টরের উপর HMAC, ডিফল্টে ছয় অঙ্কে ছাঁটা। TOTP-তে চলমান ফ্যাক্টর হলো বর্তমান Unix সময়কে একটি ধাপ দিয়ে ভাগ করা, অপারেটর না বদলালে 30 সেকেন্ড। যাচাইকারী কখনো আপনার অঙ্ক সংরক্ষিত মানের সঙ্গে তুলনা করে না; সে ভাগ করা সিড থেকে প্রত্যাশিত কোড পুনর্গণনা করে এবং সাধারণত পার্শ্ববর্তী ধাপগুলোও গ্রহণ করে, তাই ধীর রাউন্ড-ট্রিপ লগইন ব্যর্থ করে না।

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

কাউন্টারভিত্তিক টোকেন প্রতিবার চাপে কাউন্টার এগিয়ে দেয়, তাই কোড তৈরি হয়ে কখনো পাঠানো না হলে সেগুলো সমন্বয়হীন হয়ে যায়; স্বাভাবিক সমাধান হলো পুনঃসমন্বয় উইন্ডো যা সামনের কয়েকটি মান গ্রহণ করে। অপারেটর HOTP নথিভুক্ত করেছে আর আপনার অ্যাপ TOTP দেখায়, তবে প্রতিটি মান ভুল, এমনভাবে যা ঘড়ির সমস্যার মতো দেখায়। QR কোডের পেছনের প্রভিশনিং URI টাইপ, অঙ্ক, সময়কাল ও হ্যাশের নাম দেয়।

ভুল কোডের মতো দেখানো ব্যর্থতা

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

দ্বিতীয়ত অসামঞ্জস্যপূর্ণ প্যারামিটার সেট। আট অঙ্ক, 60 সেকেন্ডের সময়কাল বা SHA-256 দিয়ে নথিভুক্ত সিড এমন কোড দেয় যা ছয় অঙ্ক, 30 সেকেন্ড ও SHA-1 প্রত্যাশী যাচাইকারী প্রত্যাখ্যান করে, আর ক্লায়েন্টে তা ভুল কোড থেকে আলাদা করা যায় না। এটি মাইগ্রেশনের পরে দেখা দেয়, যেখানে QR কোডের ছবি থেকে এন্ট্রি আবার যোগ করা হয়েছে, বা টোকেন রেকর্ড ডিফল্ট মানে পুনর্নির্মাণ করা হয়েছে।

তৃতীয়ত এটি কোড নিয়ে নয়। গেটওয়ে সাধারণত ভুল পাসওয়ার্ড, মেয়াদোত্তীর্ণ কোড ও নিষ্ক্রিয় অ্যাকাউন্টের জন্য একটি সাধারণ প্রমাণীকরণ ব্যর্থতা ফেরায়, ইচ্ছাকৃতভাবে, যাতে কেউ বুঝতে না পারে কোন ফ্যাক্টর ব্যর্থ হয়েছে। ক্লায়েন্টের ব্যানারের বদলে গেটওয়ে বা RADIUS লগ পড়ুন: কখনো জারি না হওয়া চ্যালেঞ্জ, OTP অ্যাট্রিবিউট ছাড়া অ্যাক্সেস-প্রত্যাখ্যান আর নীতিগত প্রত্যাখ্যান পর্দায় একই রকম দেখায় এবং ভিন্ন পরবর্তী ধাপে নিয়ে যায়।

এটিকে সংকুচিত করার ছোট ক্রম

সবচেয়ে সস্তা যাচাই দিয়ে শুরু করুন এবং যে ধাপটি মেলে না সেখানেই থামুন।

  1. নতুন কোডের জন্য অপেক্ষা করুন, একবার পাঠান, আর খেয়াল করুন চ্যালেঞ্জটি পাসওয়ার্ড গৃহীত হওয়ার আগে না পরে আসে।
  2. অথেনটিকেটরের লেবেল সার্ভারের সংরক্ষিত ব্যবহারকারীনামের সঙ্গে মেলান।
  3. প্রোফাইলটি আদৌ চ্যালেঞ্জের উত্তর দিতে পারে কি না নিশ্চিত করুন, উপরের CRV1 ঘটনার মতো।
  4. ডিভাইসের ঘড়ি একটি পরিচিত সময়-উৎসের সঙ্গে তুলনা করুন; কয়েক ডজন সেকেন্ডের বেশি বিচ্যুতি নিজেই TOTP ভেঙে দেয়।
  5. অপারেটরকে জিজ্ঞাসা করুন টোকেনটি TOTP না HOTP, আর কোন অঙ্ক, সময়কাল ও হ্যাশ নথিভুক্ত হয়েছিল।

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

সিড ও পুনরুদ্ধার কোডকে চক্রের বাইরে রাখুন

ছয়টি অঙ্ক আর তাদের পেছনের গোপনীয়তা বিনিময়যোগ্য নয়। প্রভিশনিং QR কোড বা Base32 সিড অ্যাকাউন্টের প্রতিটি ভবিষ্যৎ কোড তৈরি করে, তাই এটি পাসওয়ার্ডের মতো একই শ্রেণিতে পড়ে: স্ক্রিনশটে নয়, টিকিটের মন্তব্যে নয়, আর যে আগে আপনার সঙ্গে যোগাযোগ করেছে তার চ্যাটেও নয়। পুনরুদ্ধার কোড আলাদা ব্যবস্থা — একবার-ব্যবহারযোগ্য, প্রায়ই কোড-প্রম্পট সম্পূর্ণ এড়িয়ে যায়, আর অ্যাকাউন্ট পরীক্ষা করতে একটি খরচ করলে পরে প্রয়োজন হতে পারে এমন বিকল্প পথ হারায়।

কোড থাকলেও লগইন পেজ বিশ্বাসযোগ্য হয় না: নকল ডোমেইনে OTP প্রম্পট বৈধ কোড সংগ্রহ করে সময়সীমার ভেতর পুনঃপ্রয়োগ করে, আর আপনি কোথায় লিখছেন তা এখনো সার্টিফিকেটই বলে।

ক্রমটি যদি এমন প্রোফাইলে পৌঁছায় যা চ্যালেঞ্জের উত্তর দিতে পারে না, প্রোফাইল ঠিক করে একটি নতুন কোড দিয়ে আবার পরীক্ষা করুন। যদি অসামঞ্জস্যপূর্ণ নথিভুক্তি প্যারামিটারে পৌঁছায়, কেউ কিছু স্ক্যান করার আগে অপারেটরকে টোকেন রেকর্ড পড়তে বলুন। যদি লকআউটে পৌঁছায়, ক্লায়েন্ট বদলানোর বদলে অপেক্ষা করুন — বাধা হলো অ্যাকাউন্টের অবস্থা, অ্যাপ নয়।

সম্পর্কিত নিবন্ধ