सीधे कंटेंट पर जाएँ
← सभी पोस्ट

tapeshelf वीडियो को कैसे एन्क्रिप्ट करता है, और कोई की क्यों नहीं रखता

tapeshelf पर निजी वीडियो उसके मालिक और मालिक के चुने लोगों के लिए होता है। यहाँ बताया गया है कि ऐप इस बात को कैसे निभाता है, और सुरक्षा कहाँ ख़त्म होती है।

अपलोड से स्ट्रीम तक

आपका ब्राउज़र फ़ाइल सीधे S3-कम्पैटिबल स्टोरेज के एक निजी बकेट में अपलोड करता है, 16 MB के हिस्सों में, जो कनेक्शन टूटने पर वहीं से आगे चलते हैं। फ़ाइल कभी हमारे API सर्वर से होकर नहीं जाती।

एक बैकग्राउंड वर्कर ffprobe से फ़ाइल जाँचता है, फिर उसका मेटाडेटा (शूटिंग की जगह और समय, कैमरा, क्रिएटर, टिप्पणियाँ) हटाता है, फ़ाइल को दोबारा एनकोड किए बिना फिर से लिखकर। साफ़ की गई यही फ़ाइल लोग डाउनलोड करते हैं। 18 अक्टूबर 2026 से पहले अपलोड हुए वीडियो में उनका मेटाडेटा बना रहता है।

1080p तक का H.264 वीडियो, जो कुछ और जाँचें पास कर ले, सिर्फ़ दोबारा पैक किया जाता है, जिसमें कुछ सेकंड लगते हैं। बाकी सब कुछ 1080p तक के H.264 में कन्वर्ट होता है। फिर ffmpeg नतीजे को छह-छह सेकंड के HLS टुकड़ों में काटता है, जिन्हें Safari सीधे चलाता है और बाकी ब्राउज़र hls.js से।

टुकड़ों को एन्क्रिप्ट करना

ffmpeg ख़ुद भी HLS एन्क्रिप्ट कर सकता है, लेकिन उसे की डिस्क पर एक फ़ाइल में चाहिए। हम किसी भी डिस्क पर की नहीं चाहते थे, इसलिए वर्कर टुकड़ों को ख़ुद एन्क्रिप्ट करता है:

  • हर टुकड़ा CBC मोड में AES-128 से एन्क्रिप्ट होता है, वही तरीका जो HLS स्टैंडर्ड तय करता है;
  • की 16 बाइट की होती है, हर वीडियो की अलग, और सिर्फ़ तब तक वर्कर की मेमोरी में रहती है जब तक वह काम कर रहा है;
  • इनिशियलाइज़ेशन वेक्टर टुकड़े का क्रम-संख्या है, जो HLS प्लेयर तब मान लेता है जब प्लेलिस्ट में कोई और न लिखा हो।

निजी बकेट में सिर्फ़ एन्क्रिप्ट किए टुकड़े और उनकी प्लेलिस्ट जाती है। काम ख़त्म होने पर वर्कर की अस्थायी फ़ाइलें हटा दी जाती हैं।

की जो कभी सेव नहीं होती

उसके बाद की कहीं नहीं रखी जाती। रैंडम की बनाकर उसकी रखवाली करने के बजाय, tapeshelf हर बार ज़रूरत पड़ने पर उसे निकालता है:

video key = HKDF-SHA256(master key, "video:" + video id + version) → 16 bytes

वीडियो एडिट करने पर वर्शन बढ़ता है, जिससे उसे नई की मिलती है।

मास्टर की सर्वर के कॉन्फ़िगरेशन में रखा एक सीक्रेट है। यह न डेटाबेस में है, न बकेट में, न बैकअप में। डेटाबेस की कॉपी में कोई वीडियो की नहीं होती और बकेट में सिर्फ़ एन्क्रिप्ट किए टुकड़े होते हैं, इसलिए हमलावर को सर्वर का कॉन्फ़िगरेशन भी चाहिए होगा।

मास्टर की खो जाए, तो कोई वीडियो फिर कभी नहीं चलेगा, और डेटाबेस का कोई बैकअप उसे वापस नहीं लाएगा। यह सबसे ज़्यादा तब मायने रखता है जब आप tapeshelf अपने सर्वर पर चलाते हैं।

“चलाएँ” दबाने पर तीन अनुरोध

  1. प्लेबैक। API जाँचता है कि आप देख सकते हैं: आप क्रिएटर हैं, वीडियो आपकी शेल्फ़ पर है, या वह सार्वजनिक है। फिर वह एक प्लेलिस्ट का पता लौटाता है जिसमें एक साइन किया हुआ टोकन होता है, जिसमें वीडियो और आपका नाम होता है (या किसी का नहीं, अगर आप लॉग इन नहीं हैं), और जो एक घंटे तक मान्य है।
  2. प्लेलिस्ट। API टोकन और आपकी पहुँच फिर से जाँचता है और प्लेलिस्ट को उसी समय दोबारा लिखता है। हर टुकड़ा स्टोरेज का साइन किया हुआ लिंक बन जाता है, और की वाली लाइन वापस API की ओर इशारा करती है।
  3. की। टोकन इसी वीडियो का होना चाहिए। निजी वीडियो के लिए आपका लॉग इन सेशन भी उसी व्यक्ति का होना चाहिए जिसका नाम टोकन में है। तभी API की निकालता है और उसकी 16 बाइट भेजता है।

