უფასო კონფიდენციალურობის ხელსაწყო
ფაილის დალუქვა
დაშიფრეთ ფაილი ახალი ერთჯერადი გასაღებით და გაგზავნეთ ნებისმიერი არხით. გასაღების მფლობელი მას სწორედ აქ, ამ გვერდზე გახსნის. არაფერი იტვირთება, გასატეხი საპაროლო ფრაზა არ არსებობს და შენახვამდე ხედავთ, რა არის შიგნით.
მთლიანად ამ ჩანართში მუშაობს. ამ გვერდს საერთოდ არ შეუძლია რომელიმე სერვერთან დაკავშირება.
ილუქება…
დალუქულია.
ეს თქვენი დაშიფრული ფაილია. გასაღების გარეშე მას ვერავინ წაიკითხავს — ვერც ჩვენ და ვერც სხვა ვინმე.
გასაღები — ნაჩვენებია მხოლოდ ახლა
ეს გასაღები მხოლოდ ახლა, ამ გვერდზე არსებობს. ის არსად ინახება და არც არსად იგზავნება. თუ დაკარგავთ, ფაილს ვერავინ გახსნის — ვერც ჩვენ. გვერდიდან გასვლამდე შეინახეთ.
ან გააზიარეთ გასაღები ბმულის სახით
გასაღები ბმულში # სიმბოლოს შემდეგაა. ბრაუზერები ამ ნაწილს არცერთ სერვერს არ უგზავნის. ბმული ამ გვერდს გახსნის გამზადებული „გახსნის“ ჩანართითა და შევსებული გასაღებით, შემდეგ კი გასაღებს მისამართის ზოლიდან წაშლის.
გაგზავნეთ ფაილი და გასაღები ცალ-ცალკე.
დალუქული ფაილისა და გასაღების მქონე ნებისმიერ ადამიანს შეუძლია მისი გახსნა. გაგზავნეთ ისინი სხვადასხვა არხით — მაგალითად, ფაილი ელფოსტით, გასაღების ბმული კი ტექსტური შეტყობინებით. ასე არცერთ შემოსულთა საქაღალდეში არ აღმოჩნდება ორივე ერთად.
გვერდმა გასაღები თქვენი ბმულიდან წაიკითხა და მისამართის ზოლიდან წაშალა, ამიტომ ის ისტორიაში არ დარჩება.
შემოწმება...
ამ დალუქული ფაილის შიგთავსი
ჯერ არაფერი შენახულა. დალუქული ფაილის თანახმად, ის შეიცავს:
- სახელი
- ზომა.
- ტიპი.
ფრთხილად — ამ ტიპის ფაილს თქვენს მოწყობილობაზე კოდის გაშვება შეუძლია
გაშიფრულია.
ფაილი თქვენს მოწყობილობაზე გაიშიფრა და ჩამოსატვირთად შემოგთავაზდათ. მის შესახებ ამ გვერდიდან არასოდეს არაფერი გასულა.
Sealby-ის შემქმნელებისგან — დაშიფრული სეიფი iPhone-ისთვის
Sealby ფოტოებს, ფაილებსა და ჩანაწერებს თქვენს iPhone-ზე დაშიფრულ სეიფებში ინახავს. ანგარიში და სერვერები არ არის; წაკითხვა თქვენ გარდა არავის შეუძლია.
ყველა პარამეტრი, სრულად
- შიფრი
- AES-256-GCM (WebCrypto), თითო ნაწილზე 128-ბიტიანი ტეგი
- გასაღები
- 256 ბიტი ბრაუზერის CSPRNG-დან, ახლად გენერირებული ყოველი დალუქვისთვის, გამოიყენება ერთხელ და არაფრიდან არ წარმოიქმნება
- ნაწილებად დაყოფა
- დაშიფრული მანიფესტი (ფაილის სახელი, ზომა, ტიპი), შემდეგ კი ფაილი 1 MiB-იან ნაწილებად — თითოეული ცალ-ცალკეა ავთენტიფიცირებული
- Nonce
- 32-ბიტიანი შემთხვევითი seal salt ‖ 64-ბიტიანი ნაწილის მრიცხველი — ფაილში არასოდეს მეორდება, გასაღებიც ერთჯერადია
- ავთენტიფიცირებული მონაცემები.
- სრული 16-ბაიტიანი სათაური, თითოეული ნაწილის ინდექსი და ნაწილების საერთო რაოდენობა — ნაწილების გადაადგილება, შეკვეცა ან გადაბმა გაშიფვრას არღვევს
- გასაღების სტრიქონი
- base64url, 47 სიმბოლო: 32-ბაიტიანი გასაღები და 3-ბაიტიანი SHA-256 საკონტროლო ჯამი, რათა ბეჭდვითმა შეცდომამ უაზრო შედეგის ნაცვლად მკაფიო შეცდომა გამოიწვიოს
პატიოსანი პასუხები იმაზე, თუ რას აკეთებს ეს.
ყველაფერი ხდება თქვენს ბრაუზერში.
დალუქვისა და გახსნისას გვერდი ფაილს საკუთარ მეხსიერებაში კითხულობს, ბრაუზერის ჩაშენებული WebCrypto ძრავით AES-256-GCM-ს უშვებს და შედეგს ჩამოსატვირთად გაძლევთ. არაფერი იტვირთება. ანგარიში და სერვერზე დამუშავება არ არსებობს. საიტის სხვა გვერდებისგან განსხვავებით, ეს გვერდი cookie-ს გარეშე ვიზიტების მრიცხველსაც კი არ ტვირთავს. არავითარი ანალიტიკა.
ეს უბრალოდ დაპირება არ არის. გვერდი Content-Security-Policy-ით იტვირთება, რომელიც ბრაუზერს მხოლოდ ამ საიტის სტატიკური ფაილების მიღების უფლებას აძლევს. გვერდს არ შეუძლია თქვენი ფაილის, გასაღების ან სხვა რამის არც ჩვენს და არც სხვა სერვერზე გაგზავნა. დალუქვისას გახსენით ბრაუზერის developer tools და დაინახავთ, რომ არცერთი მოთხოვნა არ იგზავნება. ყველაზე პირდაპირი მტკიცებულებისთვის დააინსტალირეთ Toolbox და დალუქეთ თვითმფრინავის რეჟიმში — გამორთული ქსელით ვერაფერი გავა.
გასაღები ყველაფერია — ჩვენ კი ის არასოდეს გვაქვს.
ყოველი დალუქვისას ბრაუზერში ახალი შემთხვევითი 256-ბიტიანი გასაღები იქმნება. ის მხოლოდ ერთხელ გეჩვენებათ და არსად ინახება: არც ჩვენს სისტემებში (ისინი პროცესში საერთოდ არ მონაწილეობენ), არც ბრაუზერის საცავში და არც დალუქულ ფაილში. გამოსაცნობი საპაროლო ფრაზა და უხეში ძალით გასატეხი არაფერი არსებობს. ვისაც გასაღებიც და ფაილიც აქვს, შეუძლია მისი გახსნა; ვისაც არა — ვერ შეძლებს.
ამას მკაცრი შედეგი აქვს: თუ გასაღები დაიკარგება, ფაილიც დაკარგულია. არ არსებობს განულება, მხარდაჭერის მოთხოვნა ან აღდგენა. ეს ჩვენი გულგრილობა არ არის — ასლი, რომლის აღდგენაც ჩვენ შეგვეძლებოდა, სხვასაც შეეძლებოდა მოეპარა ან მოეთხოვა.
გასაღების ბმული სერვერს არასოდეს აღწევს.
გაზიარების ბმულში გასაღები URL-ის # ნიშნის შემდეგაა. ეს ნაწილი — ფრაგმენტი — ბრაუზერში რჩება და არასოდეს შედის იმ მონაცემებში, რომლებსაც ბრაუზერი ჩვენს ან სხვა სერვერს უგზავნის. როცა გვერდი გასაღებიანი ბმულით იტვირთება, ის გასაღებს კითხულობს, „გახსნის“ ჩანართზე გადადის და მისამართის ზოლიდან გასაღებს დაუყოვნებლივ შლის. ამგვარად ის არც ხილულ URL-ში და არც ბრაუზერის ისტორიაში არ რჩება.
მიუხედავად ამისა, ბმულისა და დალუქული ფაილის მქონე ნებისმიერ ადამიანს შეუძლია მისი გახსნა. ამიტომ გთხოვთ, ფაილი და გასაღები სხვადასხვა არხით გაგზავნოთ.
შენახვამდე ხედავთ, რა არის შიგნით.
გახსნა ორ ეტაპად ხდება. ჯერ გვერდი მხოლოდ მცირე მანიფესტს გაშიფრავს: ფაილის თავდაპირველ სახელს, ზომასა და ტიპს. შემდეგ ამ ინფორმაციას გაჩვენებთ და მკაფიოდ გაფრთხილებთ ფაილის ტიპებზე, რომლებსაც კოდის გაშვება შეუძლია (პროგრამები, სკრიპტები, ინსტალატორები, მაკროიანი დოკუმენტები, HTML), ასევე ორმაგი გაფართოებით შენიღბულ სახელებზე, მაგალითად invoice.pdf.exe. სანამ გაშიფვრას არ დააჭერთ, არაფერი იწერება. გვერდი გაშიფრულ შიგთავსს თავად არასოდეს ხსნის ან გამოსახავს — მხოლოდ ჩამოსატვირთ ფაილს გთავაზობთ.
მკაფიოდ გავმიჯნოთ, რას ამტკიცებს და რას არ ამტკიცებს დაშიფვრა. დალუქული ფაილი გზაში კონფიდენციალურია. დალუქვა არაფერს ამბობს გამომგზავნის ვინაობაზე ან შიგთავსის უსაფრთხოებაზე. მოულოდნელ დალუქულ ფაილს ისეთივე ეჭვით მოეკიდეთ, როგორც მოულოდნელ დანართს.
სად გადის ნდობის რეალური საზღვარი.
თქვენ ამ ვებსაიტის მიერ მოწოდებულ კოდს უშვებთ. თუ sealby.app ან მასთან თქვენი კავშირი გატეხილი აღმოჩნდება, მავნე გვერდს შეუძლია წაიკითხოს ის, რასაც მასში განათავსებთ. ეს ყველა ვებზე დაფუძნებული დაშიფვრის ხელსაწყოს ეხება და გვირჩევნია პირდაპირ ვთქვათ, ვიდრე საპირისპირო მოვაჩვენოთ. ჩვენი ზომები ასეთია: გვერდი სტატიკური ფაილია და მესამე მხარის კოდს არ შეიცავს. დაყენებული Toolbox საშუალებას გაძლევთ უკვე ჩატვირთული ვერსია გამოიყენოთ. ფორმატიც ქვემოთაა დოკუმენტირებული, რათა მასთან თავსებადი დამოუკიდებელი ხელსაწყოები შეიქმნას.
უსაფრთხოების საზღვარში თქვენი მოწყობილობაც შედის. გვერდზე წვდომის მქონე ბრაუზერის გაფართოებებს ან მოწყობილობაზე არსებულ მავნე პროგრამას შეუძლია წაიკითხოს ყველაფერი, რასაც ნებისმიერი გვერდი ხედავს. დალუქული ფაილი შიგთავსს მალავს, მაგრამ არა ყველაფერს: მის მფლობელს შეუძლია დაინახოს ზომა (დაახლოებით ორიგინალის ზომა) და ის, რომ ფაილი Sealby-ითაა დალუქული.
შეზღუდვები მარტივი ენით
- დაკარგული გასაღები = დაკარგული ფაილი. გამონაკლისი განზრახ არ არსებობს.
- თქვენს ფაილებსა და გასაღებებს ვერ ვხედავთ, ამიტომ მავნე პროგრამაზეც ვერ ვამოწმებთ. ფაილის ტიპის გაფრთხილება მხოლოდ ფაილის სახელს ეფუძნება და უსაფრთხოების გარანტია არ არის.
- დალუქული ფაილისა და გასაღების მქონე ნებისმიერ ადამიანს შეუძლია ფაილის გახსნა. ხელსაწყომ არ იცის და არ ამოწმებს, ვინ არის ის.
- დალუქული ფაილის ზომა დაახლოებით ავლენს თავდაპირველი ფაილის ზომას.
- თითო დალუქვაზე ერთი ფაილი, მაქსიმუმ 100 MB. რამდენიმე ფაილი ჯერ zip-არქივად შეკარით.
ფორმატი, ბაიტი-ბაიტად
ყველაფერი, რაც ტექნიკურ მკითხველს ამ გვერდის შედეგის დამოუკიდებლად შესამოწმებლად ან .sealed ფაილის Python-ის ოცდაათ სტრიქონში გასახსნელად სჭირდება:
| bytes | field | contents |
|---|---|---|
| 0–7 | სიგნატურა | ASCII "SEALBY-W" |
| 8 | ვერსია. | 0x01 — ნებისმიერი სხვა მნიშვნელობა უარყოფილია შეტყობინებით „შექმნილია უფრო ახალი ვერსიით“ |
| 9 | ალგორითმი. | 0x01 = AES-256-GCM |
| 10–13 | seal salt | 4 ბაიტი, CSPRNG, ყოველი დალუქვისთვის ახალი |
| 14–15 | რეზერვირებული | ნული უნდა იყოს |
| 16–ბოლომდე | ნაწილების ფრეიმები | თითოეული: uint32 BE დაშიფრული ტექსტის სიგრძე, შემდეგ AES-GCM დაშიფრული ტექსტი + 16-ბაიტიანი ტეგი |
ნაწილი 0 არის მანიფესტი: UTF-8 JSON {"name":…,"size":…,"type":…}. ნაწილები 1…N−1 შეიცავს ფაილს 1 MiB-იან ნაწილებად. N-დან თითოეული i ნაწილისთვის: nonce = salt ‖ uint64 BE i; ავთენტიფიცირებული მონაცემები = header ‖ uint64 BE i ‖ uint64 BE N. ამიტომ ავთენტიფიკაციას ვერ გაივლის მონაცემების შეცვლა, შეკვეცა, გადაადგილება, თანმიმდევრობის არევა ან სხვადასხვა ფაილის ნაწილების შეერთება. თითოეული შემთხვევა დადასტურებულია რეპოზიტორიაში დაფიქსირებული უარყოფითი ტესტით.
გასაღების სტრიქონი: base64url-ით (შევსების გარეშე) წარმოდგენილი 32-ბაიტიანი გასაღები, რომელსაც მოსდევს პირველი 3 ბაიტი მისი SHA-256 ჰეშიდან — სულ 47 სიმბოლო. ბეჭდვითი შეცდომა უაზრო შედეგის ნაცვლად საკონტროლო ჯამის შემოწმებას ვერ გაივლის.
სრული ზუსტი სპეციფიკაცია (FORMAT-WEB-v1) ·ცნობილი პასუხების ტესტ-ვექტორები (JSON)
საცნობარო გამხსნელი (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-ზე დაშიფრულ სეიფებში. ანგარიში და სერვერები არ არის; წაკითხვა თქვენ გარდა არავის შეუძლია.
iPhone და iPad · iOS 17+ · უფასო