मुफ़्त प्राइवेसी टूल

फ़ाइल सील करें

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

पूरी तरह इसी टैब में चलता है। यह पेज किसी भी सर्वर से बात कर ही नहीं सकता।

हर पैरामीटर, खुलकर

सिफ़र
AES-256-GCM (WebCrypto), हर चंक पर 128-बिट टैग
कुंजी
ब्राउज़र के CSPRNG से 256 बिट, हर सील पर नई बनाई गई, एक बार इस्तेमाल, किसी चीज़ से व्युत्पन्न नहीं
चंकिंग
एक एन्क्रिप्टेड मैनिफ़ेस्ट (फ़ाइल-नाम, आकार, प्रकार), फिर फ़ाइल 1 MiB के चंकों में — हर चंक अलग से प्रमाणित
नॉन्स
32-बिट रैंडम सील सॉल्ट ‖ 64-बिट चंक काउंटर — एक फ़ाइल के भीतर कभी नहीं दोहराया जाता, और कुंजी तो वैसे भी एक-बार इस्तेमाल की है
प्रमाणित डेटा
पूरा 16-बाइट हेडर, साथ में हर चंक का इंडेक्स और कुल चंक संख्या — चंकों का क्रम बदलना, उन्हें काटना या जोड़-तोड़ करना डिक्रिप्शन तोड़ देता है
कुंजी स्ट्रिंग
base64url, 47 अक्षर: 32-बाइट कुंजी और उसके साथ 3-बाइट SHA-256 चेकसम, ताकि टाइपिंग की ग़लती कूड़ा पैदा करने के बजाय साफ़-साफ़ नाकाम हो

यह क्या करता है, इस पर ईमानदार जवाब

सब कुछ आपके ब्राउज़र में होता है।

सील करना और खोलना, दोनों फ़ाइल को इस पेज की मेमोरी में पढ़ते हैं, वहीं आपके ब्राउज़र के अंदर मौजूद WebCrypto इंजन से AES-256-GCM चलाते हैं, और नतीजा डाउनलोड के रूप में वापस दे देते हैं। कुछ भी अपलोड नहीं होता। न कोई अकाउंट है, न सर्वर पर कोई प्रोसेसिंग। इस साइट के बाक़ी हिस्सों से अलग, यह पेज कुकी-रहित विज़िट काउंटर तक लोड नहीं करता। किसी भी तरह की एनालिटिक्स नहीं।

यह सिर्फ़ वादा नहीं है। यह पेज एक ऐसी Content-Security-Policy के साथ परोसा जाता है जो ब्राउज़र को सिर्फ़ इसी साइट की अपनी स्थिर फ़ाइलें लाने देती है। इसके पास आपकी फ़ाइल, आपकी कुंजी या और कुछ भी किसी सर्वर को, हमारे सर्वर समेत, भेजने का कोई रास्ता ही नहीं है। सील करते समय अपने ब्राउज़र के डेवलपर टूल खोलें और आपको शून्य अनुरोध दिखेंगे। सबसे सीधे सबूत के लिए, Toolbox इंस्टॉल करें और एयरप्लेन मोड में सील करें। नेटवर्क बंद होने पर कुछ भी बाहर नहीं जा सकता।

कुंजी ही सब कुछ है — और वह हमारे पास कभी नहीं होती।

हर सील आपके ब्राउज़र में एक नई रैंडम 256-बिट कुंजी बनाती है। वह आपको एक बार दिखाई जाती है और कहीं नहीं रखी जाती: न हमारे सिस्टम में (उसमें कोई शामिल ही नहीं), न आपके ब्राउज़र के स्टोरेज में, न सील की गई फ़ाइल में। अनुमान लगाने को कोई पासफ़्रेज़ नहीं है और ब्रूट-फ़ोर्स करने लायक कुछ नहीं। जिसके पास कुंजी और फ़ाइल दोनों हैं वह इसे खोल सकता है। जिसके पास नहीं, वह नहीं।

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

कुंजी वाला लिंक कभी किसी सर्वर तक नहीं पहुँचता।

