קטגוריית OWASP: MASVS-CRYPTO: קריפטוגרפיה
סקירה כללית
למרות השימוש הנרחב בקריפטוגרפיה כדי להגן על סודיות הנתונים ועל השלמות שלהם, קיים סיכון משמעותי כשמפתחים מטמיעים בטעות אלגוריתמים קריפטוגרפיים חלשים או מיושנים. נקודת התורפה הזו נובעת מחולשות מובנות באלגוריתמים האלה, ששחקנים זדוניים עם הידע או כוח המחשוב הנדרשים יכולים לנצל. ההשלכות של ניצול כזה יכולות להיות חמורות, ועלולות להוביל לגישה לא מורשית, לפרצות אבטחה ולמניפולציה של מידע רגיש.
השפעה
יכול להיות שייחשף מידע רגיש, או שמישהו ישנה או יזייף אותו. אלגוריתמים קריפטוגרפיים פגומים או מסוכנים עלולים להוביל לפגיעויות, ואפשר לנצל אותם כדי לפענח מידע רגיש, לשנות נתונים או להתחזות לישויות לגיטימיות. ההשפעה של ניצול חולשות כאלה יכולה לנוע בין פריצות לנתונים ואובדן כספי לבין פגיעה במוניטין ואובדן אמון המשתמשים.
סיכון: פונקציות גיבוב קריפטוגרפי חלשות או פגומות
השימוש בפונקציות גיבוב קריפטוגרפיות חלשות או פגומות (כמו MD5
או SHA1
) מהווה סיכון משמעותי לאבטחה ולשלמות של הנתונים. פונקציות גיבוב (hash) נועדו ליצור טביעות אצבע ייחודיות באורך קבוע (גיבובים) של נתוני קלט, ולכן הן שימושיות למגוון מטרות, כולל אימות שלמות הנתונים, אחסון סיסמאות וחתימות דיגיטליות. עם זאת, כשמשתמשים בפונקציות גיבוב חלשות או כאלה שנפרצו, עלולות להתעורר כמה נקודות חולשה:
- התקפות התנגשות: פונקציות גיבוב חלשות חשופות להתקפות התנגשות, שבהן תוקף מוצא שני קלטים שונים שמפיקים את אותו ערך גיבוב. הם יכולים להחליף נתונים לגיטימיים בנתונים זדוניים בלי שהמערכת תזהה את זה, וכך לפגוע בשלמות הנתונים.
- פרצות באבטחת מידע: אם הסיסמאות מגובבות באמצעות אלגוריתם חלש, פרצה מוצלחת במערכת עלולה לחשוף את פרטי הכניסה של המשתמשים. לאחר מכן, התוקפים יוכלו להשתמש בטבלאות קשת או בטכניקות אחרות כדי לפצח את הסיסמאות, וכך לקבל גישה לא מורשית לחשבונות.
- דחייה של חתימות דיגיטליות: אפשר לנצל פונקציות גיבוב חלשות שמשמשות בחתימות דיגיטליות כדי ליצור חתימות מזויפות, ולכן קשה לקבוע את האותנטיות והשלמות של מסמכים או הודעות.
אמצעי צמצום סיכונים
כדי לצמצם את הסיכונים האלה, חשוב להשתמש בפונקציות גיבוב (hash) קריפטוגרפיות חזקות שנבדקו היטב, כמו SHA-2
או SHA-3
, ולעדכן אותן כשמתגלים פגיעויות חדשות. בנוסף, כדי לשפר עוד יותר את ההגנה על הנתונים, מומלץ לאמץ שיטות אבטחה כמו הוספת מלח לסיסמאות ושימוש באלגוריתמים של גיבוב ספציפי לסיסמאות כמו bcrypt
או Argon2
.
סיכון: פונקציות הצפנה קריפטוגרפית חלשות או פגומות
השימוש בפונקציות הצפנה קריפטוגרפיות חלשות או פגומות (כמו DES
או RC4
) יוצר סיכונים חמורים לחיסיון של נתונים רגישים. הצפנה נועדה להגן על מידע על ידי המרתו לפורמט לא קריא, אבל אם אלגוריתם ההצפנה פגום, אפשר לעקוף את ההגנות האלה:
- פרצות אבטחה: אלגוריתמים חלשים של הצפנה חשופים למתקפות שונות, כולל מתקפות כוח ברוטלי, מתקפות טקסט גלוי ידוע וטכניקות קריפטואנליזה. אם ההתקפות האלה מצליחות, הן יכולות לחשוף נתונים מוצפנים ולאפשר גישה לא מורשית למידע רגיש כמו פרטים אישיים, רשומות פיננסיות או נתונים עסקיים סודיים.
- מניפולציה של נתונים וזיוף שלהם: גם אם תוקף לא יכול לפענח את הנתונים באופן מלא, הוא עדיין יכול לבצע בהם מניפולציה בלי שזה יתגלה, אם אלגוריתם ההצפנה חלש. הדבר עלול להוביל לשינויים לא מורשים בנתונים, ועלול לגרום להונאה, להצגת מצגי שווא או לפעילויות זדוניות אחרות.
אמצעי צמצום סיכונים
שימוש באלגוריתמים קריפטוגרפיים חזקים בפונקציות הצפנה
כדי לצמצם את הסיכונים האלה, חשוב להשתמש באלגוריתמים קריפטוגרפיים חזקים שנבדקו היטב, ולפעול לפי השיטות המומלצות לניהול מפתחות ולהטמעה של הצפנה. כדי לשמור על אבטחת נתונים חזקה, חשוב גם לעדכן באופן קבוע את אלגוריתמי ההצפנה ולהתעדכן לגבי איומים חדשים.
אלגוריתמים מומלצים לשימוש כברירת מחדל:
- הצפנה סימטרית:
-
AES-128
/AES-256
עם מצבGCM
Chacha20
-
- הצפנה אסימטרית:
-
RSA-2048
/RSA-4096
עם מרווח פנימי שלOAEP
-
שימוש בפרימיטיבים מאובטחים מספרייה קריפטוגרפית כדי לצמצם את הסיכונים הנפוצים
בחירת אלגוריתם הצפנה מתאים היא חיונית, אבל כדי למזער באמת את נקודות החולשה באבטחה, כדאי להשתמש בספריית קריפטוגרפיה שמציעה API יעיל ומדגישה הגדרות ברירת מחדל מאובטחות. הגישה הזו לא רק מחזקת את האבטחה של האפליקציות, אלא גם מצמצמת באופן משמעותי את הסיכוי להחדרת נקודות חולשה דרך שגיאות בתכנות. לדוגמה, Tink מפשטת את אפשרויות ההצפנה על ידי הצעת שתי אפשרויות שונות: הצפנה AEAD
והצפנה Hybrid
, וכך מקלה על מפתחים לקבל החלטות מושכלות בנושא אבטחה.
סיכון: פונקציות חתימה קריפטוגרפיות חלשות או פגומות
השימוש בפונקציות חתימה קריפטוגרפיות חלשות או פגומות (כמו RSA-PKCS#1 v1.5
או כאלה שמבוססות על פונקציות גיבוב חלשות) יוצר סיכונים חמורים לשלמות הנתונים והתקשורת. חתימות דיגיטליות נועדו לספק אימות, אי-התכחשות ושלמות נתונים, כדי להבטיח שהודעה או מסמך מקורם משולח ספציפי ושלא נעשה בהם שינוי. עם זאת, אם יש פגם באלגוריתם החתימה הבסיסי, אי אפשר להבטיח את האבטחה הזו:
- זיוף חתימות: אלגוריתמים חלשים של חתימות עלולים להיות פגיעים לתקיפות שמאפשרות לגורמים זדוניים ליצור חתימות מזויפות. המשמעות היא שהם יכולים להתחזות לישויות לגיטימיות, לזייף מסמכים או לשנות הודעות בלי שזה יתגלה.
- דחיית חתימות: אם אלגוריתם חתימה נפרץ, יכול להיות שחותם יוכל לטעון טענת שקר שהוא לא חתם על מסמך, ובכך לערער על העיקרון של אי-התכחשות וליצור אתגרים משפטיים ולוגיסטיים.
- שינוי נתונים וזיוף: בתרחישים שבהם נעשה שימוש בחתימות כדי להגן על שלמות הנתונים, אלגוריתם חלש עלול לאפשר לתוקפים לשנות את הנתונים בלי לפסול את החתימה, וכך להוביל לזיוף שלא מזוהה ולפגיעה פוטנציאלית במידע קריטי.
אמצעי צמצום סיכונים
שימוש באלגוריתמים חזקים של חתימה קריפטוגרפית
כדי לצמצם את הסיכונים האלה, חשוב להשתמש באלגוריתמים חזקים ומוכחים של חתימות קריפטוגרפיות:
-
RSA-2048
/RSA-4096
עם מרווח פנימי שלPSS
- אלגוריתם חתימה דיגיטלית של עקומים אליפטיים (
ECDSA
) עם עקומים מאובטחים
שימוש בפרימיטיבים מאובטחים מספרייה קריפטוגרפית כדי לצמצם את הסיכונים הנפוצים
בחירת אלגוריתם החתימה הנכון היא חיונית, אבל כדי לצמצם באמת את נקודות החולשה באבטחה, כדאי להשתמש בספריית הצפנה שמספקת הבטחות אבטחה חזקות כברירת מחדל. לדוגמה, Tink מפשט את אפשרויות החתימה על ידי הצעת ECDSA
עם עקומות מאובטחות כאפשרות ברירת המחדל שלו, והכול במסגרת API פשוט ומקיף. הגישה הזו לא רק משפרת את האבטחה, אלא גם מייעלת את הפיתוח כי היא מבטלת את הצורך בהגדרה מורכבת או בקבלת החלטות.
משאבים
- ספריית הקריפטוגרפיה Tink
- איכות של אפליקציות ל-Android: קריפטוגרפיה
- חתימה דיגיטלית באמצעות Tink
- הצפנה היברידית עם Tink
- הצפנה מאומתת באמצעות Tink
- פונקציות הצפנה וגיבוב קריפטוגרפיות חלשות או פגומות ב-Android Security Lint
- CWE-327: Use of a Broken or Risky Cryptographic Algorithm
- CWE-328: Use of Weak Hash
- CWE-780: שימוש באלגוריתם RSA ללא OAEP
- דף NIST בנושא פונקציות גיבוב שאושרו
- תקן Advanced Encryption Standard (ויקיפדיה)
- אלגוריתם גיבוב מאובטח 2 (ויקיפדיה)
- אלגוריתם גיבוב מאובטח 3 (ויקיפדיה)
- מערכת הצפנה RSA (ויקיפדיה)
- אלגוריתם חתימה דיגיטלית של עקומות אליפטיות (ויקיפדיה)
- צופן זרם ChaCha (ויקיפדיה)
- גיבוב סיסמה (ויקיפדיה)
- מערכת הצפנה היברידית (ויקיפדיה)
- הצפנה מאומתת