הכחשה סבירה באפליקציות: מה זה ולמה זה חשוב

הכחשה סבירה באפליקציות: מה זה ולמה זה חשוב

הכחשה סבירה פירושה שאי אפשר להוכיח שנתונים מוסתרים קיימים.


הכחשה סבירה בהצפנה היא תכונה של האחסון שמאפשרת למשתמש לחשוף מערך נתונים אחד בלי להשאיר סימן מבני שמוכיח שקיים מערך נתונים נוסף. הטענה חייבת לציין את מודל האיום שלה: תמונה סטטית של מאגר מוצפן עם ריפוד תקין שונה ממכשיר חי ופרוץ, ממטא-נתונים של שירות ענן או מעותקים שנמצאים במקום אחר. זו לא רק תכונת הסתרה. היא תלויה בכך שההצפנה, מבנה האחסון, הריפוד והתכנון התפעולי עובדים יחד.

המדריך הזה מסביר איך הכחשה סבירה עובדת באפליקציות, מה ההבדל בין הכחשה קריפטוגרפית אמיתית למצבי פיתיון קוסמטיים, באילו מצבים אמיתיים זה חשוב, ואיך להעריך טענות של הכחשה.

מה הכחשה סבירה אומרת בהצפנה

בשפת היומיום, הכחשה סבירה פירושה שאפשר להכחיש משהו באופן אמין. בקריפטוגרפיה של אחסון, המטרה השימושית צרה יותר: מי שבודק את המאגר המוצפן לא אמור להצליח להבדיל בין תוכן מוסתר לבין שטח ריק מרופד, במסגרת מודל האיום שהוגדר. שום אפליקציה לא יכולה להרחיב את ההבטחה הזאת לכספת שכבר פתוחה, לקלט שהוקלט, לעותקים חיצוניים או לכל צורה של פריצה למכשיר.

הרעיון נולד בהצפנת דיסקים. TrueCrypt (ויורשתה VeraCrypt) הציגו לראשונה את הנפח המוסתר: נפח מוצפן בתוך נפח מוצפן אחר. סיסמה אחת חושפת את הנפח החיצוני עם קבצים תמימים. סיסמה אחרת חושפת את הנפח הפנימי המוסתר עם הקבצים הרגישים. בודק פורנזי לא יכול לקבוע אם קיים נפח מוסתר, כי השטח הפנוי בנפח החיצוני מלא בנתונים אקראיים שאי אפשר להבדיל בינם לבין נתונים מוצפנים.

באפליקציות, הכחשה סבירה פירושה שפרטי גישה שונים (סיסמאות, קודי PIN, תבניות) פותחים מערכי נתונים שונים, ואין מטא-נתונים, מרשם, דגל תצורה או סימן מבני שחושפים שקיימים מערכי נתונים נוספים.

הכחשה אמיתית לעומת מצבי פיתיון קוסמטיים

זו ההבחנה הקריטית שרוב האפליקציות מפספסות.

מצב פיתיון קוסמטי (לא הכחשה אמיתית)

אפליקציות כספת רבות מציעות תכונת "פיתיון" או "PIN מזויף". מגדירים PIN משני שפותח מרחב נפרד עם תמונות אחרות. הבעיה: האפליקציות האלה בדרך כלל שומרות דגל בוליאני, רשומה במסד נתונים או קובץ תצורה שמציינים שמצב פיתיון קיים ומוגדר.

בודק פורנזי שמכיר את האפליקציה יכול למצוא את הדגל הזה. מציאת מצב פיתיון מוגדר מוכיחה שקיימים נתונים מוסתרים. ההכחשה קוסמטית: היא עובדת מול סקרן מזדמן, אבל נכשלת בבדיקה פורנזית.

סימנים להכחשה קוסמטית:

  • לאפליקציה יש מתג "מצב פיתיון" בהגדרות
  • קובץ תצורה שומר אם מצב פיתיון מופעל
  • טבלה במסד הנתונים מפרטת מזהי כספות עם סימון סוג (ראשית/פיתיון)
  • מבנה האחסון של האפליקציה משתנה כשמפעילים מצב פיתיון
  • הסרה והתקנה מחדש של האפליקציה חושפות התנהגות שונה כשמצב פיתיון היה מוגדר

הכחשה קריפטוגרפית אמיתית

