Ücretsiz gizlilik aracı

Bir dosya mühürle

Bir dosyayı taze, tek kullanımlık bir anahtarla şifrele ve istediğin kanaldan gönder. Anahtarı elinde tutan kişi onu tam burada, bu sayfada açar. Hiçbir şey yüklenmez, kırılacak bir parola yoktur ve hiçbir şey kaydedilmeden önce içindekileri görürsün.

Tamamen bu sekmede çalışır. Bu sayfa herhangi bir sunucuyla hiç konuşamaz.

Her parametre, açıkça

Şifreleme
AES-256-GCM (WebCrypto), parça başına 128 bitlik etiket
Anahtar
tarayıcı CSPRNG’sinden 256 bit, her mühürde taze üretilir, bir kez kullanılır, hiçbir şeyden türetilmez
Parçalama
şifreli bir bildirim (dosya adı, boyut, tür), ardından dosya 1 MiB’lik parçalar hâlinde — her biri ayrı ayrı kimlik doğrulamalı
Nonce
32 bitlik rastgele mühür tuzu ‖ 64 bitlik parça sayacı — bir dosya içinde asla tekrarlanmaz ve anahtar zaten tek kullanımlıktır
Kimliği doğrulanan veri
16 baytlık başlığın tamamı, artı her parçanın sırası ve toplam parça sayısı — parçaları yeniden sıralamak, kırpmak ya da araya eklemek çözmeyi bozar
Anahtar dizesi
base64url, 47 karakter: 32 baytlık anahtar artı 3 baytlık SHA-256 sağlama toplamı; böylece bir yazım hatası çöp üretmek yerine temiz biçimde başarısız olur

Bunun ne yaptığına dair dürüst yanıtlar

Her şey tarayıcında olur.

Mühürleme de açma da dosyayı bu sayfanın belleğine okur, orada tarayıcının yerleşik WebCrypto motoruyla AES-256-GCM çalıştırır ve sonucu bir indirme olarak geri verir. Hiçbir şey yüklenmez. Hesap yok, sunucu tarafında işlem yok. Bu sitenin geri kalanından farklı olarak, bu sayfa çerezsiz ziyaret sayacını bile yüklemez. Hiçbir türde analitik yok.

Bu yalnızca bir söz değil. Sayfa, tarayıcının yalnızca bu sitenin kendi statik dosyalarını getirmesine izin veren bir Content-Security-Policy ile sunuluyor. Dosyanı, anahtarını ya da başka bir şeyi bizimki dahil hiçbir sunucuya gönderme imkânı yok. Mühürlerken tarayıcının geliştirici araçlarını aç, sıfır istek göreceksin. En açık kanıt için Araç Kutusu’nu kur ve uçak modunda mühürle. Ağ kapalıyken hiçbir şey dışarı çıkamaz.

Her şey anahtardır — ve o hiçbir zaman bizde olmaz.

Her mühürleme, tarayıcında taze ve rastgele 256 bitlik bir anahtar üretir. Sana bir kez gösterilir ve hiçbir yerde tutulmaz: sistemlerimizde değil (zaten hiçbiri işin içinde değil), tarayıcının deposunda değil, mühürlü dosyanın içinde değil. Tahmin edilecek bir parola ve kaba kuvvetle kırılacak bir şey yok. Anahtar ve dosya kimdeyse onu açar. Kimde yoksa açamaz.

Bunun sert bir sonucu var: anahtar kaybolursa dosya gitmiştir. Sıfırlama yok, destek talebi yok, kurtarma yok. Bu, yardımsever olmadığımızdan değil. Kurtarabileceğimiz bir kopya, birinin çalabileceği ya da talep edebileceği bir kopya olurdu.

Anahtar bağlantısı hiçbir sunucuya ulaşmaz.

Paylaşım bağlantısı anahtarı URL’deki # işaretinden sonraya koyar. O kısım, yani parça (fragment), tarayıcıda kalır. Tarayıcının hiçbir sunucuya, ne bizimkine ne başkasınınkine, gönderdiği şeyin parçası olmaz. Bu sayfa bağlantıda bir anahtarla yüklendiğinde anahtarı okur, Aç sekmesine geçer ve anahtarı adres çubuğundan hemen siler. Böylece görünen URL’de ya da tarayıcı geçmişinde asılı kalmaz.

Yine de, hem bağlantıya hem mühürlü dosyaya sahip olan herkes onu açabilir. Bu sayfanın sana dosyayı ve anahtarı farklı kanallardan göndermeni söylemesinin nedeni bu.

Hiçbir şey kaydedilmeden önce içeride ne olduğunu görürsün.

