নন্স (Nonce) - নেটওয়ার্ক সিকিউরিটি ও ক্রিপ্টোগ্রাফিতে ভূমিকা
Nonce হলো "Number used ONCE" (শুধু একবার ব্যবহৃত সংখ্যা) এর সংক্ষিপ্ত রূপ। এটি একটি র্যান্ডম বা অर्ध-র্যান্ডম সংখ্যা/মান যা একটি নির্দিষ্ট প্রোটোকল বা ট্রানজ্যাকশনে শুধু একবার ব্যবহার করা হয়। নন্স রিপ্লে আক্রমণ (Replay Attack) রোধ এবং লাইভনেস (Liveness) নিশ্চিত করতে ব্যবহৃত হয়।
নন্স কীভাবে কাজ করে?
- জেনারেশন: প্রোটোকল ইনিশিয়েটর (ক্লায়েন্ট/সার্ভার) একটি ক্রিপ্টোগ্রাফিক্যালি সিকিউর র্যান্ডম নম্বর জেনারেট করে (CSPRNG ব্যবহার করে)।
- ট্রান্সমিশন: নন্সটি অন্য পক্ষের পাঠানো হয় (চ্যালেঞ্জ হিসেবে বা প্রোটোকল মেসেজের অংশ হিসেবে)।
- ব্যারিফিকেশন: গ্রহণকারী নন্সটি ভেরিফাই করে (যেমন: হ্যাশে ব্যবহার করে, সিগনেচার ভেরিফাই করে)।
- স্টোরেজ/ট্র্যাকিং: সিস্টেম ব্যবহার করা নন্সগুলো সংরক্ষণ করে (ক্যাশে/ডেটাবেসে) যাতে পুনরায় ব্যবহার হয় না। TTL (Time-To-Live) সেট করে পুরানো নন্স পার্জ করা হয়।
নন্সের প্রয়োজনীয়তা (Why Nonce?)
| উদ্দেশ্য | ব্যাখ্যা |
|---|---|
| রিপ্লে আক্রমণ রোধ (Replay Attack Prevention) | আক্রমণকারী একটি বৈধ মেসেজ ক্যাপচার করে পরে পুনরায় পাঠাতে পারে না কারণ নন্সটি ইতিমধ্যে ব্যবহৃত হয়েছে এবং সিস্টেম এটিকে রিজেক্ট করবে। |
| লাইভনেস নিশ্চিতকরণ (Liveness/Freshness) | প্রuves করে যে মেসেজটি হালনিয়ত তৈরি হয়েছে, পুরানো রিকর্ডেড মেসেজ নয়। |
| সেশন ইউনিকনেস (Session Uniqueness) | প্রতিটি সেশন/ট্রানজ্যাকশন уникаল করে তোলে, কী রিয়ুজ আক্রমণ রোধ করে। |
| ক্রিপ্টোগ্রাফিক প্রোটোকল সিকিউরিটি | TLS, IPsec, SSH, Kerberos, OAuth, JWT, Blockchain - সব জায়গায় নন্স/IV (Initialization Vector) ব্যবহার হয়। |
নন্সের প্রকারভেদ ও ব্যবহারের ক্ষেত্র
| প্রসঙ্গ | নন্সের রূপ | উদাহরণ |
|---|---|---|
| TLS/SSL Handshake | Client Random + Server Random (৩২ বাইট প্রতিটি) | Master Secret তৈরির ইনপুট, সেশন কী ডাইভারসিটি। |
| AES-GCM / ChaCha20-Poly1305 | IV / Nonce (৯৬ বিট / ১২ বাইট) | প্রতিটি এনক্রিপশন অপারেশনে ইউনিক নন্স বাধ্যতামূলক (রিপ্লে/কollision রোধ)। |
| JWT (JSON Web Token) | jti (JWT ID) claim | টোকেন রিপ্লে রোধ (ওপশনাল কিন্তু প্রস্তাবিত)। |
| OAuth 2.0 / OIDC | nonce প্যারামিটার (Authorization Request-এ) | ID Token রিপ্লে আক্রমণ রোধ, ক্লায়েন্ট সেশন বাইন্ডিং। |
| Web Crypto / CSP | SubtleCrypto.encrypt()-এ IV/Nonce প্যারামিটার | ব্রাউজার-ভিত্তিক এনক্রিপশনে নন্স প্রোভাইড করা বাধ্যতামূলক। |
| Blockchain (Bitcoin Mining) | Block Header-এ Nonce (৩২ বিট) | Miners নন্স পরিবর্তন করে Hash < Target কন্ডিশন মিট করে (Proof of Work)। |
| API Security | Request Header-এ Nonce (র্যান্ডম স্ট্রিং/টাইমস্ট্যাম্প) | রিপ্লে আক্রমণ রোধ, রিকোয়েস্ট ইউনিকনেস। Shared Secret + Nonce = Signature। |
| Kerberos | Authenticator-এ Timestamp + Nonce | রিপ্লে উইন্ডো (সাধারণত ৫ মিনিট) এনফোর্স করে। |
নন্স জেনারেশনের সেরা অনুশীলন (Best Practices)
- CSPRNG ব্যবহার করুন:
/dev/urandom,CryptGenRandom,secrets.token_bytes()(Python),window.crypto.getRandomValues()(Web)। Math.random() ব্যবহার করবেন না। - पर্যাপ্ত এনট্রপি: ন্যূনতম ৯৬ বিট (১২ বাইট) AES-GCM-এর জন্য, ১২৮ বিট (১৬ বাইট) সাধারণ ব্যবহারের জন্য।
- কখনো রিয়ুজ করবেন না: একই কী দিয়ে একই নন্স দুবার ব্যবহার করলে বিনাশকারী ফলাফল (AES-GCM-এ কী রিকভারি সম্ভব)।
- কাউন্টার ভিত্তিক নন্স: যদি র্যান্ডম জেনারেশন কঠিন হয়, তবে মনোটোনিক কাউন্টার ব্যবহার করুন (পারসিস্টেন্ট স্টোরেজ দরকার)।
নন্স ট্র্যাকিং: ইন-মেমরি সেট/ব্লুম ফিল্টার/Redis দিয়ে ব্যবহার করা নন্স ট্র্যাক করুন (TTL সহ)। নন্স সম্পর্কিত ভালনারেবিলিটি (Nonce Vulnerabilities)
- Nonce Reuse: AES-GCM-এ একই কী+নন্স দুবার ব্যবহার করলে প্লেইনটেক্সট রিকভারি সম্ভব (Forbidden Attack)।
- Predictable Nonce: দুর্বল RNG (যেমন: লিনাক্স কernel এনট্রপি অভাব, পুরানো جاয়া SecureRandom বাগ) -> নন্স প্রিডিক্টেবল -> আক্রমণ।
- Nonce Overflow: কাউন্টার ভিত্তিক নন্সে ওভারফ্লো -> রিয়ুজ।
- Missing Nonce Validation: সার্ভার নন্স চেক না করলে -> রিপ্লে আক্রমণ সম্ভব।
উদাহরণ: Python-এ সিকিউর নন্স জেনারেশন
import secrets # AES-GCM-এর জন্য ৯৬-বিট (১২ বাইট) নন্স nonce = secrets.token_bytes(12) # CSPRNG ব্যবহার করে # JWT/OAuth-এর জন্য URL-safe নন্স nonce_urlsafe = secrets.token_urlsafe(16) # ১২৮ বিট এনট্রপি # API রিকোয়েস্ট নন্স (টাইমস্ট্যাম্প + র্যান্ডম) import time api_nonce = f"{int(time.time())}:{secrets.token_hex(8)}"সারসংক্ষেপ: নন্স (Nonce) হলো "শুধু একবার ব্যবহৃত সংখ্যা" যা রিপ্লে আক্রমণ রোধ করে, লাইভনেস নিশ্চিত করে, এবং ক্রিপ্টোগ্রাফিক প্রোটোকলগুলোর (TLS, AES-GCM, JWT, OAuth, Blockchain, API) একটি ভিত্তিয় স্তম্ভ। সঠিক জেনারেশন (CSPRNG), ইউনিকনেস, এবং ভ্যালিডেশন - এই তিনটি নন্স সিকিউরিটির কী।