अस्थायी लिंक में जाँचने को कोई अकाउंट नहीं होता, इसलिए उसके पेज पर टोकन में लिंक का नाम होता है। हर अनुरोध जाँचता है कि लिंक अब भी चल रहा है और उसमें अब भी वह वीडियो है, और टोकन कभी लिंक से ज़्यादा नहीं चलता। मेहमान को अदला-बदली में मिले वीडियो अदला-बदली के पेज पर इसी तरह चलते हैं, एक हफ़्ते तक।

पहुँच के फ़ैसले एक मिनट के लिए कैश होते हैं, ताकि दो घंटे की फ़िल्म हर अनुरोध पर डेटाबेस तक न जाए। हटाया गया वीडियो उस एक मिनट के अंदर अब भी शुरू किया जा सकता है। जिस अस्थायी लिंक की मियाद ख़त्म हो जाए या जिसे रद्द कर दिया जाए, वह तुरंत रुक जाता है। दोनों ही मामलों में, पहले से चल रहा प्लेयर अपनी की और टुकड़ों के लिंक रखता है और चलता रह सकता है।

टुकड़ों के लिंक भी साइन किए होते हैं और उनकी भी मियाद ख़त्म होती है, एक घंटे या उससे ज़्यादा बाद। प्लेयर प्लेलिस्ट एक बार लोड करता है, और छोटे लिंक एक साधारण-से पॉज़ में भी टूट जाते। जब कोई लिंक ख़त्म होता है, तो प्लेयर नया प्लेबैक माँगता है और उसी जगह से आगे चलता है। वैसे भी की के बिना टुकड़ा बेकार है।

पकड़ने लायक कोई फ़ाइल क्यों नहीं है

प्लेयर को वीडियो फ़ाइल का लिंक कभी नहीं मिलता। उसे टोकन से बँधी प्लेलिस्ट, एन्क्रिप्ट किए टुकड़े और जाँच के पीछे रखी की मिलती है। किसी निजी वीडियो की प्लेलिस्ट का पता किसी दोस्त के ब्राउज़र में कॉपी करें, तो कुछ नहीं चलेगा, क्योंकि की के लिए आपका सेशन चाहिए।

डाउनलोड अलग चीज़ है। लॉग इन किए लोग वह डाउनलोड कर सकते हैं जिसे देखने की उन्हें अनुमति है। बिना अकाउंट के आप सिर्फ़ किसी के भेजे अस्थायी लिंक से डाउनलोड कर सकते हैं, या वह जो आपको मेहमान के रूप में अदला-बदली में मिला, एक हफ़्ते तक। डाउनलोड लिंक दो मिनट चलता है।

तस्वीरें अलग तरह से काम करती हैं। कवर, हर वीडियो से लिए गए 16 फ़्रेम और उनसे बना फ़्रेम प्रीव्यू एक सार्वजनिक बकेट में लंबे रैंडम नामों के साथ रखे होते हैं, और उस बकेट की लिस्ट नहीं बनाई जा सकती। निजी वीडियो का प्रीव्यू जानबूझकर दिखता है: यह विज़िटर को दिखाता है कि वह क्या माँगने वाला है।

यह किससे बचाता है

  • जिनके पास पहुँच नहीं है, उन्हें न प्लेलिस्ट मिलती है, न टुकड़ा, न की।
  • किसी टुकड़े का लीक हुआ लिंक एन्क्रिप्ट किया हुआ शोर है। निजी वीडियो की प्लेलिस्ट का लीक हुआ लिंक उस व्यक्ति के सेशन के बिना काम नहीं करता जिसके लिए वह जारी हुआ था, और वैसे भी एक घंटे के अंदर उसकी मियाद ख़त्म हो जाती है।
  • डेटाबेस की चोरी हुई कॉपी से कोई की पता नहीं चलती।

यह किससे नहीं बचाता

  • जो देख सकता है, वह रिकॉर्ड भी कर सकता है। पहुँच वाला व्यक्ति अपनी स्क्रीन रिकॉर्ड कर सकता है या सही टूल से स्ट्रीम सेव कर सकता है। की उसे सही तरीके से दी गई थी। tapeshelf में DRM नहीं है। Widevine या FairPlay जैसे असली DRM व्यावसायिक लाइसेंस सर्वर पर निर्भर करते हैं, और फिर भी स्क्रीन की ओर तने कैमरे को नहीं रोक सकते।
  • जिनके साथ आप शेयर करते हैं। शेयर या अदला-बदली से सामने वाले को एक स्थायी कॉपी मिलती है, और वह फ़ाइल डाउनलोड कर सकता है। आपके भेजे अस्थायी लिंक को खोलने वाला भी, जब तक लिंक चलता है। फ़ाइल के साथ आगे क्या होता है, यह हमारी पहुँच से बाहर है। उन्हीं के साथ शेयर करें जिन पर आपको भरोसा है।
  • ख़ुद सर्वर। यह एंड-टू-एंड एन्क्रिप्शन नहीं है। की सर्वर निकालता है, इसलिए जो उसे चलाता है वह कोई भी वीडियो चला सकता है। tapeshelf.com पर वह हम हैं, और सेवा चलाने और मॉडरेट करने के लिए ज़रूरी होने पर हम निजी वीडियो खोलते हैं। सेल्फ़-होस्ट किए सर्वर पर वह उसका एडमिन है।

छोटा वर्शन सुरक्षा वाले पेज पर है। अगर आप हमारी बात मानने के बजाय ख़ुद जाँचना चाहें, तो कोड ओपन सोर्स है, और आप उसे ख़ुद चला सकेंगे।