हेक्स, Base64URL या अल्फ़ान्यूमेरिक फ़ॉर्मैट में क्रिप्टोग्राफ़िक रूप से सुरक्षित रैंडम टोकन बनाएँ — अपने ब्राउज़र में।
API की, सेशन आइडेंटिफ़ायर, webhook सीक्रेट, पासवर्ड-रीसेट कोड और CSRF टोकन — सबकी एक ही शर्त है: उनका अनुमान लगाना असंभव होना चाहिए। इससे Math.random(), टाइमस्टैम्प और उनसे व्युत्पन्न कुछ भी बाहर हो जाता है — वे इतने पूर्वानुमेय हैं कि brute force से तोड़े जा सकते हैं। यह जेनरेटर crypto.getRandomValues इस्तेमाल करता है — क्रिप्टोग्राफ़िक रूप से सुरक्षित छद्म-यादृच्छिक जेनरेटर (CSPRNG), जिसे ब्राउज़र ऑपरेटिंग सिस्टम की एन्ट्रॉपी से सीड करते हैं — वही स्रोत जिससे TLS कुंजियाँ बनती हैं।
लंबाई का विकल्प तय करता है कि हर टोकन में कितने रैंडम बाइट होंगे (16 से 128, डिफ़ॉल्ट 32) — या अल्फ़ान्यूमेरिक मोड में, कितने कैरेक्टर। हेक्स हर बाइट को 0-9a-f के दो कैरेक्टरों में एनकोड करता है; Base64URL वही बाइट्स अक्षरों, अंकों, माइनस और अंडरस्कोर की छोटी, URL-सुरक्षित स्ट्रिंग में समेट देता है; अल्फ़ान्यूमेरिक 62 कैरेक्टरों वाले A-Z a-z 0-9 सेट से कैरेक्टर चुनता है। अल्फ़ान्यूमेरिक मोड पर एक तकनीकी नोट ज़रूरी है: चूँकि 256, 62 से पूरी तरह विभाजित नहीं होता, हर रैंडम बाइट का सीधे modulo 62 लेने से कुछ कैरेक्टर दूसरों से ज़्यादा बार आते (modulo bias)। यह जेनरेटर इसके बजाय rejection sampling इस्तेमाल करता है — 248 या उससे बड़े बाइट छोड़कर दोबारा निकाले जाते हैं — ताकि हर कैरेक्टर की संभावना बिल्कुल बराबर रहे।
स्टेटस लाइन अनुमानित एन्ट्रॉपी दिखाती है: हेक्स और Base64URL के लिए 8 बिट प्रति बाइट, अल्फ़ान्यूमेरिक के लिए log2(62) ≈ 5.95 बिट प्रति कैरेक्टर। अंगूठे के नियम के तौर पर, 128 बिट को brute force करना पहले ही असंभव-सा है और 256 बिट — 32 बाइट का डिफ़ॉल्ट — लंबी अवधि की API कुंजियों का मानक है। सब कुछ लोकली आपके ब्राउज़र में बनता है, इसलिए कोई सर्वर टोकन कभी नहीं देखता और उन्हें असली सीक्रेट की तरह इस्तेमाल करना सुरक्षित है। उनके साथ वैसा ही बरताव करें: सर्वर पर टोकन का केवल हैश रखें, सादा मान एक ही बार दिखाएँ, और जिन कुंजियों के उजागर होने का शक हो उन्हें रोटेट करें।
एन्ट्रॉपी = लंबाई × log2(वर्णमाला का आकार)। 32 बाइट का टोकन किसी भी एनकोडिंग में 256 बिट एन्ट्रॉपी रखता है; अल्फ़ान्यूमेरिक टोकन में प्रति कैरेक्टर log2(62) ≈ 5.95 बिट होते हैं, इसलिए 43 अल्फ़ान्यूमेरिक कैरेक्टर ≈ 256 बिट।
लंबी अवधि की API कुंजियों के लिए 32 बाइट (256 बिट) ठोस डिफ़ॉल्ट है, और किसी भी सुरक्षा-प्रासंगिक चीज़ के लिए 16 बाइट (128 बिट) व्यावहारिक न्यूनतम। यहाँ लंबे टोकन की कोई क़ीमत नहीं, इसलिए खुले हाथ से लंबाई रखें।
यह वह असमान वितरण है जो 256 बाइट मानों को ऐसी वर्णमाला पर मैप करने से आता है जो 256 को पूरी तरह विभाजित नहीं करती — कुछ कैरेक्टर थोड़े ज़्यादा संभावित हो जाते हैं, जिससे प्रभावी एन्ट्रॉपी मापने लायक़ घट जाती है। यह टूल rejection sampling से इससे बचता है: वर्णमाला के आकार के सबसे बड़े पूर्ण गुणज से ऊपर के बाइट छोड़ दिए जाते हैं।
नहीं। टोकन crypto.getRandomValues से लोकली बनते हैं और कभी भेजे, लॉग या स्टोर नहीं होते — यह पेज कोई नेटवर्क अनुरोध नहीं करता, इसलिए टोकन असली सीक्रेट की तरह इस्तेमाल करने लायक़ सुरक्षित हैं।
सिर्फ़ एनकोडिंग का — रैंडमनेस का स्रोत एक ही है। हेक्स सबसे लंबा है पर हर जगह पार्स होता है; Base64URL लगभग एक-तिहाई छोटा और URL में सुरक्षित है; अल्फ़ान्यूमेरिक हर विराम-चिह्न से बचता है, जो तब काम आता है जब कोई सिस्टम अनुमत कैरेक्टर सीमित रखता है।
सिद्धांत में हाँ, व्यवहार में नहीं: 256 बिट पर कभी डुप्लिकेट दिखने की संभावना हार्डवेयर ख़राबी से भी कहीं कम है। कोलिज़न प्रतिरोध ही वह वजह है जिससे अनुमान-असंभव रैंडम टोकन सीक्रेट के अच्छे आइडेंटिफ़ायर बनते हैं।
Vai.la किसी भी URL को क्लिक आंकड़ों, QR Code और आपके अपने बायोलिंक के साथ एक शॉर्ट लिंक में बदल देता है।
टूल्स का इस्तेमाल कैसे होता है या उनके परिणामों के आधार पर लिए गए निर्णयों के लिए Vai.la ज़िम्मेदार नहीं है।