הנדסה אזרחית & הנדסה מבנית
יישום קידוד נתונים עבור אחסון נתונים רגיש
Table of Contents
מידע על iOS
iOS מיישמת הצפנה בשכבות מרובות כדי להגן על נתונים רגישים.ברמת החומרה, Secure Enclave מנהלת מפתחות הצפנה ותפעול קריפטוגרפיים.ברמת מערכת ההפעלה,FLT:0Data ProtectionFLT:1 משתמש הצפנה ברמת הקובץ המקשרת מקשי פענוח מקשים לקוד המעבר של המכשיר.עבור נתונים ספציפיים, מפתחים יכולים למנף מסגרות כמו CryptoKitit, CommonCpry, ו- Security Framework to הצפנה, או לרישום קבצים, או לרישום קבצים, או תשלומים.
הצפנה הופכת את הקידוד ל-ciphertext באמצעות אלגוריתם ומפתח.ללא המפתח הנכון, הנתונים נותרים בלתי קריאים.- Apple'sFLT:0;0)iOS Data Protection APIFLT:1 באופן אוטומטי מצפין קבצים במנוחה, אך מפתחים זקוקים להצפנה מפורשת עבור נתונים מאוחסנים מחוץ למערכת הקבצים המוגן - כגון Core, UserDefaults, caches או מותאמים אישית.
המפתח: (FLT:0) , 000 קידוד נתונים רגישים בכל פעם שהוא שוכן במכשיר ההרחבה 1, גם אם הצפנה של iOS מופעלת כברירת מחדל.זה מבטיח הגנה מפני גישה למכשירים פיזיים, מיצוי פלילי או יישומים זדוניים הפועלים באותה ארגז חול.
iOS הצפנה מסגרות ו- APIs
אפל מספקת מספר ספריות קריפטוגרפיים.בחירת האדם הנכון תלויה בתכלית הפריסה וברמת השליטה הנדרשת.
CryptoKit - Modern Swift API
ה-iOS 13, CryptoKit מציע ממשק Swift-native עבור סימטרי ו-Aסימטרי הצפנה, hashing והסכם מפתח.It משתמשת FLT:0.AES-GCMearFLT:1 עבור הצפנה אותנטיות, אשר מגן הן סודיות והן יושרה.
import CryptoKit
func encryptSensitiveData(_ plaintext: String, using key: SymmetricKey) throws -> Data {
let inputData = Data(plaintext.utf8)
let sealedBox = try AES.GCM.seal(inputData, using: key)
return sealedBox.combined
}
func decryptSensitiveData(_ encryptedData: Data, using key: SymmetricKey) throws -> String {
let sealedBox = try AES.GCM.SealedBox(combined: encryptedData)
let decryptedData = try AES.GCM.open(sealedBox, using: key)
return String(decoding: decryptedData, as: UTF8.self)
}
(ה) לא ניתן לעיין ב[[המאה ה-20]], ולא ב[[המאה ה-20]], אלא ב[[1924]], [[1924]], [[1924]], [[1924]], [[1924]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]
CommonCrypto - C- Based Flexibility
עבור יישומים התומכים בגרסאות iOS ישנות יותר או הדורשים מצבי קידוד cipher spher cipher s (למשל, CBC עם HMAC), CommonCrypto מספק פונקציות C ברמה נמוכה. זה תומך AES, DES, 3DES ואלגוריתמים שונים של ההצפנה AES-CBC:
#include <CommonCrypto/CommonCryptor.h>
- (NSData *)aes256Encrypt:(NSData *)plaintext withKey:(NSData *)key iv:(NSData *)iv {
size_t outLength;
NSMutableData *ciphertext = [NSMutableData dataWithLength:plaintext.length + kCCBlockSizeAES128];
CCCryptorStatus status = CCCrypt(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding,
key.bytes, key.length, iv.bytes,
plaintext.bytes, plaintext.length,
ciphertext.mutableBytes, ciphertext.length,
&outLength);
if (status == kCCSuccess) {
ciphertext.length = outLength;
return ciphertext;
}
return nil;
}
CommonCrypto דורש ניהול ידני של וקטורים (IVs) ותגי אימות. עבור הצפנה אותנטית, זוג AES-CBC עם HMAC נפרד, או לעבור ל-AES-GCM באמצעות CryptoKit כאשר ניתן.
מסגרת אבטחה ומפתח שרשרת
מסגרת האבטחה מספקת שירותי Keychain לאחסון מאובטח של מפתחות, תעודות וסיסמאות.שימוש ב-FLT:5 כדי לאחסן מפתחות עם בקרת גישה קפדנית (למשל, דורש נוכחות של משתמשים באמצעות ביומטריות) ה- Secure Enclave יכול ליצור ולאחסן מפתחות פרטיים לפעילות ECC, ולהבטיח את המפתח לעולם לא עוזב את החומרה.
יישום הצפנה עבור סוגים שונים של נתונים
לא כל הנתונים זקוקים לאותה אסטרטגיית הצפנה.לתאים את הגישה לאופן שבו משתמשים בנתונים.
הצפנה של Defaults and Core Data
משתמשים וחנויות נתונים הליבה הם קבצים SQLite פשוטים אלא אם כן מוצפנים.עבור נתוני Core, לאפשר את ה-FLT:0 NSFileProtectionTypephcioFLT:1 תכונת קובץ החנות. for fineer granularity,צפין תכונות בודדות או אובייקטים שלמים לפני שמירת:
- השתמש בתכונות הליבה (FLT:0) , 000 , 000 , 000 , 000 ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- לנסח את האובייקט המלא המנוהל כ-JSON, להצפין אותו, ולאחסן את ה-ciphertext בתכונה בינארית.
- עבור משתמשים-Defaults, לעולם אל תאחסן מיתרים רגישים; להצפין כל ערך ולאחסן את הנתונים המוצפנים.
דוגמה לאחסון נתונים מוצפנים ב- UserDefaults:
let key = SymmetricKey(size: .bits256)
let data = "user_ssn".data(using: .utf8)!
let sealedBox = try AES.GCM.seal(data, using: key)
UserDefaults.standard.set(sealedBox.combined, forKey: "encrypted_ssn")
UserDefaults.standard.synchronize()
קידוד קבצים עם הגנת הקבצים
iOS מציע שיעורי הגנה ברמת הקובץ: FLT 7, ו-(FLT:8 , ו-(FLT:9 , להגדיר תכונות אלה בעת יצירת או העברת קבצים:
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("data.bin")
try FileManager.default.setAttributes([.protectionKey: FileProtectionType.complete], ofItemAtPath: fileURL.path)
שילוב הגנה על קבצים עם הצפנה מפורשת אם הנתונים חייבים להישאר מוגנים גם כאשר המכשיר נפתח.לדוגמה, להצפין את הקובץ עם מפתח מאוחסן ב- Keychain ונגישה רק לאחר אימות.
הצפנה של Network Data (Transport Layer Security)
App Transport Security (ATS) נאכפים את HTTPS כברירת מחדל.עבור חיבורים TCP מותאמים אישית, השתמש ב-FLT:11 עם TLS או יישום SSL pinning כדי למנוע התקפות של אדם-בתוך-המידה.התרפן את היטל בשכבה יישומים עבור הגנה נוספת לעומק: גם אם TLS נפגע, הנתונים עדיין מוגנים.
ניהול יעיל
הצפנה היא רק חזקה כמו ניהול המפתח.עקוב אחר ההנחיות האלה כדי לשמור על הביטחון:
- (ב) ,0) מפתחות באמצעות גנרטור מספר אקראי מאובטח באופן cryptocurrencies: שימוש ב- 12:12 או FLT:13
- (ב) ,0) מפתחות בלבד ב- KeychainFirve1; עם תכונות נגישות מתאימות: (FLT:14) מונע גיבוי וקשר את המפתח למכשיר.
- (ב) ,0) ,Use biometric or passcode Identity FIRLT 1 (לפני גלגול המפתח - FLT:15 עם FLT:16 כוחות אימות המשתמש.
- (ב) .0. [המפתחות של קוד] על לוח זמנים או לאחר אירוע אבטחה 1:1 - מידע מוצפן מחדש עם מפתחות חדשים ומחק באופן מאובטח מפתחות ישנים.
- (FLT:0) אל תקשו מקשקוד 1 בקוד המקור או בקבצי תצורה. מפתחות דרבי מסיסמאות המשתמש באמצעות תפקוד דרמטי איטי (PBKDF2 או scrypt) במידת הצורך.
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
עבור יישומים העוסקים בנתונים רגישים מאוד, שקול להשתמש מודול אבטחה של FLT:0hardware (HSM) MPEGFLT:1 באמצעות שירותי רשת, אם כי זה מציג שקיפות ודורש קישוריות לאינטרנט.
המונחים: Re-encryption
כאשר מפתח נפגע או לאחר תקופה מוגדרת (למשל, כל 90 יום), לסובב את המפתח.זה כרוך לפענח את כל הנתונים עם המפתח הישן, יצירת מפתח חדש, וקידוד מחדש. עבור נתונים גדולים, ליישם תוכנית מפתח גרסה:
- לאחסן מזהה מפתח (למשל, UUID) לצד כל שיא מוצפן.
- שמור מיפוי של מזהים למפתחות בפועל ב- Keychain (התקר במנוחה).
- במהלך סיבוב, להוסיף כניסה חדשה ללא קידוד מחדש של כל הנתונים. Re-enקריפט בעצלות על גישה.
שיקולים ושיקולים
תקנות רבות מחייבות הצפנה של נתונים רגישים.FLT:0.GDPRFLT:1 דורש אמצעים טכניים מתאימים, וההצפנה היא טכניקת pseudonymization מוכרת.FLT:2HIPAAIRFLT 3 מחייב הצפנה של ePHI במנוחה ובמעבר.FLT:4PCI DSSFLT:5 דורש הצפנה של נתונים של בעלי כרטיס ב-iOS, לאחר דרישות הגנת נתונים משולבות, יישום של יישומי הצפנה ויישומים של אפל.
(ב) עיין במסמכים רשמיים של אפל להמלצות האחרונות:0.CryptoKit Developer GuidementFLT:1, FLT:2Keyשרשרת ServicesFLT 3:0;0) ו-FLT:4Protecting User PrivacysFLT:5 for Industry Directation, ראה FLT:6OWASP Mobile Security TestingFLT 7 ו-FLT4:5:5B-D.
בדיקות ואימות
לאחר יישום הצפנה, ודא כי זה עובד נכון:
- כתוב בדיקות יחידה המצפין ופענוח קידודים ידועים וטוענים פלטות.
- מקרים של ספקטרום מבחן: נתונים ריקים, מטעני תשלום גדולים מאוד, וקידודים מושחתים.
- לבצע בדיקות אבטחה באמצעות מכשיר שבור לכלא כדי לדמות תרחישים התקפה - תוך כדי כך שהמפתחות נותרו בלתי נגישים ללא אימות.
- השתמש בכלים ניתוח סטטי כדי להבטיח לא מקשקוד מקשים או אלגוריתמים חלשים.
- יומני סקירה - לעולם אל תרשום נתונים רגישים או מפתחות הצפנה.
מסקנה
יישום הצפנה של נתונים עבור אחסון נתונים רגישים של iOS הוא תהליך רב שכבתי. על ידי שילוב הגנת הקבצים iOS, הצפנה של יישומי-שכבת עם CryptoKit או CommonCrypto, וניהול מפתח קפדני באמצעות Keychain ו- Secure Enclave, מפתחים יכולים להפחית באופן משמעותי את הסיכון לחשיפה נתונים. Compliance עם תקנות כמו GDPR ו-HIPAA דורשות נהלים קבועים הצפנה ולהבטיח אבטחה לטווח ארוך.