הכחשה אמיתית היא תכונה של הארכיטקטורה, לא מתג בהגדרות. האחסון המוצפן חייב להיות מתוכנן כך ש:

  1. פרטי גישה חלופיים חושפים רק את מערך הנתונים שלהם. המערכת לא שומרת דגל פיתיון נפרד שמסמן פרטי גישה מסוימים כהסוואה. פרטי גישה שגויים יכולים להיכשל, אבל הכישלון לא יכול לחשוף אם קיים מערך נתונים שלא נחשף.

  2. אין מרשם כספות. האפליקציה לא יכולה למנות כמה כספות קיימות. אין ספירה, אין אינדקס, אין רשימת מזהי כספות. בודק פורנזי שבוחן את האחסון של האפליקציה מוצא מאגר אחיד של נתונים מוצפנים.

  3. אין דגלי תצורה שחושפים כספות מוסתרות. אין ערך בוליאני, אין רשומה במסד נתונים ואין קובץ העדפות שמציינים אם קיימות כספות נוספות.

  4. האחסון מרופד. נפח האחסון הכולל לא משתנה לפי מספר הכספות או הקבצים. בלי ריפוד, בודק יכול להעריך את מספר הכספות לפי ההפרש בין נפח הנתונים המוצפנים הכולל לבין התוכן הגלוי.

  5. אי אפשר להבדיל בין הנתונים המוצפנים לרעש אקראי. אין גבולות קבצים, אין כותרות ואין סימנים מבניים שחושפים איפה נגמרים הנתונים של כספת אחת ומתחילים הנתונים של אחרת.

תכונה פיתיון קוסמטי הכחשה אמיתית
נתונים נפרדים לכל פרטי גישה כן כן
אין מרשם כספות לא (מסד נתונים עוקב אחרי הכספות) כן
אין דגלי תצורה לא (מתג הפיתיון נשמר) כן
ריפוד אחסון לעיתים רחוקות כן
מסתיר אחסון חלופי בתמונה סטטית לא כן, במסגרת מודל האיום שהוגדר לאחסון
ארכיטקטורה או תכונה מתג תכונה תכונה של הארכיטקטורה

מצבים אמיתיים שבהם זה חשוב

הכחשה סבירה היא לא חשש תיאורטי. היא עונה על מצבים אמיתיים, מתועדים וחוזרים.

מעברי גבול

במעבר גבול, בודק עשוי לבחון מכשיר ולבקש פרטי גישה. אם תכנון מסוים באמת מספק הכחשה ברמת האחסון, פרטי גישה אחדים יכולים לחשוף מערך נתונים תמים, ובתמונה סטטית לא יהיה סימן מבני שמבדיל בין תוכן מוסתר לריפוד. מבנה האחסון הנוכחי של Vaultaire מאפשר לבודק עם גישה למכל האפליקציה להעריך את מספר הכספות, ולכן הוא לא מספק את הערובה הזאת.

אלימות במשפחה ויחסים כפויים

מי שנמצא במערכת יחסים מתעללת עשוי להזדקק לשמור ראיות (תמונות של פציעות, הודעות מאיימות, מסמכים משפטיים) במכשיר שהפוגע מנטר. אם הפוגע דורש לראות את הכספת, המשתמש יכול לפתוח כספת עם תוכן לא רגיש. בלי הכחשה אמיתית, דגל "מצב פיתיון" בתצורת האפליקציה יחשוף שקיים תוכן מוסתר.

גניבת מכשיר

גנב עם כישורים טכניים עשוי לנסות לחלץ נתונים מטלפון גנוב. מאגר ניתן להכחשה עם ריפוד תקין נועד להסתיר כמה מערכי נתונים תופסים את המאגר, אבל ההקצאה הכוללת, מצב המכשיר, גיבויים ועקבות תפעוליים עדיין שייכים למודל האיום. Vaultaire מצפינה כיום את התוכן, אבל מספר ה-arenas של האחסון עדיין מגביל כמה כספות מכילות קבצים.

הגנה משפטית ועיתונאית

עיתונאים שמגנים על מקורות, עורכי דין שמגנים על תיקי לקוחות ופעילים במשטרים אוטוריטריים עומדים במצבים שבהם אפשר לחייב אותם לחשוף את תוכן המכשיר. הכחשה אמיתית מספקת הגנה אמינה מפני תפיסת נתונים.

מה Vaultaire מיישמת כיום

