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