การเชื่อมข้อมูลพวงกุญแจที่ปลอดภัย
เมื่อผู้ใช้เปิดใช้พวงกุญแจ iCloud เป็นครั้งแรกบนบัญชีการตรวจสอบสิทธิ์สองปัจจัย อุปกรณ์จะตั้งและสร้างข้อมูลประจำตัวที่ใช้ในการเชื่อมข้อมูลสำหรับตัวเอง ข้อมูลประจำตัวที่ใช้ในการเชื่อมข้อมูลประกอบด้วยกุญแจรูปไข่แบบอสมมาตร (โดยใช้ P-384) ซึ่งจะถูกจัดเก็บไว้ในพวงกุญแจของอุปกรณ์ อุปกรณ์แต่ละเครื่องมีรายการข้อมูลประจำตัวที่ใช้ในการเชื่อมข้อมูลของอุปกรณ์อื่นๆ ของผู้ใช้ และมีการลงชื่อในรายการนี้โดยใช้กุญแจข้อมูลประจำตัวอันใดอันหนึ่ง รายการเหล่านี้ถูกจัดเก็บอยู่ใน CloudKit ซึ่งทำให้อุปกรณ์ของผู้ใช้สามารถหาข้อตกลงเกี่ยวกับวิธีเชื่อมข้อมูลพวงกุญแจอย่างปลอดภัยระหว่างกันได้
เพื่อการใช้งานร่วมกันได้กับอุปกรณ์ iCloud รุ่นเก่ากว่า วงจรที่เชื่อถือได้ในการเชื่อมข้อมูลที่คล้ายกันและข้อมูลประจำตัวที่ใช้ในการเชื่อมข้อมูลอีกรายการจึงถูกสร้างขึ้น กุญแจสาธารณะของข้อมูลระบุตัวตนที่ใช้ในการเชื่อมข้อมูลจะอยู่ในวงจร และวงจรจะได้รับการลงชื่อสองครั้ง ครั้งแรกโดยใช้กุญแจส่วนตัวของข้อมูลระบุตัวตนที่ใช้ในการเชื่อมข้อมูล จากนั้นอีกครั้งด้วยกุญแจรูปไข่แบบอสมมาตร (โดยใช้ P-256) ที่ได้รับจากรหัสผ่านบัญชี iCloud ของผู้ใช้ พารามิเตอร์ (ค่า salt และการทำซ้ำแบบสุ่ม) ที่จัดเก็บไว้กับวงจรนั้นใช้เพื่อสร้างกุญแจที่อิงตามรหัสผ่าน iCloud ของผู้ใช้
พื้นที่จัดเก็บข้อมูล iCloud ของวงจรการเชื่อมข้อมูล
สำหรับบัญชีการตรวจสอบสิทธิ์สองปัจจัย รายการอุปกรณ์ที่เชื่อถือแล้วของอุปกรณ์แต่ละเครื่องจะถูกจัดเก็บไว้ใน CloudKit รายการไม่สามารถอ่านได้โดยไม่ทราบรหัสผ่าน iCloud ของผู้ใช้ และไม่สามารถแก้ไขได้อย่างถูกต้องหากไม่มีกุญแจส่วนตัวของอุปกรณ์ที่เป็นเจ้าของ
ในทำนองเดียวกัน วงจรการเชื่อมข้อมูลที่ลงชื่อแล้วจะถูกจัดเก็บอยู่ในพื้นที่จัดเก็บข้อมูลค่ากุญแจ iCloud ของผู้ใช้ ไม่สามารถอ่านได้โดยไม่ทราบรหัสผ่าน iCloud ของผู้ใช้ และไม่สามารถแก้ไขได้อย่างถูกต้องหากไม่มีกุญแจส่วนตัวของข้อมูลประจำตัวที่มีการเชื่อมข้อมูลของสมาชิก
วิธีเพิ่มอุปกรณ์เครื่องอื่นของผู้ใช้ไปยังวงจรการเชื่อมข้อมูล
เมื่อลงชื่อเข้า iCloud สำหรับอุปกรณ์ใหม่จะเข้าร่วมวงจรการเชื่อมข้อมูลพวงกุญแจ iCloud ด้วยวิธีใดวิธีหนึ่งจากสองวิธี ซึ่งได้แก่ โดยจับคู่และรับการสนับสนุนโดยอุปกรณ์พวงกุญแจ iCloud ที่มีอยู่ หรือโดยใช้การกู้คืนพวงกุญแจ iCloud
ในระหว่างขั้นตอนการจับคู่ อุปกรณ์ของผู้สมัครจะสร้างข้อมูลระบุตัวตนที่มีการเชื่อมข้อมูลใหม่สำหรับทั้งวงจรการเชื่อมข้อมูลและรายการการเชื่อมข้อมูล (สำหรับบัญชีการตรวจสอบสิทธิ์สองปัจจัย) และแสดงต่อผู้สนับสนุน ผู้สนับสนุนจะเพิ่มกุญแจสาธารณะของสมาชิกใหม่ลงในวงจรการเชื่อมข้อมูลและลงชื่อเข้าอีกครั้งด้วยข้อมูลระบุตัวตนที่มีการเชื่อมข้อมูลและรหัสที่ได้มาจากรหัสผ่าน iCloud ของผู้ใช้ วงจรเชื่อมข้อมูลใหม่จะอยู่บน iCloud ซึ่งจะลงชื่อในลักษณะเดียวกันโดยสมาชิกใหม่ของวงจร ในบัญชีการตรวจสอบสิทธิ์สองปัจจัย อุปกรณ์ของผู้สนับสนุนยังจัดเตรียมบัตรกำนัลที่มีการลงชื่อด้วยรหัสระบุตัวตนของอุปกรณ์ที่เข้าร่วมด้วย ซึ่งเป็นการแสดงว่าอุปกรณ์ของผู้สมัครควรได้รับความเชื่อถือ จากนั้นจะอัปเดตรายการข้อมูลระบุตัวตนที่มีการเชื่อมข้อมูลที่เชื่อถือได้แต่ละรายการเพื่อให้ครอบคลุมผู้สมัคร
ตอนนี้จะมีสมาชิกของวงจรลงชื่อสองราย และแต่ละรายจะมีกุญแจสาธารณะของเพียร์ของตัวเอง ตอนนี้พวกเขาก็สามารถเริ่มแลกเปลี่ยนรายการพวงกุญแจแต่ละรายการผ่าน CloudKit หรือพื้นที่จัดเก็บข้อมูลค่ากุญแจ iCloud ตามความเหมาะสมสำหรับสถานการณ์ได้ ถ้าสมาชิกในวงจรทั้งสองมีการอัปเดตรายการเดียวกัน ระบบจะเลือกรายการใดรายการหนึ่งซึ่งส่งผลให้มีความสอดคล้องกันในที่สุด แต่ละรายการที่ถูกเชื่อมข้อมูลจะถูกเข้ารหัส จึงสามารถถอดรหัสได้โดยอุปกรณ์ที่อยู่ในวงจรที่เชื่อถือได้ของผู้ใช้เท่านั้น แต่จะไม่สามารถถอดรหัสโดยอุปกรณ์เครื่องอื่นใดหรือโดย Apple ได้
เมื่อมีอุปกรณ์ใหม่เข้าร่วมในวงจรการเชื่อมข้อมูล “กระบวนการเข้าร่วม” นี้จะเกิดขึ้นซ้ำๆ ตัวอย่างเช่น เมื่ออุปกรณ์ที่สามเข้าร่วม จะสามารถจับคู่กับอุปกรณ์ที่มีอยู่ได้ เมื่อเพิ่มเพียร์ใหม่ เพียร์ต่างๆ จะเชื่อมข้อมูลกับเพียร์ใหม่ วิธีนี้ได้รับการออกแบบมาเพื่อให้แน่ใจว่าสมาชิกทุกคนจะมีรายการพวงกุญแจเดียวกัน
ซึ่งจะเชื่อมข้อมูลเฉพาะบางรายการเท่านั้น
รายการพวงกุญแจบางรายการเป็นอุปกรณ์เฉพาะ เช่น กุญแจ iMessage และต้องอยู่เฉพาะในอุปกรณ์เท่านั้น ในการป้องกันการส่งข้อมูลโดยไม่คาดคิด ทุกรายการที่จะเชื่อมข้อมูลต้องมีการทำเครื่องหมายด้วยคุณลักษณะ kSecAttrSynchronizable
ไว้อย่างชัดเจน
Apple จะตั้งค่าคุณลักษณะนี้สำหรับข้อมูลผู้ใช้ Safari (รวมถึงชื่อผู้ใช้ รหัสผ่าน และหมายเลขบัตรเครดิต) เช่นเดียวกับรหัสผ่าน Wi-Fi, กุญแจการเข้ารหัส HomeKit และรายการพวงกุญแจอื่นๆ ที่รองรับการเข้ารหัส iCloud แบบต้นทางถึงปลายทาง
นอกจากนี้ รายการในพวงกุญแจที่เพิ่มโดยแอปของบุคคลหรือบริษัทอื่นก็จะมีค่าเริ่มต้นเป็นแบบไม่เชื่อมข้อมูลด้วยเช่นกัน นักพัฒนาต้องตั้งค่าคุณลักษณะ kSecAttrSynchronizable
เมื่อเพิ่มรายการลงในพวงกุญแจ