सुरक्षा · विस्तार से
पूरा क्रिप्टोग्राफ़िक जीवनचक्र
हर कदम पर आपके डेटा के साथ क्या होता है, इसका सटीक ब्योरा — प्रिमिटिव, पैरामीटर और भरोसे की सीमाएँ साफ़-साफ़। हर कदम आसान भाषा के सार से शुरू होता है, ताकि आप जितनी गहराई तक चाहें, पढ़ सकें।
कदम 01 · एन्क्रिप्शन
आपका सीक्रेट आपके डिवाइस पर सील होता है
आसान शब्दों में: उलझाने का काम आपके ब्राउज़र में होता है, कुछ भी अपलोड होने से पहले। हमें जो मिलता है, वह पहले से ही अपठनीय होता है।
जब आप एन्क्रिप्ट करें दबाते हैं, तो ब्राउज़र WebCrypto CSPRNG से एक नई 256-बिट कंटेंट कुंजी लेता है और आपके पेलोड को AES-256-GCM से एन्क्रिप्ट करता है। GCM प्रमाणित है: हर हिस्से (chunk) के साथ 128-बिट टैग होता है, इसलिए बाद में की गई कोई भी छेड़छाड़ चुपचाप डिक्रिप्ट होने के बजाय पकड़ में आ जाती है।
टेक्स्ट और फ़ाइलों के साथ एक जैसा बर्ताव होता है — दोनों एक ही बंद बाइनरी ब्लॉब बन जाते हैं, जिसे एक मानक आकार तक पैड किया जाता है, ताकि छोटा पासवर्ड और छोटी फ़ाइल एक जैसे दिखें। प्लेनटेक्स्ट कभी नेटवर्क को नहीं छूता और कभी टैब की मेमोरी से बाहर नहीं जाता।
कदम 02 · कुंजी की हिफ़ाज़त
कुंजी लिंक में छिपी रहती है, हमारे सर्वर पर नहीं
आसान शब्दों में: लिंक में # के बाद वाले हिस्से में कुंजी होती है — और ब्राउज़र वह हिस्सा कभी किसी सर्वर को नहीं भेजते।
आपके लिंक के URL फ़्रैगमेंट में एक रैंडम 256-बिट सीड होता है — # के बाद का सब कुछ। URL स्पेसिफ़िकेशन के अनुसार ब्राउज़र फ़्रैगमेंट को हटा देता है और वह हमारे सर्वर को भेजे गए अनुरोध में कभी शामिल नहीं होता। उस सीड से ब्राउज़र HKDF के ज़रिए सीक्रेट ढूँढने के लिए एक लुकअप मान और वह कुंजी निकालता है जो कंटेंट कुंजी को खोलती है। सर्वर को कभी सिर्फ़ लुकअप मान का हैश ही दिखता है।
पाने वाले का ब्राउज़र फ़्रैगमेंट से सीड पढ़ता है और यही गणना वहीं करता है। यहाँ “ज़ीरो-नॉलेज” का यही मतलब है: लिंक के बिना सिर्फ़ साइफ़रटेक्स्ट का होना बेकार है।
कदम 03 · वैकल्पिक पासफ़्रेज़
एक दूसरा लॉक, जो सिर्फ़ इंसानों के पास है
आसान शब्दों में: पासफ़्रेज़ जोड़ दें, तो पूरा लिंक रखने वाला भी उसके बिना सीक्रेट नहीं खोल सकता।
अगर आप पासफ़्रेज़ रखते हैं, तो उसे Argon2id से मज़बूत किया जाता है — यह एक मेमोरी-हार्ड कुंजी-व्युत्पत्ति फ़ंक्शन है — और सीड के साथ मिलाकर वह कुंजी बनाई जाती है जो कंटेंट कुंजी को लपेटती है। पासफ़्रेज़ ख़ुद कभी न भेजा जाता है, न सहेजा जाता है; उसे सिर्फ़ आप और पाने वाला जानते हैं। ग़लत अंदाज़ों को पाने वाले के ब्राउज़र में उसी डेटा पर दोबारा आज़माया जाता है जो उसके पास पहले से है, इसलिए सर्वर उन्हें गिन नहीं सकता।
मेमोरी-हार्ड होने की वजह से बड़े पैमाने पर ऑफ़लाइन अंदाज़ा लगाना GPU और ASIC पर भी महँगा पड़ता है। पासफ़्रेज़ को लिंक से अलग माध्यम से शेयर करें, तो दोनों कारक कभी एक जगह नहीं मिलते। Argon2 मॉड्यूल हर बार सीक्रेट बनाते और दिखाते समय लाया जाता है, ताकि नेटवर्क यह न बता सके कि किन सीक्रेट पर पासफ़्रेज़ है।
कदम 04 · ट्रांज़िट & स्टोरेज
आपके डिवाइस से सिर्फ़ साइफ़रटेक्स्ट बाहर जाता है
आसान शब्दों में: हम एक बंद डिब्बा और समाप्ति का समय रखते हैं। इसके अलावा कुछ नहीं — न प्लेनटेक्स्ट, न कुंजी, न आपका कोई रिकॉर्ड।
ब्लॉब TLS पर अपलोड होता है और स्टोरेज में साइफ़रटेक्स्ट के रूप में रखा जाता है, साथ में हैश किए गए क्रेडेंशियल, उसकी अवधि और राउंड किया हुआ समाप्ति समय। हम जान-बूझकर भेजने वाले की पहचान, पाने वाला, IP लॉग, बनाए जाने का समय या एक्सेस हिस्ट्री — इनमें से कुछ भी नहीं रखते। कोई अकाउंट सिस्टम नहीं है जिससे किसी सीक्रेट को किसी व्यक्ति से जोड़ा जा सके। रेट लिमिटिंग पते के HMAC पर काम करती है, एक ऐसे सॉल्ट के साथ जो बदलता रहता है, इसलिए बदलाव से पहले की किसी चीज़ को बाद की किसी चीज़ से नहीं जोड़ा जा सकता।
क्योंकि फ़्रैगमेंट के सीड के बिना सहेजी गई चीज़ का कोई मतलब नहीं, इसलिए सर्वर में सेंध लगे या कोई कानूनी आदेश (सबपीना) आए, तो भी बस बंद बाइट और हैश हाथ लगते हैं, जिन्हें वापस किसी चीज़ में नहीं बदला जा सकता।
कदम 05 · प्राप्ति & विनाश
जो पहले पढ़े, वही पाए — फिर सब मिटा
आसान शब्दों में: एक बार खुलने वाला लिंक खोलने पर डिब्बा एक बार सौंपा जाता है और सर्वर की कॉपी मिटा दी जाती है। या आप जब चाहें, उसे ख़ुद नष्ट कर दें।
सीक्रेट दिखाने वाला पेज लोड होने पर कुछ भी नहीं लाया जाता: अनुरोध सिर्फ़ असली क्लिक या की-प्रेस पर जाता है, इसलिए लिंक स्कैनर और चैट प्रीव्यू किसी सीक्रेट को इस्तेमाल नहीं कर सकते। एक बार खुलने वाले सीक्रेट के लिए सर्वर एक ही कंडीशनल अपडेट में रो पर क्लेम करता है — ठीक एक अनुरोध जीतता है — और उसी पल से सीक्रेट इस्तेमाल हो चुका माना जाता है। कनेक्शन टूट जाए, तो वही ब्राउज़र 15 मिनट तक दोबारा डाउनलोड कर सकता है; कोई और नहीं कर सकता, और जिस क्लेम की पुष्टि नहीं होती, वह नष्ट कर दिया जाता है, कभी वापस नहीं लिया जाता। समय-सीमा वाले सीक्रेट समाप्त होने तक सामान्य रूप से पढ़े जा सकते हैं।
हर सीक्रेट का एक निजी बर्न लिंक भी होता है। उसे खोलने भर से कुछ नष्ट नहीं होता; पुष्टि करते ही साइफ़रटेक्स्ट तुरंत मिट जाता है — किसी भी पाने वाले के पढ़ने से पहले।
ख़तरे का मॉडल
shhnote क्या देख सकता है और क्या नहीं
ईमानदार तस्वीर। भरोसे की सीमा ठीक-ठीक कहाँ है, यह यहाँ है।
कभी आपके डिवाइस से बाहर नहीं जाता
हम क्या नहीं देख सकते
आपका प्लेनटेक्स्ट · कंटेंट कुंजी और सीड · आपका पासफ़्रेज़ · पासफ़्रेज़ रखा गया या नहीं · सीक्रेट किसने बनाया या खोला · वह कब बनाया गया · IP-स्तर के एक्सेस लॉग। इनमें से कुछ भी न भेजा जाता है, न रखा जाता है।
हमारे सर्वर पर सहेजा जाता है
हमारे पास क्या रहता है
एक एन्क्रिप्टेड ब्लॉब जिसे हम खोल नहीं सकते · उसके पैड किए गए आकार की श्रेणी · उन मानों के वन-वे हैश जिनसे आपका ब्राउज़र उसे ढूँढता या बर्न करता है · वह एक बार खुलने वाला है या समय-सीमा वाला · राउंड किया हुआ समाप्ति समय। आपके लिंक के सीड के बिना यह सब बेकार है।
जानने लायक
ईमानदार सावधानियाँ
पूरा लिंक (और अगर रखा गया है तो पासफ़्रेज़) जिसके पास है, वह एक बार खुलने वाला सीक्रेट पढ़ सकता है — लिंक को ही सीक्रेट मानें। सीक्रेट दिखाए जाने के बाद, आपके पेज छोड़ने पर पेज जितना हो सके उतना ओवरराइट कर देता है, लेकिन JavaScript इसकी गारंटी नहीं दे सकता; काम हो जाने पर टैब बंद कर दें। ऑटोमेशन से चलने वाला कोई ब्राउज़र, जो असली इनपुट डालता है, किसी इंसान की तरह ही एक बार खुलने वाला सीक्रेट खोल सकता है — तब पाने वाले को कुछ नहीं मिलता, जो ईमानदार नतीजा है। सीक्रेट मिटाने से रिकॉर्ड हट जाता है; एन्क्रिप्टेड अवशेष जर्नल, खाली डिस्क स्पेस या बैकअप में ओवरराइट होने तक रह सकते हैं, बिना कुंजी के साइफ़रटेक्स्ट के रूप में। डेटाबेस के बाहर रखे गए बड़े सीक्रेट के साथ वह समय जुड़ा रहता है जब फ़ाइल लिखी गई थी। और किसी भी वेब ऐप की तरह, आप उस कोड पर भरोसा करते हैं जो आपके ब्राउज़र को भेजा जाता है — इसीलिए shhnote ओपन सोर्स है और इसे ख़ुद होस्ट किया जा सकता है।
क्रिप्टोग्राफ़िक स्पेसिफ़िकेशन
हर प्रिमिटिव, एक ही जगह
एन्क्रिप्शन
64 KiB के हिस्सों में प्रमाणित सिमेट्रिक एन्क्रिप्शन। एक 256-बिट कुंजी और हर हिस्से पर एक इंटेग्रिटी टैग, ताकि छेड़छाड़ या काट-छाँट पकड़ में आ जाए — वह सिर्फ़ अपठनीय होकर न रह जाए।
कुंजी व्युत्पत्ति
कुंजियाँ और पहचानकर्ता सीड से HKDF-SHA-256 के ज़रिए बनते हैं। वैकल्पिक पासफ़्रेज़ को मेमोरी-हार्ड KDF से मज़बूत किया जाता है, जिससे ख़ास हार्डवेयर पर भी ऑफ़लाइन ब्रूट-फ़ोर्स धीमा और महँगा हो जाता है।
रैंडमनेस
सीड, कुंजियाँ, सॉल्ट और नॉन्स ब्राउज़र के क्रिप्टोग्राफ़िक रूप से सुरक्षित जनरेटर से आते हैं। कभी Math.random() नहीं, कभी अनुमान लगाने लायक नहीं।
कुंजी की हिफ़ाज़त
सीड आपके लिंक में # के बाद रहता है। ब्राउज़र फ़्रैगमेंट कभी नहीं भेजते, इसलिए वह कभी हमारे सर्वर तक नहीं पहुँचता।
ट्रांज़िट में
आपके डिवाइस से सिर्फ़ साइफ़रटेक्स्ट ही बाहर जाता है, आधुनिक TLS के ज़रिए। हमें जो मिलता है, वह एक बंद ब्लॉब है जिसे हम खोल नहीं सकते।
स्टोरेज में
हम एक एन्क्रिप्टेड ब्लॉब, उसके क्रेडेंशियल के वन-वे हैश और राउंड किया हुआ समाप्ति समय रखते हैं — न प्लेनटेक्स्ट, न कुंजियाँ, न भेजने या पाने वाले का मेटाडेटा।
तकनीकी सवाल-जवाब
सुरक्षा में रुचि रखने वालों के लिए
एक-साथ आने वाले अनुरोधों (रेस) के बीच एक-बार की गारंटी कैसे बनी रहती है?
सीक्रेट दिखाने पर एक ही कंडीशनल अपडेट चलता है, जो रो को “active” से “claimed” में बदल देता है। एक-साथ आए दो अनुरोध दोनों सफल नहीं हो सकते; दूसरे को पहले से claimed रिकॉर्ड मिलता है और उसे भी वही “कोई सीक्रेट नहीं मिला” जवाब मिलता है जो किसी और को मिलता। क्लेम कभी वापस नहीं लिया जाता: अगर डाउनलोड बीच में खो जाए, तो क्लेम टोकन रखने वाला तय अवधि के अंदर दोबारा डाउनलोड करता है, वरना सीक्रेट बिना पढ़े नष्ट हो जाता है।
क्वेरी पैरामीटर की जगह URL फ़्रैगमेंट क्यों?
क्वेरी पैरामीटर सर्वर को भेजे जाते हैं और एक्सेस लॉग, प्रॉक्सी और एनालिटिक्स में पहुँच जाते हैं। फ़्रैगमेंट (# के बाद) को URL स्पेसिफ़िकेशन के अनुसार क्लाइंट की तरफ़ ही रहना होता है — ब्राउज़र उसे कभी HTTP अनुरोध में नहीं डालता। ज़ीरो-नॉलेज डिज़ाइन की पूरी बुनियाद यही ख़ासियत है। सीक्रेट दिखाने के बाद पेज फ़्रैगमेंट को एड्रेस बार और हिस्ट्री से भी हटा देता है।
लिंक स्कैनर एक बार खुलने वाले सीक्रेट को समय से पहले बर्न क्यों नहीं कर पाते?
देखने वाला पेज हर सीक्रेट के लिए एक जैसा स्टैटिक दस्तावेज़ है और लोड होने पर कुछ भी नहीं लाता। अनुरोध सिर्फ़ एक भरोसेमंद क्लिक या की-प्रेस पर भेजा जाता है — स्क्रिप्ट से किया गया click() या फ़ॉर्म सबमिशन नहीं गिना जाता। ऑटोमेटेड स्कैनर (ईमेल सुरक्षा, चैट प्रीव्यू, एंटीवायरस) सिर्फ़ वह स्टैटिक ढाँचा ही लोड करते हैं।
क्या मैं इसे जाँच सकता/सकती हूँ या ख़ुद होस्ट कर सकता/सकती हूँ?
हाँ। पूरा सोर्स AGPLv3 के तहत सार्वजनिक है, प्रोटोकॉल एक स्पेसिफ़िकेशन में लिखा गया है जिसके साथ कन्फ़ॉर्मेंस वेक्टर हैं जिनसे कोई भी इम्प्लीमेंटेशन ख़ुद को जाँच सकता है, और एक सेल्फ़-होस्टिंग गाइड भी है। आप क्लाइंट-साइड क्रिप्टो का ऑडिट कर सकते हैं और अपना इंस्टेंस चला सकते हैं, ताकि भरोसे की सीमा पूरी तरह आपके हाथ में हो।
क्या दुरुपयोग रोकने के लिए कुछ लॉग किया जाता है?
हम हर सीक्रेट के लिए न कोई एक्सेस लॉग रखते हैं, न IP हिस्ट्री। रेट लिमिटिंग पते के एक कुंजी-आधारित हैश का इस्तेमाल करती है, एक ऐसे सॉल्ट के साथ जो बदलता रहता है और बदलने पर हर काउंटर को भी साफ़ कर देता है। दुरुपयोग की रिपोर्ट रोज़ के हिसाब से गिनी जाती हैं; किस सीक्रेट की रिपोर्ट हुई, इसका कोई रिकॉर्ड नहीं होता।
सुरक्षित रूप से शेयर करने के सुझाव
- पासफ़्रेज़ लिंक से अलग तरीके से भेजें, जैसे लिंक ईमेल से और पासफ़्रेज़ फ़ोन पर।
- आपके काम आने वाली सबसे छोटी समय-सीमा चुनें।
- पासवर्ड और ऐसी दूसरी जानकारी के लिए एक बार खुलने वाले सीक्रेट का इस्तेमाल करें जिसे ठीक एक बार पढ़ा जाना चाहिए।
कमज़ोरी की रिपोर्ट करना
अगर आपको लगता है कि आपको इस साइट में कोई सुरक्षा समस्या मिली है, तो कृपया [email protected] पर ईमेल करें और किसी और को बताने से पहले हमें निजी तौर पर बताएँ। आपको क्या मिला और उसे दोबारा कैसे किया जा सकता है, यह भी बताएँ।
हम:
- 5 कार्य-दिवसों के अंदर जवाब देंगे;
- इसे ठीक करते समय आपको जानकारी देते रहेंगे;
- अगर आप चाहें, तो सुधार प्रकाशित करते समय आपको श्रेय देंगे।
टेस्टिंग के दौरान कृपया दूसरों के डेटा तक न पहुँचें, सेवा में रुकावट न डालें, और ऐसे ऑटोमेटेड स्कैन न चलाएँ जो उस पर भारी बोझ डालें।
shhnote सॉफ़्टवेयर में ही मौजूद कमज़ोरियों के लिए: प्रोजेक्ट की सुरक्षा नीति देखें।
आज़माकर देखें — दस सेकंड लगते हैं
कुछ सीक्रेट लिखें, अपना एक बार खुलने वाला लिंक पाएँ, और उसे ग़ायब होते देखें।