Vaultaire מיישמת גישה שמופרדת לפי תבנית וממשק רגיל בלי רשימת כספות גלויה. התכונות האלה עוזרות בשימוש רגיל באפליקציה, אבל הן לא עומדות בכל הדרישות ברשימת הבדיקה של הכחשה אמיתית שלמעלה.

תבניות מוגדרות פותחות כספות מוצפנות נפרדות. PBKDF2 גוזר מפתח כספת מהתבנית וממלח משותף לכל המכשיר. מפתח מוגדר מאמת את האינדקס המוצפן שלו ופותח מפתח ראשי אקראי. תבנית שלא הוגדרה מציגה מצב ריק ולא הודעת "תבנית שגויה".

הפורמט המקומי עדיין מאפשר להעריך את מספר הכספות. Vaultaire שומרת קובץ שורש vault_index_<locator>.bin אחד לכל כספת, במאגר של 64 קבצים או יותר יחד עם קובצי כיסוי. הדפים וה-arenas של האחסון של כל הכספות נמצאים בתיקייה אחת בשמות אקראיים. השמות לא חושפים את התבנית, את שם הכספת או לאיזו כספת שייך כל קובץ, אבל מי שיש לו גישה למכל האפליקציה עדיין יכול להעריך כמה כספות מכילות קבצים, כי מספר ה-arenas מגביל את המספר הזה. האימות של AES-GCM ושם הקובץ הדטרמיניסטי מספקים גם בדיקה לא מקוונת למפתחות כספת מועמדים.

האחסון המקומי לא בגודל קבוע. תוכן הקבצים והמטא-נתונים מוצפנים, ומקטעי הגיבוי בענן משתמשים בריפוד גודל וברשומות פיתיון. קובצי השורש נמצאים במאגר יחד עם קובצי כיסוי, ו-arenas של כיסוי שומרים את מספר ה-arenas על רצועה, אבל מספר ה-arenas, מספר דפי הקטלוג, זמני הקבצים ונפח האחסון הכולל עדיין חושפים את המבנה.

קיים מצב שחזור וכפייה. Vaultaire שומרת את נתוני השחזור במסד נתונים של Keychain שמוצפן ב-AES-GCM. מצב כפייה (Pro) מוחק את האינדקסים, הדפים וה-arenas של האחסון של הכספות האחרות במכשיר הזה (מחיקת קבצים רגילה, בלי דריסה), מוחק את נתוני השחזור ומנתק את המכשיר מהסנכרון. הוא לא מוחק גיבויים בענן או עותקים במכשירים אחרים, וזמן הסיום תלוי בעבודה המקומית שמתבצעת.

לכן Vaultaire מספקת הפרדה ברמת הממשק ואחסון מוצפן, לא הוכחה תאורטית-מידעית שלא קיימת כספת נוספת. פורמט האחסון שיצא בגרסה 1.0.17 מסתיר אילו קבצים שייכים לאיזו כספת, אבל מספר ה-arenas שלו עדיין נותן לצילום לא מקוון של מכל האפליקציה גבול עליון למספר הכספות.

איך להעריך טענות של הכחשה

כשאפליקציה טוענת להכחשה סבירה, שאל:

  1. האם יש מתג "מצב פיתיון"? אם כן, ההכחשה קוסמטית. בודק פורנזי יכול למצוא את המתג.
  2. האם לאפליקציה יש רשימת כספות או מסד נתונים של כספות? אם כן, אפשר להוכיח שהכספות קיימות.
  3. האם אפשר לאמת ניחושים באופן לא מקוון? טקסט מוצפן מאומת יכול לאשר מפתח מועמד בלי hash נפרד של סיסמה. שאל מה מגביל את עלות הניחוש, והאם מבנה האחסון מציע טביעת אצבע זולה יותר של המפתח.
  4. האם צריכת האחסון משתנה לפי מספר הכספות? אם כן, ניתוח דיסק יכול להעריך את מספר הכספות.
  5. האם האפליקציה יכולה למנות כספות? אם האפליקציה יכולה להציג לך רשימה של הכספות שלך, הרשימה הזאת קיימת במכשיר ואפשר לגלות אותה.

שאלות נפוצות

האם הכחשה סבירה חוקית?

