การเข้าใจการเข้ารหัสข้อมูลบน OS
IOS ใช้การเข้ารหัสในหลายชั้นเพื่อป้องกันข้อมูลที่สําคัญ โดยในระดับฮาร์ดแวร์ เครือข่าย enterlave ที่ปลอดภัย จะจัดการการเข้ารหัสกุญแจและปฏิบัติการของระบบคอมพิวเตอร์ได้ ในระดับการทํางาน [FLT: 0] ใช้การเข้ารหัสแบบแฟ้มแบบเข้ารหัสที่เชื่อมการเข้ารหัสไปยังรหัสอุปกรณ์ สําหรับข้อมูลต่าง ๆ ของโปรแกรม สําหรับผู้ใช้ที่พัฒนาแล้ว นักพัฒนาสามารถเพิ่มความสามารถ เช่น Krypto, Compripto, และ การเข้ารหัสแฟ้ม, หรือ การเข้ารหัสข้อมูลเครือข่าย
การแปลงการเข้ารหัสข้อความธรรมดาไปเป็นการเข้ารหัสโดยใช้อัลกอริทึมและกุญแจ หากไม่มีกุญแจที่ถูกต้อง ข้อมูลเหล่านี้ยังคงอ่านไม่ได้ ข้อมูลของแอปเปิล [FLT: 0] ข้อมูลของ API[FLT: 1) โดยอัตโนมัติ การเข้ารหัสแฟ้มแบบเข้ารหัสแบบว่าง แต่นักพัฒนาต้องการการเข้ารหัสอย่างชัดเจนสําหรับเก็บข้อมูลภายนอกระบบการคุ้มครอง -- เช่น ในข้อมูล Core, userDolfults, หรือแคชจัดการจัดการจดหมายกําหนดเอง
เคล็ดลับการรับคีย์: [FLT: 0] รองรับข้อมูลไวตาบ เมื่อใดก็ตามที่มันอยู่บนอุปกรณ์ [FLT: 1) แม้ว่าการเข้ารหัสแบบ ICOS จะเปิดใช้งานโดยปริยายแล้ว จะรับประกันการป้องกันการเข้าถึงอุปกรณ์, การแยกโปรแกรม, หรือโปรแกรมที่มุ่งร้ายที่ทํางานในกล่องทรายเดียวกัน
การเข้ารหัส OSDFForm and APIs
แอปเปิลมีไลบรารีที่ใช้ไฟฟ้าหลายแห่ง การเลือกแบบขวาขึ้นกับเป้าหมายที่ใช้ใช้งาน และระดับของการควบคุมที่ต้องการ
Krypto Kit – Moden Spight April
แนะนําให้ใช้ ICOS 13, Krypto Kit เสนอส่วนเชื่อมต่อแบบไวต์-Native สําหรับการเข้ารหัสแบบสมมาตรและมีความไม่สมมาตร, Hadhing และข้อตกลงที่สําคัญ ใช้ [FLT: 0] AS-GCM สําหรับการเข้ารหัสแบบเข้ารหัสแบบมีการตรวจสอบสิทธิ์ ซึ่งป้องกันทั้งความลับและความเที่ยงตรง และความถูกต้อง ด้านล่างนี้เป็นรูปแบบการเข้ารหัสทั่วไป:
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)
}
เก็บ [FLT: 1) ไว้ในคีย์ชินเสมอ, ไม่ใช่ในแฟ้มผู้ใช้หรือแฟ้มธรรมดา ใช้ [FLT: 2] กับ เพื่อผูกกุญแจกับอุปกรณ์และผู้ใช้
ใช้งานคอมมอน ค รีปโต – ความน่าดึงดูดของ C
สําหรับ Apps ที่รองรับรุ่น OS รุ่นที่เก่ากว่า หรือต้องการโหมดการเข้ารหัสการเข้ารหัสแบบบล็อค (เช่น CBC กับ HMAC), CompleteCripto มีฟังก์ชัน C แบบต่ํา รองรับ AES, DES, 3DS และอัลกอริทึมแฮชติ้งต่างๆ ตัวอย่างการเข้ารหัส 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;
}
CommonCripto ต้องการการจัดการการเริ่มระบบด้วยตัวมันเอง (Ints) และป้ายกํากับการตรวจสอบสิทธิ์ สําหรับการเข้ารหัสแบบยืนยัน, จับคู่ AES-CBC โดยมี HMC แยกกัน หรือสลับไป AES-GCM ผ่าน Krypto Kitit เมื่อเป็นไปได้
กรอบความปลอดภัยและคีย์จีน
กรอบความปลอดภัยจะให้บริการคีย์จีนสําหรับจัดเก็บกุญแจ, ใบรับรอง, และรหัสผ่านอย่างปลอดภัย ใช้ [FLT: 5] เพื่อใช้เก็บกุญแจที่มีการควบคุมอย่างเข้มงวด (เช่น ต้องการผู้ใช้ผ่านระบบย่อยชีวภาพ). entreclaver ที่ปลอดภัยสามารถสร้างและเก็บกุญแจส่วนตัวสําหรับปฏิบัติการ ECC ได้, การตรวจสอบว่ากุญแจนี้ไม่เคยปล่อยอุปกรณ์ไว้
การถอดรหัสสําหรับชนิดข้อมูลที่แตกต่างกัน
ไม่ จําเป็น ต้อง มี ข้อมูล ทุก อย่าง ที่ มี การ เข้ารหัส แบบ เดียว กัน.
เข้ารหัสข้อมูลปริยายและข้อมูลหลักของผู้ใช้
ผู้ใช้Defaults และ core Datives เป็นแฟ้มแบบ SQLite ธรรมดา ยกเว้นการเข้ารหัส สําหรับข้อมูล Core, เปิดใช้งาน [FLT: 0] Facter Facter (FLT: 1) สําหรับคุณสมบัติเพิ่มเติม, การเข้ารหัสเฉพาะบุคคล หรือทั้งวัตถุ ก่อนที่จะบันทึก:
- ใช้ข้อมูลหลัก [FLT: 0] แบบแปลงได้[FLT: 1) คุณสมบัติที่มีตัวแปลงค่าตามกําหนดเอง ซึ่งการเข้ารหัส/ถอดรหัสเมื่ออ่าน/เขียน.
- ต่อเนื่องทั้งวัตถุจัดการเป็น Json, เข้ารหัสมันและเก็บรหัสใน แอตทริบิวต์ไบนารี
- สําหรับผู้ใช้Defaults ไม่ต้องจัดเก็บข้อความธรรมดาที่มีความสําคัญ เข้ารหัสแต่ละค่า และเก็บข้อมูลที่เข้ารหัสไว้
ตัวอย่างของการเก็บข้อมูลที่ถูกเข้ารหัสไว้ใน Defaults ผู้ใช้:
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()
เข้ารหัสแฟ้มด้วยการป้องกันแฟ้ม
ISOS เสนอคลาสป้องกันระดับแฟ้ม: [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)
รวมการป้องกันแฟ้มด้วยการเข้ารหัสโดยตรง หากข้อมูลนั้นจะต้องคงการป้องกันเอาไว้ แม้ว่าอุปกรณ์จะปลดล็อคก็ตาม ตัวอย่างเช่น การเข้ารหัสแฟ้มด้วยกุญแจที่เก็บไว้ในคีย์ชิน และเข้าถึงได้หลังจากการตรวจสอบสิทธิ์แล้ว
เข้ารหัสข้อมูลเครือข่าย (ความปลอดภัยระดับชั้นการนําเข้า)
ความปลอดภัยในการรับข้อมูลแบบ appPage (ATS) จะบังคับ HTTPs ให้เป็นค่าปริยาย สําหรับการเชื่อมต่อ TCP ที่กําหนดเอง ให้ใช้ [FLT: 11] กับ TLS หรือใช้ SSL เพื่อป้องกันการจู่โจมแบบ man- the- idleft การเข้ารหัสการโหลดที่ ชั้นโปรแกรมสําหรับการป้องกันเพิ่มเติม: แม้ว่า TLS จะยังป้องกันข้อมูลได้
การจัดการกุญแจ
การถอดรหัสจะแข็งแกร่งพอ ๆ กับการบริหารงาน
- [FLT: 0] คีย์ปรับเสียงโดยใช้เครื่องกําเนิดตัวเลขแบบเข้ารหัสแบบเข้ารหัสแบบเข้ารหัส – ใช้ [FLT: 12] หรือ.
- [FLT: 0] กดปุ่มเฉพาะในคีย์ชิน [[FLT: 1) พร้อมคุณสมบัติที่ใช้งานได้เหมาะสม: ป้องกันการสํารองข้อมูลและเชื่อมกุญแจกับอุปกรณ์
- [FLT: 0] ใช้การตรวจสอบสิทธิ์ชีวภาคหรือรหัสผ่าน ก่อนการเอากุญแจมา - พร้อม ผู้ใช้กําลังตรวจสอบ
- [FLT: 0]. กดปุ่มพิมพ์ตามตาราง หรือหลังเหตุการณ์ความปลอดภัย [FLT: 1] – สืบค้นข้อมูลใหม่ด้วยกุญแจใหม่ และลบกุญแจเก่าอย่างปลอดภัย
- [FLT: 0] อย่ากดปุ่มฮาร์ดโค้ด [FLT: 1] ในโค้ดต้นฉบับหรือแฟ้มปรับแต่ง ปุ่มพิมพ์ Devive จากรหัสผ่านของผู้ใช้ ใช้ฟังก์ชัน device seconds (PBDF2 หรือ Script) เมื่อจําเป็น
- [FLT: 0]. สืบค้นข้อมูล Enclave [FLT: 1] สําหรับรุ่นคีย์ที่ไม่สมมาตร - กุญแจส่วนตัวไม่สามารถส่งออกได้ ป้องกันการแทรกซึม
สําหรับ Apps ที่จัดการกับข้อมูลที่มีความสําคัญสูง ให้พิจารณาใช้โมดูลความปลอดภัยแบบ HSM (HSM) (FLT: 1) แม้ว่ามันจะทําให้ระบบเครือข่ายทํางานช้า และต้องการการเชื่อมต่ออินเทอร์เน็ต
การหมุนคีย์และการเข้ารหัส
เมื่อกุญแจถูกปรับให้เข้าที่ หรือหลังช่วงเวลาที่กําหนด (เช่น ทุก ๆ 90 วัน) จะหมุนกุญแจ ซึ่งจะรวมการถอดรหัสข้อมูลทั้งหมดด้วยกุญแจเก่า สร้างกุญแจใหม่ และเข้ารหัสใหม่ สําหรับชุดข้อมูลขนาดใหญ่นั้น จะใช้รูปแบบกุญแจแบบเพิ่มเติม:
- เก็บกุญแจที่แสดงตัว (เช่น ยูยูไอดี) เคียงข้างกับบันทึกการเข้ารหัสแต่ละอัน
- เก็บการจับคู่กุญแจสําหรับปุ่มจริง (เข้ารหัสไว้)
- ระหว่างการหมุน เพิ่มรายการใหม่โดยไม่เข้ารหัสข้อมูลทั้งหมดซ้ําทันที เข้ารหัสใหม่เมื่อเข้าถึงข้อมูลแล้ว
การ คํานึง ถึง ผู้ อื่น และ การ พิจารณา อย่าง จริงจัง
ข้อกําหนดหลายข้อที่กําหนดให้เข้ารหัสข้อมูลสําหรับข้อมูลที่อ่อนไหว [FLT: 0] GDPR[FLT: 1) เรียกค่ามาตรการทางเทคนิคที่เหมาะสม และการเข้ารหัสเป็นเทคนิคการเข้ารหัสที่จําและเข้ารหัส [FLT: 2] HIAA[FLT: 3] สั่งการเข้ารหัส ESPRI ที่พักและส่ง] [FLTIST: 4] STCS [FTLLLT] เรียกข้อมูลการ์ดข้อมูล] ในคําสั่งต่อไปนี้ แนวทางการป้องกันของแอปเปิลจะรวมเข้ากับความต้องการการเข้ารหัสของโปรแกรมของคุณมากที่สุด การเข้ารหัสและใช้กลไกการติดตามข้อมูลเส้นทางตรวจสอบเส้นทางติดตาม (FTLS: PDF).
Referential to Apple access for the apple previews ors:[FT: 0] Crippto Kit diction [FLT: 1]] [FLT: 2] Keychin Serview [FLTT: 3] และ[FTT: 4] การจําแนกผู้ใช้ [FTTT: 5]. แนวทางอุตสาหกรรม ดู[FTT: 6] คู่มือความปลอดภัยของโมเสก [FTLL: [FLLL] [FLLLL] [FLLLLL] [1] [1. 81]. STBLN].
การ ตรวจ สอบ และ การ ตรวจ สอบ
หลังจากใช้การเข้ารหัสแล้ว ให้ตรวจสอบว่าใช้งานได้ถูกต้องหรือไม่:
- เขียนการทดสอบหน่วยที่เข้ารหัสและถอดรหัสข้อความธรรมดาและยืนยันผลลัพธ์
- กรณีการทดสอบ: ข้อมูลว่าง, ค่าใช้จ่ายที่มาก และถอดรหัสผิดพลาด
- ทําการทดสอบความปลอดภัยโดยใช้อุปกรณ์ที่แตกคุก เพื่อจําลองการจู่โจม -- ทําให้แน่ใจว่ากุญแจยังเข้าถึงได้โดยไม่ต้องมีการตรวจสอบสิทธิ์
- ใช้เครื่องมือวิเคราะห์แบบคงที่ เพื่อตรวจสอบว่าไม่มีปุ่มเข้ารหัสหรืออัลกอริทึมอ่อน
- บันทึกการทบทวน - ไม่บันทึกข้อมูลหรือกุญแจการเข้ารหัส
รูปแบบการวน
การถอดการเข้ารหัสข้อมูล iOS ที่จําเป็นคือกระบวนการสร้างแฟ้มหลาย ๆ ชนิด การรวมการเข้ารหัสของ ISOS เข้ากับการเข้ารหัสของโปรแกรมด้วย Krypto Kit หรือ CommitCrippto และการจัดการกุญแจที่เข้มงวด ผ่านระบบคีย์ชีนและความปลอดภัยของระบบปฏิบัติการนี้ จะสามารถลดความเสี่ยงในการรับข้อมูลได้อย่างมาก ความร่วมมือจากข้อบังคับเช่น GDRR และ HEXA ต้องการการบันทึก, การตรวจสอบและการหมุนแบบธรรมดา การตรวจสอบและการตรวจสอบความปลอดภัยในระยะยาว การลงทุนของสถาปัตยกรรมไม่เพียง แต่ปกป้องความคาดหวังและความปลอดภัยที่เพิ่มขึ้นได้อีกด้วย