Açmak iki adımda olur. Önce sayfa yalnızca küçük bir bildirimi çözer: orijinal dosya adı, boyutu ve türü. Bunu sana gösterir; kod çalıştırabilen dosya türleri (programlar, betikler, kurulum dosyaları, makrolu belgeler, HTML) ve invoice.pdf.exe gibi çift uzantıyla gizlenmiş adlar için göze çarpan bir uyarıyla. Sen çözmeye tıklayana kadar hiçbir şey yazılmaz. Sayfa çözülmüş içeriği kendisi asla açmaz ya da göstermez. Dosyayı yalnızca indirmek üzere sunar.

Şifrelemenin neyi kanıtlayıp neyi kanıtlamadığı konusunda net ol. Mühürlü bir dosya yolda gizlidir. Mühürlemek, kimin gönderdiği ya da içeriğinin güvenli olup olmadığı hakkında hiçbir şey söylemez. Beklemediğin bir mühürlü dosyaya, beklemediğin bir eke davrandığın kadar şüpheci yaklaş.

Güven sınırı gerçekte nerede.

Bu web sitesinin sana sunduğu kodu çalıştırıyorsun. sealby.app ya da ona olan bağlantın ele geçirilmiş olsaydı, kötü niyetli bir sayfa içine koyduklarını okuyabilirdi. Bu, web tabanlı her şifreleme aracı için geçerlidir ve bunu, aksini iddia etmektense söylemeyi tercih ederiz. Bu konuda yaptıklarımız: sayfa statik bir dosyadır ve onu üçüncü taraf koddan uzak tutuyoruz. Kurulu Araç Kutusu, zaten yüklemiş olduğun bir sürümü kullanmayı sürdürmeni sağlar. Biçim de aşağıda belgelidir; böylece ona karşı bağımsız araçlar yazılabilir.

Kendi cihazın da sınırın içindedir. Sayfa erişimi olan tarayıcı eklentileri ya da makinedeki kötü amaçlı yazılım, herhangi bir sayfanın okuyabildiği her şeyi okuyabilir. Mühürlü dosya içeriğini gizler, ama her şeyi değil. Onu elinde tutan herkes boyutunu (kabaca orijinalinki) ve bunun Sealby ile mühürlenmiş bir dosya olduğunu görebilir.

Sade dille sınırlar

  • Kayıp anahtar = kayıp dosya. İstisnasız, tasarım gereği.
  • Dosyalarını ya da anahtarlarını göremeyiz, bu yüzden onları kötü amaçlı yazılıma karşı da tarayamayız. Dosya türü uyarısı yalnızca dosya adına dayanır. Bir güvenlik garantisi değildir.
  • Hem mühürlü dosyaya hem anahtara sahip olan herkes onu açabilir. Araç, kim olduklarını bilmez ya da denetlemez.
  • Mühürlü dosyanın boyutu, orijinal dosyanın boyutunu kabaca ele verir.
  • Mühür başına tek dosya, en fazla 100 MB. Birden çok dosyayı önce sıkıştır.

Biçim, bayt bayt

Teknik bir okurun bu sayfanın çıktısını bağımsız olarak doğrulaması ya da bir .sealed dosyasını otuz satır Python ile açması için gereken her şey:

bytesfieldcontents
0–7sihirli değerASCII "SEALBY-W"
8sürüm0x01 — başka her şey “daha yeni bir sürümle yapılmış” diye reddedilir
9algoritma0x01 = AES-256-GCM
10–13mühür tuzu4 bayt, CSPRNG, mühür başına taze
14–15ayrılmışsıfır olmalı
16–sonparça çerçeveleriher biri: uint32 BE şifreli metin uzunluğu, ardından AES-GCM şifreli metin + 16 baytlık etiket

0 numaralı parça bildirimdir: UTF-8 JSON {"name":…,"size":…,"type":…}. 1…N−1 parçaları dosyanın 1 MiB’lik dilimleridir. N parçadan i’si için: nonce = tuz ‖ uint64 BE i; kimliği doğrulanan veri = başlık ‖ uint64 BE i ‖ uint64 BE N. Böylece kurcalama, kırpma, yeniden sıralama, yer değiştirme ve dosyalar arası ekleme kimlik doğrulamasında başarısız olur. Her durum, depoya işlenmiş bir negatif testle kanıtlanmıştır.

Anahtar dizesi: 32 baytlık anahtarın ardından SHA-256’sının ilk 3 baytının base64url (dolgusuz) hâli, toplam 47 karakter. Bir yazım hatası çöp üretmek yerine sağlama toplamında başarısız olur.

Referans açıcı (Python, cryptography kütüphanesi)
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"])

Bu, yoldaki dosyalar için. Kasa ise duran dosyalar için.

Mühürlemek bir dosyayı bir yere giderken korur. Sealby ise kalan her şeyi korur: iPhone’undaki şifreli kasalarda fotoğraflar, dosyalar ve notlar. Hesap yok, sunucu yok, senden başka kimse okuyamaz.

App Store’dan indir

iPhone ve iPad · iOS 17+ · Ücretsiz