שימוש בהצפנה עם הכחשה סבירה חוקי ברוב הדמוקרטיות. אין חוק שאוסר להחזיק במכשיר נתונים מוצפנים שאי אפשר להוכיח את קיומם. בחלק מתחומי השיפוט (בריטניה לפי RIPA, אוסטרליה לפי Assistance and Access Act) הרשויות יכולות לחייב מסירת מפתחות הצפנה. השאלה המשפטית היא אם אפשר לאכוף חיוב למסור מפתח לנתונים שאי אפשר להוכיח את קיומם. זה עדיין תחום משפטי מתפתח.

האם כלים פורנזיים יכולים לגלות הכחשה סבירה?

בודק שמשיג את מכל האפליקציה של Vaultaire יכול לזהות אחסון מוצפן. קובצי השורש vault_index_*.bin נמצאים במאגר של 64 קבצים או יותר יחד עם קובצי כיסוי, והדפים וה-arenas של האחסון של כל הכספות נמצאים בתיקייה אחת בשמות אקראיים. שמות הקבצים לא מראים לאיזו כספת שייך כל קובץ, אבל מספר ה-arenas מגביל כמה כספות מכילות קבצים, כך שבודק עדיין יכול להעריך כמה כספות יש לך. הקבצים לא חושפים שמות כספות או תוכן גלוי. לכן התכנון הנוכחי מסתיר כספות מהניווט הרגיל, לא מכל בדיקה פורנזית של האחסון.

האם הכחשה סבירה עובדת מול מדינה נחושה?

AES-256-GCM מספק גבול חזק להצפנת התוכן כשהמפתחות, ערכי ה-nonce והמימוש תקינים. זה לא הופך את מבנה האחסון הנוכחי של Vaultaire לניתן להכחשה מול בודק של מדינה: בודק עדיין יכול להעריך את מספר הכספות המקומיות, ופריצה למכשיר חי יכולה לכוון לתבניות, למפתחות, לתצוגות מקדימות או לייצואים בזמן שכספת פתוחה. התכונה הנוכחית מפרידה בממשק בין מה שתבניות שונות פותחות; היא לא מבטיחה שבודק נחוש לא יוכל להוכיח שקיימים אינדקסים מקומיים נוספים.

מה ההבדל בין הכחשה סבירה לכספות מוסתרות?

כספות מוסתרות הן כספות שלא נראות בממשק הרגיל של האפליקציה. הכחשה קריפטוגרפית חזקה היא תכונה נפרדת: אי אפשר להבדיל בין נתונים מוסתרים לאחסון ריק מרופד. Vaultaire מספקת כיום את התכונה הראשונה. פורמט האחסון הנוכחי שלה עדיין מאפשר לבודק עם גישה למכל האפליקציה להעריך את מספר הכספות, ולכן הוא לא מספק את השנייה.

האם אפשר להשתמש בהכחשה סבירה עם גיבויים בענן?

Vaultaire כותבת מניפסטים מוצפנים של גיבוי ומקטעי קבצים מוצפנים ומרופדים למסד הנתונים הפרטי של המשתמש ב-CloudKit. שמות אקראיים לרשומות נתונים, ריפוד מקטעים ל-10 MB ורשומות פיתיון מצמצמים חשיפה ישירה של תוכן. מספר הרשומות, הנפח הכולל, התזמון ודפוסי העדכון נשארים מטא-נתונים גלויים של השירות, כך שגיבוי בענן לא יוצר מאגר בגודל קבוע שניתן להכחשה באופן תאורטי-מידעי.

השורה התחתונה

הכחשת אחסון חזקה נועדה למנוע מבודק להבדיל בין נתונים מוסתרים לשטח פנוי מרופד במאגר מוצפן סטטי. רוב האפליקציות שטוענות לתכונה הזאת מציעות מצבי פיתיון קוסמטיים עם דגלי תצורה שאפשר לגלות. עמידה בהגדרה המחמירה דורשת מודל איום מדויק, בלי מרשם כספות שאפשר לספור, בלי דגלי תצורה חושפניים, עם ריפוד יציב ועם רשומות מוצפנות שלא חושפות אילו משבצות אמיתיות.

Vaultaire משתמשת בתבניות מוגדרות כדי להפריד בין כספות מוצפנות, ושומרת את שמות הכספות ואת התוכן שלהן מחוץ לממשק הנעול. מבנה האחסון הנוכחי שלה עדיין מאפשר לבדיקה של מכל האפליקציה להעריך את מספר הכספות. התייחס לזה כהסתרה ברמת הממשק שמגובה בהצפנה מאומתת, לא כהוכחה שלא קיימת כספת נוספת.