Google অথেনটিকেশনের চেয়েও শক্তিশালী সিকিউরিটি সিস্টেম!

আমরা নিশ্চয়ই Google Authenticator সিস্টেম সম্পর্কে জানি – যেটা কিনা প্রতি ৩০ সেকেন্ড অন্তর অন্তর নতুন করে কোড জেনারেট করে যা Login কোড সিস্টেমে এক্সিকিউট হয়। এখানে শুধু গুগল
অথেনটিকেটর বলছি বলেই যে Google কে মিন করছি সেটা নয় কিন্তু বরং Microsoft Authenticator একই প্রসেসে কাজ করে; এটি হলো মূলত TOTP সিস্টেম।

সমস্যা কি?

এটি Google এর Bug Bounty সিস্টেমের একটি অংশ ছিলো তাই পরিপূর্ণভাবে ডিসক্লোজ না করেও এ বিষয়টি সম্পর্কে TrickBD তে লিখেছিলাম Google Authenticator – আসলে কতোটুকু অথেন্টিক?!

এটা বহুকাল আগে হতে মাথায় থাকা একটি সাবজেক্টিভ ফ্যাক্টের বহিঃপ্রকাশ ছিলো তদুপরি Google Security টিম বাউন্ট করার একদম শুরুতে বিষয়টা তেমন পাত্তা দেয়নি যার রেসপন্সের অংশ এমন ছিলো:

যদিও পরবর্তীতে সিকিউরিটি লেয়ারে বিষয়টি গুরুত্ব সহকারে কনসার্ন করা হয়।

ফ্যাক্ট

যাই হউক এখানে একটা বিষয় একটু মাথা খাটিয়ে ভাবুন যে Google কিন্তু স্বীকার করছে যে যদি আপনি সিক্রেট Kye জানেন তবে ফিউচারের কোডগুলোও আপনি জানবেন [তথাপি বিষয়টি আসলে পরমভাবে Google এর সিকিউরিটি Vulnerability নয় বরং TOTP সিস্টেম সীমাবদ্ধতা বলা অধিক সংগত]। এখন আপনি/আমি আমরা আসলে কি ভাবি?
আমরা ভাবি যে যেহেতু ৩০ সেকেন্ড পরপর নতুন কোড জেনারেট হচ্ছে সুতরাং কোড ছাড়া তো কেউ লগিন করতে পারবে না – যেখানে সেশান টাইম মাত্র ৩০ সেকেন্ড [সময় নিয়েও কাহিনী আছে সেই কথা পরে বলি] অথচ সিক্রেট Key জানা থাকলে আসলে এই ৩০ সেকেন্ড সেশান জিনিসটাই যে নন-ভ্যালিড হয়ে যাচ্ছে সেটা কি ভাবছেন না?

আচ্ছা গাণিতিকভাবে বোঝা যাক:

TOTP এর বর্তমান সূত্র:
OTP = HMAC-SHA1(SecretKey, floor(time/30))
সুতরাং Secret Key জানলে → সব ভবিষ্যৎ কোড জানা যায়!

যাই হউক সিস্টেমে ভবিষ্যত কোড সমূহ হতে Root Code Explore করার রিভার্স ইঞ্জিনিয়ারিং করা যেতে পারে; যেখানে রিভার্স এর উল্টো রিভার্সে Secret Key প্যাটার্নের এনভল্ব উন্মুক্ত হয়। যদিও Theoretically ম্যাথ ফাংশানে
for each possible K:
valid = true
for each (T_i, OTP_i):
if TOTP(K, T_i) != OTP_i:
valid = false
break
if valid:
return K
ধরেও নেওয়ায় হয় তবুও key size = 160-bit হয় যেখানে আপাত ফিউচারের ৬ টি কোডে জেনারেট হওয়া মোট ডাটার ক্যালকুলেশান নিম্নরূপ:
HMAC-SHA1 output = 160-bit
কিন্তু OTP = শুধু 6 digit ≈ 20-bit
তাহলে ডাটা লস হয় 140 bit এবং সেটা HMAC এর ভিতরে Hash + Key Mixing হয়।

তথাপি Root Code এক্সপ্লয়েট হতে যেহেতু বিষয়টি এক্সপ্লোর পসিবল তাই পরোক্ষভাবে আসলে সিস্টেম সিকিউরিটি ল্যাকিংস হয়। অপরাপর ঐ উপরের Law তে টাইমার ফাংশান ম্যাচিউরিটিও ব্রেক ডাউন হয়।

লাইভ এক্সামপোল

আচ্ছা আপনি একটা কাজ করতে পারেন – যেকোন সিকিউরিটি সিস্টেম একটি ডামি সিক্রেট Key এর বিপরীতে জেনারেট হওয়া কোড দিয়ে 30 সেকেন্ড সময়ে ট্রাই করুন; এই সেশান (30 seconds) + external time ল্যাপস (অতি অল্প পরিমান) সময়েও লগিন এক্সেস করতে পারছেন; যদিও আক্ষরিকভাবে ততোক্ষণে পূর্বের কোডের ভ্যালিডিটি শেষ হয়ে যাবার কথা এবং নতুন কোডের সেশান শুরু হওয়া উচিত; যদিও ঐ সূক্ষ পরিমান ল্যাপস সেশানের ইউটিলিটি তখনও বিদ্যমান আছে।

Google এর চেয়ে স্ট্রং সিকিউরিটি সিস্টেম

নাহ, বিষয়টি আসলে এভাবে Google এর সিকিউরিটি’কে টেক্কা দেওয়া বলা উচিত নয় তবে TOTP সিকিউরিটি অপেক্ষা অধিকতর উন্নত সিকিউরিটি সিস্টেম ডেভোলপ (কাস্টমাইজ) করা যায়।
যেখানে: FSOTP প্রোটোকল দিয়ে:
প্রতি ৩০ সেকেন্ডে key ratchet হয়:
S_{t+1} = SHA-256(S_t ∥ R_t)

ফলে Secret চুরি হলেও R_t (server random) না জানলে পরবর্তী কোড বের করা গাণিতিকভাবে অসম্ভব।

সিকিউরিটি ফাংশান:
• AES-256-GCM — vault encryption
• PBKDF2 × 310,000 — password hashing
• CSPRNG — সব random value
• Auto-lock — idle এ লক
• Clipboard auto-clear — ৩০s পর মুছে যায়

সম্পূর্ণ বিষয়টি সকলের জন্য উন্মুক্ত GitHub রিপোজিটরী হিসেবে রইলো – যেন পাসওয়ার্ড এর পরিবর্তে নতুন করে সেইফওয়ার্ড এর যুগে আমরা প্রবেশ করতে পারি।
GitHub রিপোজিটরী : https://github.com/HumayunShariarHimu/SafeWordApp
SafeWord Deployed Application : SafeWordApp

সবিশেষ এতোটুকুই বলা যেতে পারে যেকোন সিকিউরিটির অপর পীঠে থাকে Vulnerability – যা অবিষ্কার করে সেটার এক্সেস করতে পারার সক্ষমতা শুধুই বাগ হান্টিং বরং এরচেয়েও অধিক “হ্যাকিং” – এটি বাউন্টির চেয়েও অধিক স্যাটিসফেকশান যোগায়।

সকলে জন্য নিরন্তর শুভকামনা ও ভালোবাসা রইলো।