כלי פרטיות חינמי
הצפנת קובץ בדפדפן
בחרו קובץ, בחרו משפט סיסמה, והורידו עותק מוצפן. AES-256-GCM, עם המפתח שנגזר בדפדפן שלכם. שום דבר לא עולה לרשת, וזה עובד ללא חיבור אחרי הטעינה. הפורמט מתועד בית אחר בית למטה, כדי שלא תצטרכו לקחת שום דבר על אמונה.
רץ כולו בלשונית הזו. שום דבר לא עולה לרשת, וזה עובד ללא חיבור אחרי הטעינה.
כל קובץ. קבצים גדולים דורשים זיכרון. ראו את המגבלות הכנות למטה.
אין שחזור. משפט סיסמה שנשכח פירושו קובץ שאף אחד, כולל אנחנו, לעולם לא יוכל לפתוח.
כל פרמטר, מוצהר
- צופן
- AES-256-GCM (WebCrypto), תג בן 128 ביט
- גזירת מפתח
- PBKDF2-HMAC-SHA-256, 600,000 איטרציות
- מלח ה-KDF
- 16 בתים, CSPRNG, טרי לכל קובץ
- נונס GCM
- 12 בתים, CSPRNG, טרי לכל קובץ
- נתונים מאומתים
- כל הכותרת בת 42 הבתים, כך ששינוי של כל פרמטר מוצהר שובר את הפענוח
- קידוד משפט הסיסמה
- UTF-8, מנורמל ב-NFC (כך שאותו משפט שמוקלד בכל מכשיר גוזר את אותו מפתח)
המגבלות הכנות
זה אינו פורמט הכספת של אפליקציית Sealby. האפליקציה גוזרת מפתחות עם Argon2id שמכוילת לכל מכשיר, עוטפת אותם ב-Secure Enclave, ושומרת תוכן במכלים מקוטעים בני-הכחשה. עמוד אינטרנט לא יכול לעשות אף אחד מהדברים האלה. העמוד הזה הוא כלי עצמאי שבנוי על מה שדפדפנים מציעים באופן מובנה.
PBKDF2 אינה דורשת הרבה זיכרון. זו פונקציית גזירת המפתחות היחידה שדפדפנים מספקים באופן מובנה, ו-600,000 איטרציות הופכות כל ניחוש לאיטי, אבל מערך GPU עדיין תוקף אותה הרבה יותר מהר מ-Argon2id. לכן ההגנה נשענת על משפט הסיסמה שלכם: ארבע מילים אקראיות או יותר, לא סיסמה.
WebCrypto מצפינה במכה אחת. אין הזרמה, ולכן כל הקובץ יושב בזיכרון פי שניים עד שלוש במהלך העיבוד. מאות מגה-בייט בסדר גמור ברוב המכשירים. לארכיונים של כמה ג׳יגה-בייט, השתמשו בכלי שולחני. הפלט המוצפן גם חושף את הגודל המשוער של הקובץ. השם מוצפן בפנים, אבל הגודל אינו מוסתר.
הפורמט, בית אחר בית
כל מה שקורא טכני צריך כדי לאמת את הפלט של העמוד הזה באופן עצמאי, או לפענח אותו בעשרים שורות Python:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SBXF0001" |
| 8 | גרסה | 0x01 |
| 9 | אלגוריתם | 0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256 |
| 10–13 | איטרציות | uint32, big-endian (600,000) |
| 14–29 | מלח | 16 בתים |
| 30–41 | נונס | 12 בתים |
| 42–סוף | טקסט מוצפן | AES-256-GCM של המטען, AAD = בתים 0–41; 16 הבתים האחרונים הם תג ה-GCM |
המטען לפני ההצפנה: [אורך השם ב-2 בתים, big-endian][שם הקובץ, UTF-8][בתי הקובץ]. שם הקובץ המקורי נוסע מוצפן; בפענוח הוא משוחזר.
מפענח ייחוס (Python, ספריית cryptography)
import sys, hashlib, struct, unicodedata
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SBXF0001" and raw[8] == 1 and raw[9] == 1
iters = struct.unpack(">I", raw[10:14])[0] # 600000
salt, nonce, ct = raw[14:30], raw[30:42], raw[42:]
phrase = unicodedata.normalize("NFC", sys.argv[2]).encode()
key = hashlib.pbkdf2_hmac("sha256", phrase, salt, iters, 32)
plain = AESGCM(key).decrypt(nonce, ct, raw[:42]) # AAD = header
name_len = struct.unpack(">H", plain[:2])[0]
name = plain[2 : 2 + name_len].decode()
open(name, "wb").write(plain[2 + name_len :])
print("decrypted ->", name)זו ההדגמה. הכספת היא המוצר.
קובץ אחד, משפט סיסמה אחד, עמוד אחד. זה מה שדפדפן יכול לעשות. Sealby עושה את זה כמו שצריך: Argon2id שמכוילת למכשיר שלכם, מפתחות ב-Secure Enclave, וכספות מוסתרות שלא נשמרת להן שום רשימה או ספירה.
iPhone ו-iPad · iOS 17+ · חינם