
การปกป้องข้อมูลในพวงกุญแจ
แอปหลายตัวจำเป็นต้องจัดการรหัสผ่านและข้อมูลสั้นๆ ที่เป็นความลับ เช่น กุญแจและโทเค็นการเข้าสู่ระบบ พวงกุญแจมอบวิธีที่ปลอดภัยในการจัดเก็บรายการเหล่านี้ ระบบปฏิบัติการที่หลากหลายของ Apple ใช้กลไกที่แตกต่างกันเพื่อบังคับใช้การรับประกันที่เชื่อมโยงกับคลาสการปกป้องพวงกุญแจต่างๆ ใน macOS (ซึ่งรวมถึง Mac ที่ใช้ Apple Silicon) ระบบไม่ได้ใช้การปกป้องข้อมูลโดยตรงเพื่อบังคับใช้การรับประกันเหล่านี้
ภาพรวม
รายการพวงกุญแจจะเข้ารหัสโดยใช้กุญแจ AES-256-GCM ที่แตกต่างกันสองแบบ ซึ่งได้แก่ กุญแจตาราง (เมตาดาต้า) และกุญแจต่อแถว (กุญแจลับ) เมตาดาต้าพวงกุญแจ (คุณลักษณะทั้งหมดนอกเหนือจาก kSecValue) จะถูกเข้ารหัสด้วยกุญแจเมตาดาต้าเพื่อค้นหาอย่างเร็ว และค่าลับ (kSecValueData) จะถูกเข้ารหัสด้วยกุญแจลับ กุญแจเมตาดาต้าได้รับการปกป้องโดย Secure Enclave แต่จะถูกแคชในหน่วยประมวลผลแอปพลิเคชันเพื่ออนุญาตให้ใช้การสอบถามแบบเร็วของพวงกุญแจ กุญแจลับต้องใช้การส่งข้อมูลแบบไปกลับผ่านทาง Secure Enclave อยู่เสมอ
พวงกุญแจถูกใช้เป็นฐานข้อมูล SQLite ที่จัดเก็บในระบบไฟล์ ฐานข้อมูลมีเพียงฐานเดียว โดยดีมอน securityd
จะกำหนดว่ารายการพวงกุญแจใดที่กระบวนการทำงานหรือแอปสามารถเข้าถึงได้ API การเข้าถึงพวงกุญแจส่งผลให้มีการเรียกไปยังดีมอน ซึ่งจะสอบถามการให้สิทธิ์ “keychain-access-groups,” “application-identifier,” และ “application-group” ของแอป กลุ่มสิทธิ์อนุญาตรายการพวงกุญแจให้สามารถแชร์ระหว่างแอปได้ แทนที่จะจำกัดการเข้าถึงไปที่กระบวนการทำงานเดียว
รายการพวงกุญแจสามารถแชร์ได้ระหว่างแอปต่างๆ จากนักพัฒนารายเดียวกันเท่านั้น ในการแชร์รายการพวงกุญแจ แอปของบริษัทอื่นจะใช้กลุ่มการเข้าถึงที่มีคำนำหน้าระบุหน้ากลุ่มเหล่านั้นผ่าน Apple Developer Program ในกลุ่มแอปพลิเคชัน ข้อกำหนดคำนำหน้าและกลุ่มแอปพลิเคชันที่ไม่เหมือนกันมีการบังคับใช้ผ่านการลงชื่อโค้ด โปรไฟล์การกำหนดสิทธิ์ และโปรแกรมนักพัฒนาของ Apple
ข้อมูลพวงกุญแจได้รับการปกป้องโดยใช้โครงสร้างคลาสที่คล้ายคลึงกับที่ใช้ในการปกป้องข้อมูลของไฟล์ คลาสเหล่านี้มีลักษณะการทำงานเหมือนกับคลาสการปกป้องข้อมูลของไฟล์ แต่ใช้กุญแจและฟังก์ชั่นที่เป็นเอกลักษณ์
ความพร้อมใช้งาน | การปกป้องข้อมูลไฟล์ | การปกป้องข้อมูลในพวงกุญแจ | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
เมื่อปลดล็อค | NSFileProtectionComplete | kSecAttrAccessibleWhenUnlocked | |||||||||
เมื่อล็อค | NSFileProtectionCompleteUnlessOpen | ไม่มี | |||||||||
หลังจากปลดล็อคครั้งแรก | NSFileProtectionCompleteUntilFirstUserAuthentication | kSecAttrAccessibleAfterFirstUnlock | |||||||||
ตลอดเวลา | NSFileProtectionNone | kSecAttrAccessibleAlways | |||||||||
รหัสถูกเปิดใช้งาน | ไม่มี | kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly |
แอปที่ใช้บริการดึงข้อมูลใหม่ของพื้นหลังสามารถใช้ kSecAttrAccessibleAfterFirstUnlock สำหรับรายการพวงกุญแจที่จำเป็นต้องได้รับการเข้าถึงในระหว่างการอัปเดตพื้นหลังได้
คลาส kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly จะทำงานเหมือนกับ kSecAttrAccessibleWhenUnlocked อย่างไรก็ตาม คลาสนี้จะใช้ได้เฉพาะเมื่ออุปกรณ์ได้รับการกำหนดค่าด้วยรหัสเท่านั้น คลาสนี้จะมีอยู่ในระบบกระเป๋ากุญแจ (Keybag) เท่านั้น โดยมีคุณสมบัติดังต่อไปนี้:
ไม่เชื่อมข้อมูลกับพวงกุญแจ iCloud
ไม่ถูกสำรองข้อมูล
ไม่ได้รวมอยู่ในกระเป๋ากุญแจ (keybag) ของผู้ดูแลผลประโยชน์ของคู่สัญญา (escrow)
ถ้าลบหรือรีเซ็ตรหัส รายการต่างๆ จะกลายเป็นรายการที่ไร้ประโยชน์โดยการทิ้งคลาสกุญแจไป
คลาสพวงกุญแจอื่นๆ มีส่วนของ “อุปกรณ์นี้เท่านั้น” ซึ่งจะได้รับการปกป้องด้วยค่า UID เสมอ เมื่อถูกคัดลอกจากอุปกรณ์ในระหว่างการสำรองข้อมูล โดยจะกลายเป็นรายการที่ไร้ประโยชน์หากจัดเก็บลงในอุปกรณ์เครื่องอื่น Apple ได้รักษาสมดุลระหว่างความปลอดภัยและความสามารถในการใช้งานไว้อย่างรอบคอบโดยการเลือกคลาสพวงกุญแจที่ขึ้นอยู่กับประเภทของข้อมูลที่ได้รับการรักษาความปลอดภัย และเมื่อจำเป็นสำหรับ iOS และ iPadOS ตัวอย่างเช่น ใบรับรอง VPN จะต้องสามารถใช้งานได้เสมอ เพื่อให้อุปกรณ์รักษาการเชื่อมต่ออย่างต่อเนื่อง แต่รายการนี้จะถูกจัดเป็น “ไม่สามารถเคลื่อนย้ายได้” จึงไม่สามารถย้ายไปยังอุปกรณ์อีกเครื่องได้
การปกป้องคลาสข้อมูลในพวงกุญแจ
การปกป้องคลาสที่ระบุด้านล่างมีการบังคับใช้สำหรับรายการในพวงกุญแจ
รายการ | สามารถเข้าถึงได้ |
---|---|
รหัสผ่าน Wi-Fi | หลังจากปลดล็อคครั้งแรก |
บัญชีเมล | หลังจากปลดล็อคครั้งแรก |
บัญชี Microsoft Exchange ActiveSync | หลังจากปลดล็อคครั้งแรก |
รหัสผ่าน VPN | หลังจากปลดล็อคครั้งแรก |
LDAP, CalDAV, CardDAV | หลังจากปลดล็อคครั้งแรก |
โทเค็นบัญชีเครือข่ายสังคม | หลังจากปลดล็อคครั้งแรก |
กุญแจการเข้ารหัสการแจ้ง Handoff | หลังจากปลดล็อคครั้งแรก |
โทเค็น iCloud | หลังจากปลดล็อคครั้งแรก |
กุญแจ iMessage | หลังจากปลดล็อคครั้งแรก |
รหัสผ่านการแชร์ในพื้นที่ | เมื่อปลดล็อค |
รหัสผ่าน Safari | เมื่อปลดล็อค |
ที่คั่นหน้า Safari | เมื่อปลดล็อค |
ข้อมูลสำรอง Finder/iTunes | เมื่อล็อคแล้ว ไม่สามารถเคลื่อนย้ายได้ |
กุญแจส่วนตัวที่ติดตั้งโดยโปรไฟล์การกำหนดค่า | เมื่อล็อคแล้ว ไม่สามารถเคลื่อนย้ายได้ |
ใบรับรอง VPN | ตลอดเวลา ไม่สามารถเคลื่อนย้ายได้ |
กุญแจ Bluetooth® | ตลอดเวลา ไม่สามารถเคลื่อนย้ายได้ |
โทเค็นบริการการแจ้งผลักข้อมูลของ Apple (APNs) | ตลอดเวลา ไม่สามารถเคลื่อนย้ายได้ |
ใบรับรอง iCloud และกุญแจส่วนตัว | ตลอดเวลา ไม่สามารถเคลื่อนย้ายได้ |
รหัส PIN ของซิม | ตลอดเวลา ไม่สามารถเคลื่อนย้ายได้ |
ใบรับรองที่ติดตั้งโดยโปรไฟล์การกำหนดค่า | ตลอดเวลา |
โทเค็น “ค้นหาของฉัน” | ตลอดเวลา |
ข้อความเสียง | ตลอดเวลา |
การควบคุมการเข้าถึงพวงกุญแจ
พวงกุญแจสามารถใช้รายการควบคุมสิทธิ์ (ACL) เพื่อตั้งค่านโยบายสำหรับข้อกำหนดการช่วยการเข้าถึงและข้อกำหนดการตรวจสอบสิทธิ์ รายการสามารถกำหนดเงื่อนไขที่ต้องมีการแสดงตนของผู้ใช้โดยระบุว่า ผู้ใช้จะไม่สามารถเข้าถึงได้เว้นแต่จะมีการตรวจสอบสิทธิ์โดยใช้ Face ID, Touch ID หรือโดยการป้อนรหัสหรือรหัสผ่านของอุปกรณ์ การเข้าถึงรายการยังสามารถถูกจำกัดได้ด้วยการกำหนดว่าการลงทะเบียน Face ID หรือ Touch ID ต้องไม่มีการเปลี่ยนแปลงตั้งแต่เพิ่มรายการ การจำกัดนี้จะช่วยป้องกันไม่ให้ผู้โจมตีเพิ่มลายนิ้วมือของตัวเองเพื่อเข้าถึงรายการในพวงกุญแจ ACL มีการประเมินภายใน Secure Enclave และจะปล่อยสู่เคอร์เนลเมื่อตรงตามข้อจำกัดที่ระบุเท่านั้น
สถาปัตยกรรมพวงกุญแจใน macOS
macOS ยังให้การเข้าถึงพวงกุญแจเพื่อจัดเก็บชื่อผู้ใช้และรหัสผ่าน รวมถึงข้อมูลประจำตัวดิจิตอล กุญแจการเข้ารหัส และโน้ตที่ปลอดภัยอย่างสะดวกและปลอดภัยอีกด้วย ซึ่งสามารถเข้าถึงได้ด้วยการเปิดแอปการเข้าถึงพวงกุญแจใน /Applications/Utilities/ การใช้พวงกุญแจจะช่วยให้ไม่จำเป็นต้องป้อนหรือแม้แต่จดจำเอกสารสิทธิ์สำหรับแหล่งข้อมูลแต่ละแห่ง พวงกุญแจเริ่มต้นรายการแรกสร้างขึ้นสำหรับผู้ใช้ Mac แต่ละราย แต่ผู้ใช้สามารถสร้างพวงกุญแจอื่นๆ เพื่อวัตถุประสงค์เฉพาะ
นอกจากการพึ่งพาพวงกุญแจผู้ใช้ macOS จะใช้พวงกุญแจระดับระบบจำนวนหนึ่งคงแอสเซทการตรวจสอบสิทธิ์ซึ่งไม่ใช่แอสเซทเฉพาะผู้ใช้ เช่น เอกสารสิทธิ์เครือข่ายและข้อมูลประจำตัวของโครงสร้างกุญแจสาธารณะ (PKI) รากของระบบซึ่งเป็นหนึ่งในพวงกุญแจเหล่านี้ไม่สามารถเปลี่ยนได้และจัดเก็บใบรับรองของหน่วยงานให้บริการออกใบรับรอง (CA) ระดับ PKI อินเทอร์เน็ตเพื่อให้ทำงานทั่วไปได้อย่างง่ายดาย เช่น บริการธนาคารออนไลน์และอีคอมเมิร์ซ ผู้ใช้สามารถปรับใช้ใบรับรอง CA ที่ได้รับการเตรียมใช้งานภายในด้วยลักษณะที่คล้ายกันในคอมพิวเตอร์ Mac ที่ได้รับการจัดการเพื่อช่วยตรวจสอบความถูกต้องของไซต์และบริการภายในได้