शेयर लिंक कुंजी को URL में # के बाद रखता है। वह हिस्सा, फ़्रैगमेंट, ब्राउज़र में ही रहता है। ब्राउज़र किसी भी सर्वर को, हमारे या किसी और के, भेजी जाने वाली चीज़ों में उसे कभी शामिल नहीं करता। जब यह पेज लिंक में कुंजी के साथ लोड होता है, तो वह कुंजी पढ़ता है, Open टैब पर चला जाता है, और तुरंत कुंजी को एड्रेस बार से हटा देता है। ताकि वह दिखने वाले URL या ब्राउज़र इतिहास में न टिके।

फिर भी, जिसके पास लिंक और सील की गई फ़ाइल दोनों हैं, वह उसे खोल सकता है। इसीलिए यह पेज कहता है कि फ़ाइल और कुंजी अलग-अलग चैनलों से भेजें।

कुछ भी सेव होने से पहले आप देख लेते हैं कि अंदर क्या है।

खोलना दो क़दमों में होता है। पहले पेज सिर्फ़ एक छोटा मैनिफ़ेस्ट डिक्रिप्ट करता है: मूल फ़ाइल-नाम, आकार और प्रकार। वह आपको यह दिखाता है, उन फ़ाइल प्रकारों के लिए ज़ोरदार चेतावनी के साथ जो कोड चला सकते हैं (प्रोग्राम, स्क्रिप्ट, इंस्टॉलर, मैक्रो वाले दस्तावेज़, HTML) और उन नामों के लिए जो invoice.pdf.exe जैसे दोहरे एक्सटेंशन से भेस बदले हों। जब तक आप डिक्रिप्ट पर क्लिक न करें, कुछ भी लिखा नहीं जाता। पेज डिक्रिप्ट किए कॉन्टेंट को ख़ुद कभी न खोलता है, न दिखाता है। वह बस फ़ाइल डाउनलोड के लिए देता है।

साफ़ रहिए कि एन्क्रिप्शन क्या साबित करता है और क्या नहीं। सील की गई फ़ाइल रास्ते में गोपनीय रहती है। सील करना यह कुछ नहीं बताता कि उसे किसने भेजा या उसकी सामग्री सुरक्षित है या नहीं। बिन-माँगे आई सील फ़ाइल को ठीक उतने ही शक से देखें जितना बिन-माँगे आए अटैचमेंट को।

भरोसे की सीमा असल में कहाँ है।

आप वह कोड चला रहे हैं जो यह वेबसाइट आपको परोसती है। अगर sealby.app या उस तक आपके कनेक्शन में कभी सेंध लग जाए, तो कोई दुर्भावनापूर्ण पेज वह पढ़ सकता है जो आप उसमें डालते हैं। यह हर वेब-आधारित एन्क्रिप्शन टूल पर लागू होता है, और हम इसे छुपाने के बजाय कहना बेहतर समझते हैं। इसके बारे में हम यह करते हैं: यह पेज एक स्थिर फ़ाइल है, और हम इसे तीसरे पक्ष के कोड से मुक्त रखते हैं। इंस्टॉल किया Toolbox आपको पहले से लोड किए वर्शन का इस्तेमाल जारी रखने देता है। और फ़ॉर्मैट नीचे दर्ज है, ताकि उसके आधार पर स्वतंत्र टूल बनाए जा सकें।

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

सीधी भाषा में सीमाएँ

  • कुंजी खोई = फ़ाइल खोई। कोई अपवाद नहीं, यह बनावट से ही ऐसा है।
  • हम आपकी फ़ाइलें या कुंजियाँ नहीं देख सकते, इसलिए उन्हें मैलवेयर के लिए स्कैन भी नहीं कर सकते। फ़ाइल-प्रकार की चेतावनी सिर्फ़ फ़ाइल-नाम पर आधारित है। यह सुरक्षा की गारंटी नहीं है।
  • जिसके पास सील की गई फ़ाइल और कुंजी दोनों हैं, वह उसे खोल सकता है। टूल यह न जानता है, न जाँचता है कि वे कौन हैं।
  • सील की गई फ़ाइल का आकार मोटे तौर पर मूल फ़ाइल का आकार बता देता है।
  • हर सील में एक फ़ाइल, 100 MB तक। कई फ़ाइलें हों तो पहले ज़िप करें।

