ארכיטקטורת האבטחה של Cryptile, שכבה אחר שכבה
Cryptile מצפינה כל קובץ, תמונה ממוזערת ואינדקס ב-AES-256-GCM, במפתחות שנוצרים בטלפון שלכם מהתבנית שאתם מציירים. אין חשבון ואין שרת, והמפתח לעולם לא מחזיק מפתחות.
הורידו את Cryptile ב-App Store
הסיכום הפשוט נמצא בעמוד האבטחה.
מה חשוב לדעת?
- התבנית שלכם היא המקור של כל מפתח. בלעדיה לא נשמר שום דבר קריא.
- גדלים ומספר הכספות מטושטשים. הקבצים מרופדים, ומשבצות פיתיון מסתירות כמה כספות קיימות.
- אתם יכולים לבדוק את זה. ליבת ההצפנה פורסמה לבדיקה (source-available) עם מודל איומים ווקטורי בדיקה: github.com/jasonbrelsford/cryptile-core.
איך תבנית הופכת למפתח?
- התבנית נכתבת כגודל הרשת ואחריו התאים שנגעתם בהם, לפי הסדר.
- היא מעורבבת עם סוד מכשיר בגודל 32 בתים שנשמר ב-Keychain של האייפון, למכשיר הזה בלבד.
- PBKDF2-HMAC-SHA512 רץ עליה 600,000 פעמים. כל ניחוש עולה את כמות העבודה הזו.
- HKDF-SHA256 מפצל את התוצאה למפתח איתור ולמפתח עטיפה.
- מפתח האיתור קובע את שם קובץ האינדקס של הכספת. מפתח העטיפה פותח אותו.
בתוך האינדקס נמצא מפתח האב האקראי של הכספת, בגודל 256 ביט. HKDF גוזר ממנו מפתחות משנה נפרדים לקבצים, לתמונות הממוזערות ולאינדקס. אף מפתח לא משמש לשתי מטרות.
איך הקבצים מוצפנים?
פריטים קטנים, כמו תמונות ממוזערות והאינדקס, נחתמים בחתיכה אחת ב-AES-256-GCM עם nonce אקראי.
קבצים גדולים משתמשים במבנה STREAM בנתחים של 1 MB. לכל נתח יש nonce משלו, והוא רושם את מיקומו ואם הוא האחרון. חיתוך, שינוי סדר או החלפה של נתחים גורמים לפענוח להיכשל.
GCM גם מאמת כל כותרת, כך שקובץ ששונה נדחה במקום להיות מוצג.
איך מוסתרים הגדלים ומספר הכספות?
כל גוש קטן וכל נתח אחרון של קובץ מרופדים לכפולה של 64 KiB. מי שמעתיק רואה גדלים משוערים, לא מדויקים.
אין רשימת כספות. האפליקציה שומרת לפחות 8 משבצות בצורת אינדקס, אמיתיות ופיתיון, ומגרילה מחדש את משבצות הפיתיון בכל כתיבה. תבנית שלא מתאימה לשום משבצת פותחת כספת ריקה.
איך עובד השחזור?
כל כספת מקבלת ביטוי שחזור בן 9 מילים, שהם 96 ביט של אקראיות. הוא פותח עותק שחזור נפרד של הכספת, שנחתם במפתח שנוצר מהביטוי.
גיבוי ה-iCloud משקף את הקבצים המוצפנים כפי שהם. סוד המכשיר לא נכלל בו כברירת מחדל, ולכן אי אפשר להשתמש בגיבוי לבדו כדי לנחש תבניות.
מה מוצפן, ומה לא?
מוצפנים: תמונות, סרטונים, קבצים, הערות, תמונות ממוזערות, שמות, תיקיות, מועדפים, טקסט מזוהה ומיקומי תמונות. הקובץ הקטן שעוקב אחר משבצות הפיתיון ואחר הספירות של התוכנית החינמית נחתם במפתח מכשיר.
לא מוצפנים בידי Cryptile:
- הגדרות. זמן הנעילה האוטומטית, סדר המיון ומתג הגיבוי לא מכילים סודות.
- פריטים ששותפו וממתינים להוספה. הם נמצאים תחת הגנת הקבצים של iOS עד שתפתחו כספת.
- הגודל הכולל של המכל וזמני הכתיבה. כספת של 10 GB לא נראית כמו 10 MB.
- כל מה שאתם מייצאים. עותק שנשמר ב"תמונות" או ב"קבצים" נמצא מחוץ לכספת.
ממה זה מגן?
- מי שמעתיק את קבצי האפליקציה בלי ה-Keychain שלכם. הוא מקבל טקסט מוצפן ולא יכול לנסות תבניות.
- Apple, או פריצה אצל Apple. ב-iCloud יש טקסט מוצפן ואין מפתחות.
- שינוי זדוני. נתונים ששונו או שסדרם שונה נכשלים בפענוח.
- אנחנו. אנחנו לא מפעילים שרת ולא מחזיקים מפתחות, ולכן לא יכולים לאפס גישה.
ממה זה לא מגן?
- תבניות קצרות. תבנית חלשה יותר מביטוי סיסמה. עם הקבצים שלכם וה-Keychain שלכם, תבנית של 6 תאים ברשת 4×4 נפרצת תוך דקות ב-GPU. השתמשו ב-8 תאים או יותר.
- נוזקה בטלפון לא נעול. קוד שקורא את הזיכרון בזמן שכספת פתוחה הוא מעבר ליכולת של כל אפליקציה.
- מישהו שרואה אתכם מציירים. ציירו במקום שבו אף אחד לא רואה את היד שלכם.
- אובדן הטלפון והביטוי. הכספת אבודה. אין איפוס.
תבנית הפאניקה ב-Plus משמידה את סוד המכשיר, ולכן אף כספת בטלפון לא נפתחת עד לשחזור.