คลาสการปกป้องข้อมูล
เมื่อสร้างไฟล์ใหม่บนอุปกรณ์ที่รองรับการปกป้องข้อมูล แอปที่สร้างไฟล์จะกำหนดคลาสของไฟล์นั้น คลาสแต่ละคลาสจะใช้นโยบายที่ต่างกันเพื่อระบุว่าข้อมูลจะเข้าถึงได้เมื่อใด คลาสและนโยบายเบื้องต้นมีการอธิบายในส่วนต่อไปนี้ Mac ที่มี Apple Silicon ไม่รองรับคลาส D: ไม่มีการปกป้อง และมีการสร้างขอบเขตความปลอดภัยรอบๆ การเข้าสู่ระบบและออกจากระบบ (ไม่ใช่การล็อคหรือปลดล็อคเหมือนบน iPhone และ iPad)
คลาส | ประเภทการปกป้อง |
---|---|
คลาส A: การปกป้องแบบสมบูรณ์ | NSFileProtectionComplete |
คลาส B: ปกป้องหากไม่เปิดอยู่ | NSFileProtectionCompleteUnlessOpen |
คลาส C: ปกป้องจนกว่าจะมีการตรวจสอบสิทธิ์ของผู้ใช้รายแรก หมายเหตุ: macOS ใช้กุญแจดิสก์โวลุ่มเพื่อสร้างคุณลักษณะการปกป้องของ FileVault ใหม่ | NSFileProtectionCompleteUntilFirstUserAuthentication |
คลาส D: ไม่มีการปกป้อง หมายเหตุ: ไม่รองรับบน macOS | NSFileProtectionNone |
การปกป้องแบบสมบูรณ์
NSFileProtectionComplete: คลาสกุญแจได้รับการปกป้องโดยกุญแจที่ได้มาจากรหัสหรือรหัสผ่านของผู้ใช้และค่า UID ของอุปกรณ์ ไม่นานหลังจากที่ผู้ใช้ล็อคอุปกรณ์ (10 วินาที หากการตั้งค่าต้องใส่รหัสผ่านถูกตั้งไว้เป็นทันที) คลาสกุญแจที่ถอดรหัสแล้วจะถูกยกเลิก ทำให้ข้อมูลทั้งหมดในคลาสนี้ไม่สามารถเข้าถึงได้จนกว่าผู้ใช้จะป้อนรหัสอีกครั้งหรือปลดล็อค (เข้าสู่ระบบ) อุปกรณ์ โดยใช้ Face ID หรือ Touch ID
ใน macOS ไม่นานหลังจากที่ผู้ใช้คนล่าสุดออกจากระบบ คลาสกุญแจที่ถอดรหัสจะถูกละทิ้ง โดยทำให้ข้อมูลทั้งหมดในคลาสนี้ไม่สามารถเข้าถึงได้จนกว่าผู้ใช้จะป้อนรหัสอีกครั้ง หรือเข้าสู่ระบบอุปกรณ์โดยใช้ Touch ID
ปกป้องหากไม่เปิดอยู่
NSFileProtectionCompleteUnlessOpen: ไฟล์บางไฟล์อาจต้องเขียนในขณะที่อุปกรณ์ล็อคอยู่ หรือขณะที่ผู้ใช้ออกจากระบบแล้ว ตัวอย่างที่ดีของกรณีนี้คือไฟล์แนบอีเมลที่ดาวน์โหลดอยู่ในพื้นหลัง ลักษณะงานเช่นนี้ทำได้โดยการใช้การเข้ารหัสเส้นโค้งรูปไข่แบบไม่สมมาตร (ECDH บน Curve25519) กุญแจรายไฟล์โดยทั่วไปจะถูกปกป้องด้วยกุญแจที่ได้มาโดยใช้ข้อตกลงกุญแจ One-Pass Diffie-Hellman ตามที่อธิบายใน NIST SP 800-56A
กุญแจสาธารณะชั่วคราวสำหรับข้อตกลงจะจัดเก็บไปพร้อมกับกุญแจรายไฟล์ที่ถูกห่อ KDF คือ ฟังก์ชั่นการแปรผันกุญแจที่ต่อกัน (ตัวเลือก 1 ที่ได้รับอนุญาต) ตามที่อธิบายใน 5.8.1 ของ NIST SP 800-56A ID อัลกอริทึมถูกละเว้น PartyUInfo และ PartyVInfo คือกุญแจสาธารณะชั่วคราวและกุญแจสาธารณะแบบคงที่ตามลำดับ SHA256 ใช้เป็นฟังก์ชั่นการแฮช ทันทีที่ปิดไฟล์ กุญแจรายไฟล์จะถูกล้างจากหน่วยความจำ ในการเปิดไฟล์อีกครั้ง ความลับที่แชร์จะถูกสร้างอีกครั้งโดยใช้กุญแจส่วนตัวของคลาสปกป้องหากไม่เปิดอยู่ และกุญแจสาธารณะชั่วคราวของไฟล์ ซึ่งจะใช้เพื่อแกะห่อกุญแจรายไฟล์ที่ใช้ในการถอดรหัสไฟล์
ใน macOS ส่วนที่เป็นส่วนตัวของ NSFileProtectionCompleteUnlessOpen จะสามารถเข้าถึงได้ตราบใดที่ผู้ใช้บนระบบเข้าสู่ระบบอยู่หรือได้รับการตรวจสอบสิทธิ์
ปกป้องจนกว่าจะมีการตรวจสอบสิทธิ์ของผู้ใช้รายแรก
NSFileProtectionCompleteUntilFirstUserAuthentication: คลาสนี้ทำงานเหมือนกับการปกป้องแบบสมบูรณ์ เว้นแต่เพียงคลาสกุญแจที่ถอดรหัสจะไม่ถูกลบออกจากหน่วยความจำเมื่อล็อคอุปกรณ์หรือผู้ใช้ออกจากระบบ การปกป้องในคลาสนี้มีคุณลักษณะคล้ายกับการเข้ารหัสแบบเต็มในคอมพิวเตอร์เดสก์ท็อป และปกป้องข้อมูลจากการโจมตีที่เกี่ยวข้องกับการรีบูต นี่เป็นคลาสค่าเริ่มต้นสำหรับข้อมูลแอปของบุคคลหรือบริษัทอื่นทั้งหมดที่ไม่ได้ถูกกำหนดคลาสการปกป้องข้อมูลให้
ใน macOS คลาสนี้ใช้กุญแจดิสก์โวลุ่มซึ่งสามารถเข้าถึงได้ตราบใดที่ดิสก์โวลุ่มต่อเชื่อมอยู่ และทำหน้าที่เหมือนกับ FileVault
ไม่มีการปกป้อง
NSFileProtectionNone: คลาสกุญแจนี้ได้รับการปกป้องด้วยค่า UID เท่านั้น และมีการจัดเก็บในพื้นที่จัดเก็บข้อมูลที่ลบได้ เนื่องจากกุญแจทั้งหมดที่จำเป็นต้องใช้เพื่อถอดรหัสไฟล์ในคลาสนี้มีการจัดเก็บบนอุปกรณ์ การเข้ารหัสจึงให้ประโยชน์ของการล้างข้อมูลระยะไกลอย่างรวดเร็วเท่านั้น ถ้าระบบไม่ได้กำหนดคลาสการปกป้องข้อมูลให้ไฟล์ ไฟล์จะยังคงจัดเก็บในรูปแบบที่เข้ารหัส (เช่นเดียวกับข้อมูลทั้งหมดบนอุปกรณ์ iOS และ iPadOS)
สิ่งนี้ไม่รองรับใน macOS
หมายเหตุ: ใน macOS สำหรับดิสก์โวลุ่มที่ไม่สัมพันธ์กันกับระบบปฏิบัติการที่บูต คลาสการปกป้องข้อมูลทั้งหมดจะสามารถเข้าถึงได้ตราบใดที่ดิสก์โวลุ่มต่อเชื่อมอยู่ คลาสการปกป้องข้อมูลที่เป็นค่าเริ่มต้นคือ NSFileProtectionCompleteUntilFirstUserAuthentication ฟังก์ชั่นของกุญแจรายขอบเขตมีให้ใช้ทั้งสำหรับ Rosetta 2 และแอปดั้งเดิม