फ़ॉर्मैट, बाइट-दर-बाइट

तकनीकी पाठक को इस पेज का आउटपुट स्वतंत्र रूप से सत्यापित करने, या तीस पंक्तियों के Python में कोई .sealed फ़ाइल खोलने, के लिए जो कुछ चाहिए:

bytesfieldcontents
0–7मैजिकASCII "SEALBY-W"
8वर्शन0x01 — बाक़ी सब “नए वर्शन से बना” कहकर अस्वीकार कर दिया जाता है
9एल्गोरिथ्म0x01 = AES-256-GCM
10–13सील सॉल्ट4 बाइट, CSPRNG, हर सील के लिए नया
14–15आरक्षितशून्य होना चाहिए
16–अंतचंक फ़्रेमहर एक: uint32 BE सिफ़रटेक्स्ट लंबाई, फिर AES-GCM सिफ़रटेक्स्ट + 16-बाइट टैग

चंक 0 मैनिफ़ेस्ट है: UTF-8 JSON {"name":…,"size":…,"type":…}। चंक 1…N−1 फ़ाइल के 1 MiB टुकड़े हैं। N में से हर चंक i के लिए: नॉन्स = सॉल्ट ‖ uint64 BE i; प्रमाणित डेटा = हेडर ‖ uint64 BE i ‖ uint64 BE N। इसलिए छेड़छाड़, कटाई, क्रम बदलना, जगह बदलना और फ़ाइलों के बीच जोड़-तोड़, सब प्रमाणीकरण में नाकाम हो जाते हैं। हर मामले के लिए एक नेगेटिव टेस्ट कमिट किया गया है।

कुंजी स्ट्रिंग: 32-बाइट कुंजी और उसके बाद उसके SHA-256 के पहले 3 बाइट का base64url (बिना पैडिंग), कुल 47 अक्षर। टाइपिंग की ग़लती कूड़ा पैदा करने के बजाय चेकसम में नाकाम हो जाती है।

संदर्भ ओपनर (Python, cryptography लाइब्रेरी)
import base64, hashlib, json, struct, sys
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SEALBY-W" and raw[8] == 1 and raw[9] == 1
assert raw[14:16] == b"\x00\x00"
header, salt = raw[:16], raw[10:14]
frames, off = [], 16
while off < len(raw):
    (n,) = struct.unpack(">I", raw[off:off + 4]); off += 4
    frames.append(raw[off:off + n]); off += n
assert off == len(raw)

kb = base64.urlsafe_b64decode(sys.argv[2] + "=")   # 47-char key string
key, check = kb[:32], kb[32:35]
assert hashlib.sha256(key).digest()[:3] == check    # typo check

N = len(frames)
def chunk(i):
    nonce = salt + struct.pack(">Q", i)
    aad = header + struct.pack(">QQ", i, N)
    return AESGCM(key).decrypt(nonce, frames[i], aad)

manifest = json.loads(chunk(0))
data = b"".join(chunk(i) for i in range(1, N))
assert len(data) == manifest["size"]
open(manifest["name"], "wb").write(data)
print("decrypted ->", manifest["name"])

यह रास्ते में चल रही फ़ाइलों के लिए है। तिजोरी उन फ़ाइलों के लिए जो रखी रहती हैं।

सील करना किसी फ़ाइल की उसके रास्ते में रक्षा करता है। Sealby उस सब की रक्षा करता है जो टिका रहता है: आपके iPhone पर एन्क्रिप्टेड तिजोरियों में फ़ोटो, फ़ाइलें और नोट्स। न अकाउंट, न सर्वर, आपके सिवा किसी के पढ़ने लायक नहीं।

App Store से डाउनलोड करें

iPhone और iPad · iOS 17+ · मुफ़्त