กระเป๋ากุญแจ (Keybag) สำหรับการปกป้องข้อมูล
กุญแจสำหรับคลาสการปกป้องข้อมูลของทั้งไฟล์และพวงกุญแจจะถูกเก็บรวบรวมและจัดการในกระเป๋ากุญแจ (Keybag) บน iOS, iPadOS, tvOS และ watchOS ระบบปฏิบัติการเหล่านี้จะใช้กระเป๋ากุญแจ (Keybag) ต่อไปนี้: ผู้ใช้ อุปกรณ์ ข้อมูลสำรอง ข้อมูลที่ฝาก และข้อมูลสำรอง iCloud
กระเป๋ากุญแจ (Keybag) ผู้ใช้
กระเป๋ากุญแจ (Keybag) ผู้ใช้ คือที่ที่จัดเก็บคลาสกุญแจที่ถูกห่อซึ่งใช้ในการทำงานปกติของอุปกรณ์ ตัวอย่างเช่น เมื่อป้อนรหัส รหัส NSFileProtectionComplete จะโหลดจากกระเป๋ากุญแจ (Keybag) ผู้ใช้แล้วแกะห่อออก ไฟล์นี้เป็นไฟล์รายการคุณสมบัติ (.plist) แบบไบนารีที่จัดเก็บอยู่ในคลาสไม่มีการปกป้อง
สำหรับอุปกรณ์ที่มี SoC เวอร์ชั่นก่อนหน้า A9 เนื้อหาไฟล์แบบ .plist จะถูกเข้ารหัสด้วยกุญแจที่อยู่ในพื้นที่จัดเก็บข้อมูลที่ลบได้ ในการให้ความปลอดภัยกับกระเป๋ากุญแจ (Keybag) กุญแจนี้จะถูกล้างและสร้างใหม่ทุกครั้งที่ผู้ใช้เปลี่ยนรหัสของตน
สำหรับอุปกรณ์ที่มี SoC เวอร์ชั่น A9 ขึ้นไป ไฟล์แบบ .plist จะมีกุญแจที่ระบุว่ากระเป๋ากุญแจจัดเก็บอยู่ในล็อคเกอร์ที่ได้รับการปกป้องโดยค่าป้องกันการเล่นซ้ำที่ควบคุมโดย Secure Enclave
Secure Enclave จะจัดการกระเป๋ากุญแจ (Keybag) และสามารถสอบถามเกี่ยวกับสถานะการล็อคของอุปกรณ์ได้ โดยจะแจ้งว่าอุปกรณ์ไม่ได้ล็อคอยู่เมื่อสามารถเข้าถึงคลาสกุญแจทั้งหมดในกระเป๋ากุญแจ (Keybag) ผู้ใช้ได้ และได้แกะห่อสำเร็จแล้วเท่านั้น
กระเป๋ากุญแจ (Keybag) อุปกรณ์
กระเป๋ากุญแจ (Keybag) อุปกรณ์ใช้เพื่อจัดเก็บคลาสกุญแจที่ถูกห่อสำหรับการทำงานที่เกี่ยวข้องกับข้อมูลเฉพาะอุปกรณ์ อุปกรณ์ iPadOS ที่กำหนดค่าสำหรับการใช้งานที่แชร์ในบางครั้งจำเป็นต้องใช้การเข้าถึงข้อมูลประจำตัวก่อนที่ผู้ใช้รายใดเข้าสู่ระบบ ดังนั้นจะต้องใช้กระเป๋ากุญแจ (Keybag) ที่ไม่ได้รับการปกป้องด้วยรหัสของผู้ใช้
iOS และ iPadOS ไม่รองรับการเข้ารหัสแบบแยกของเนื้อหาระบบไฟล์รายผู้ใช้ ซึ่งหมายความว่าระบบจะใช้คลาสกุญแจจากกระเป๋ากุญแจ (Keybag) อุปกรณ์เพื่อห่อกุญแจรายไฟล์ อย่างไรก็ตามพวงกุญแจจะใช้คลาสกุญแจจากกระเป๋ากุญแจ (Keybag) ผู้ใช้เพื่อปกป้องรายการในพวงกุญแจของผู้ใช้ ในอุปกรณ์ iPhone และ iPad ที่กําหนดค่าสําหรับใช้โดยผู้ใช้เพียงคนเดียว (การกําหนดค่าเริ่มต้น) กระเป๋ากุญแจ (Keybag) อุปกรณ์และกระเป๋ากุญแจ (Keybag) ผู้ใช้จะเป็นอันเดียวกัน และได้รับการปกป้องด้วยรหัสของผู้ใช้
กระเป๋ากุญแจ (Keybag) ของข้อมูลสำรอง
กระเป๋ากุญแจ (Keybag) ของข้อมูลสำรองจะถูกสร้างขึ้นเมื่อ Finder (macOS 10.15 ขึ้นไป) หรือ iTunes (ใน macOS 10.14 หรือก่อนหน้านี้) สำรองข้อมูลแบบเข้ารหัสและจัดเก็บในคอมพิวเตอร์ที่สำรองข้อมูลของอุปกรณ์อยู่ กระเป๋ากุญแจ (Keybag) ใหม่จะถูกสร้างขึ้นด้วยกุญแจชุดใหม่ และข้อมูลที่สำรองไว้จะถูกเข้ารหัสอีกครั้งไปยังกุญแจใหม่เหล่านั้น ตามที่อธิบายก่อนหน้านี้ รายการพวงกุญแจที่ไม่สามารถเคลื่อนย้ายได้จะยังคงถูกห่อด้วยกุญแจที่ได้จากค่า UID ซึ่งทำให้สามารถกู้คืนรายการเหล่านั้นไปที่อุปกรณ์ดั้งเดิมที่สำรองข้อมูลนั้นได้ แต่จะทำให้เข้าถึงไม่ได้ในอุปกรณ์เครื่องอื่น
กระเป๋ากุญแจ (Keybag) ที่ปกป้องด้วยชุดรหัสผ่าน มีการเรียกใช้งานผ่านการทำซ้ำนับ 10 ล้านครั้งของฟังก์ชั่นการรับกุญแจ PBKDF2 แม้จะมีตัวนับการทำซ้ำที่สูง แต่ไม่มีการผูกกับอุปกรณ์เฉพาะเครื่อง ดังนั้นในทางทฤษฎีแล้วจึงสามารถพยายามโจมตีกระเป๋ากุญแจ (Keybag) ของข้อมูลสำรองด้วย Brute-force โดยใช้คอมพิวเตอร์หลายเครื่องพร้อมกันได้ ภัยคุกคามนี้สามารถถูกจำกัดได้โดยใช้รหัสผ่านที่มีความปลอดภัยสูงพอ
ถ้าผู้ใช้เลือกไม่เข้ารหัสข้อมูลสำรอง ไฟล์เหล่านั้นจะไม่ถูกเข้ารหัสไม่ว่าจะอยู่ในคลาสการปกป้องข้อมูลใด แต่พวงกุญแจจะยังคงได้รับการปกป้องด้วยกุญแจที่มาจากค่า UID นี่จึงเป็นสาเหตุที่รายการพวงกุญแจจะโยกย้ายไปยังอุปกรณ์เครื่องใหม่เฉพาะเมื่อตั้งค่ารหัสผ่านข้อมูลสำรองไว้เท่านั้น
กระเป๋ากุญแจ (Keybag) ของข้อมูลที่ฝาก
กระเป๋ากุญแจ (Keybag) ของข้อมูลที่ฝากจะใช้เพื่อเชื่อมข้อมูลกับ Finder (ใน macOS 10.15 ขึ้นไป) หรือ iTunes (macOS 10.14 หรือก่อนหน้านี้) ผ่าน USB และการจัดการอุปกรณ์ (MDM) กระเป๋ากุญแจ (Keybag) นี้อนุญาตให้ Finder หรือ iTunes สำรองข้อมูลและเชื่อมข้อมูลโดยไม่ต้องเรียกขอให้ผู้ใช้ป้อนรหัส และอนุญาตให้โซลูชั่น MDM ล้างรหัสของผู้ใช้จากระยะไกลได้ กระเป๋ากุญแจ (Keybag) นี้มีการจัดเก็บในคอมพิวเตอร์ที่ใช้เพื่อเชื่อมข้อมูลกับ Finder หรือ iTunes หรือบนโซลูชั่น MDM ที่จัดการอุปกรณ์จากระยะไกล
กระเป๋ากุญแจ (Keybag) ของข้อมูลที่ฝากจะปรับปรุงประสบการณ์ของผู้ใช้ในระหว่างการเชื่อมข้อมูลอุปกรณ์ ซึ่งต้องใช้การเข้าถึงคลาสทั้งหมดของข้อมูล เมื่ออุปกรณ์ที่ล็อคด้วยรหัสเชื่อมต่อกับ Finder หรือ iTunes ครั้งแรก ผู้ใช้จะได้รับแจ้งให้ป้อนรหัส จากนั้นอุปกรณ์จะสร้างกระเป๋ากุญแจ (Keybag) ของข้อมูลที่ฝากที่มีคลาสกุญแจเดียวกันกับที่ใช้บนอุปกรณ์ที่ถูกปกป้องด้วยกุญแจที่สร้างใหม่ กระเป๋ากุญแจ (Keybag) ของข้อมูลที่ฝากและกุญแจที่ปกป้องจะถูกแยกระหว่างอุปกรณ์และโฮสต์หรือเซิร์ฟเวอร์ โดยข้อมูลจะถูกจัดเก็บในอุปกรณ์ในคลาสปกป้องจนกว่าจะมีการตรวจสอบสิทธิ์ของผู้ใช้รายแรก นี่เป็นสาเหตุที่รหัสอุปกรณ์จะต้องได้รับการป้อนก่อนที่ผู้ใช้จะสำรองข้อมูลกับ Finder หรือ iTunes เป็นครั้งแรกหลังจากรีบูต
ในกรณีของรายการอัปเดตซอฟต์แวร์ผ่านทางอากาศ (OTA) ผู้ใช้จะได้รับแจ้งขอรหัสเมื่อเริ่มต้นการอัปเดต ขั้นตอนนี้ใช้เพื่อสร้างโทเค็นการปลดล็อคครั้งเดียวอย่างปลอดภัย ซึ่งจะปลดล็อคกระเป๋ากุญแจ (Keybag) ผู้ใช้หลังจากการอัปเดต โทเค็นนี้ไม่สามารถสร้างได้โดยปราศจากการป้อนรหัสของผู้ใช้ และโทเค็นที่สร้างก่อนหน้าใดๆ จะถูกยกเลิกการใช้งานหากรหัสของผู้ใช้เปลี่ยน
โทเค็นการปลดล็อคครั้งเดียวใช้สำหรับการติดตั้งรายการอัปเดตซอฟต์แวร์ทั้งแบบต้องจัดการหรือแบบไม่ต้องจัดการ โทเค็นจะถูกเข้ารหัสด้วยกุญแจที่มาจากค่าปัจจุบันของตัวนับทางเดียวใน Secure Enclave, ค่า UUID ของกระเป๋ากุญแจ (Keybag) และค่า UID ของ Secure Enclave
บน SoC A9 (ขึ้นไป) โทเค็นการปลดล็อคแบบครั้งเดียวจะไม่พึ่งพาตัวนับหรือพื้นที่จัดเก็บข้อมูลที่ลบได้อีกต่อไป แต่จะได้รับการปกป้องโดยค่าป้องกันการเล่นซ้ำที่ควบคุมโดย Secure Enclave
โทเค็นการปลดล็อคครั้งเดียวสำหรับรายการอัปเดตซอฟต์แวร์ที่ต้องจัดการจะหมดอายุหลังผ่านไป 20 นาที ใน iOS 13 และ iPadOS 13.1 ขึ้นไป โทเค็นจะจัดเก็บอยู่ในล็อคเกอร์ที่ได้รับการปกป้องโดย Secure Enclave ก่อน iOS 13 โทเค็นนี้จะถูกส่งออกจาก Secure Enclave และเขียนไปที่พื้นที่จัดเก็บข้อมูลที่ลบได้ หรือได้รับการปกป้องโดยกลไกการป้องกันการเล่นซ้ำของ Secure Enclave นาฬิกานับถอยหลังของนโยบายจะเพิ่มตัวนับหากอุปกรณ์ไม่เริ่มการทำงานใหม่ภายใน 20 นาที
รายการอัปเดตซอฟต์แวร์ที่ไม่ต้องจัดการจะเกิดขึ้นเมื่อระบบตรวจพบรายการอัปเดตที่พร้อมให้ดาวน์โหลด และเมื่อหนึ่งรายการอัปเดตต่อไปนี้เป็นจริง:
มีการกำหนดค่าการอัปเดตอัตโนมัติใน iOS 12 ขึ้นไป
ผู้ใช้เลือก ติดตั้งในภายหลัง เมื่อได้รับแจ้งให้อัปเดต
หลังจากที่ผู้ใช้ป้อนรหัสของตัวเอง โทเค็นการปลดล็อคแบบครั้งเดียวจะถูกสร้างขึ้นและยังคงสามารถใช้ใน Secure Enclave ได้มากถึง 8 ชั่วโมง ถ้ายังไม่มีรายการอัปเดต โทเค็นการปลดล็อคแบบครั้งเดียวนี้จะถูกทำลายในการล็อคทุกครั้ง และจะถูกสร้างขึ้นในการปลดล็อคที่เกิดขึ้นในภายหลังทุกๆ ครั้ง การปลดล็อคแต่ละครั้งจะเริ่มการทำงานหน้าต่าง 8 ชั่วโมงใหม่ หลังจาก 8 ชั่วโมง นาฬิกานับถอยหลังของนโยบายจะทำให้โทเค็นการปลดล็อคแบบครั้งเดียวไม่สามารถใช้งานได้
กระเป๋ากุญแจ (Keybag) ข้อมูลสำรอง iCloud
กระเป๋ากุญแจ (Keybag) ข้อมูลสำรอง iCloud คล้ายคลึงกับกระเป๋ากุญแจ (Keybag) ข้อมูลสำรอง คลาสกุญแจทั้งหมดในกระเป๋ากุญแจ (Keybag) นี้ไม่สมมาตร (ใช้งาน Curve25519 เหมือนกับคลาสการปกป้องข้อมูลแบบปกป้องหากไม่เปิดอยู่) กระเป๋ากุญแจแบบไม่สมมาตรยังใช้เพื่อปกป้องพวงกุญแจที่สำรองข้อมูลไว้สำหรับการกู้คืนพวงกุญแจ iCloud อีกด้วย