Güvenli anahtar zinciri eşzamanlama
Kullanıcı, iki faktörlü kimlik doğrulama hesabında iCloud Anahtar Zinciri’ni ilk kez açtığında, aygıt kendisi için bir eşzamanlama kimliği oluşturup yaratır. Eşzamanlama kimliği, aygıtın anahtar zincirinde saklanan (P-384 kullanan) asimetrik eliptik anahtarlardan oluşur. Her aygıt, kullanıcının diğer aygıtlarının ona ait eşzamanlama kimlikleri listesini tutar ve bu listeyi kimlik anahtarlarından birini kullanarak imzalar. Bu listeler CloudKit’te saklanır ve kullanıcı aygtlarının anahtar zinciri verilerini aralarında nasıl güvenli bir şekilde eşzamanlayacakları konusunda uzlaşmaya varmalarını sağlar.
Daha eski iCloud aygıtları ile uyum için benzer bir eşzamanlama güven halkası yaratılır ve başka bir eşzamanlama kimliği oluşturulur. Eşzamanlama kimliğinin açık anahtarı halkaya eklenir ve halka, ilk önce eşzamanlama kimliğinin gizli anahtarıyla, sonra kullanıcının iCloud hesabı parolasından türetilen asimetrik eliptik anahtarla (P-256 kullanılarak) olmak üzere iki kez imzalanır. Halkayla birlikte, kullanıcının iCloud parolasını taban alan anahtarı yaratmak için kullanılan parametreler de (rasgele salt ve yinelemeler) saklanır.
Eşzamanlama halkasının iCloud saklama alanı
İki faktörlü kimlik doğrulama hesapları için her bir aygıtın güvenilir aygıtlar listesi CloudKit’te saklanır. Listeler, kullanıcının iCloud parolası bilinmeden okunamaz ve sahip olan aygıtın gizli anahtarları olmaksızın değiştirilemez.
Benzer biçimde, imzalı eşzamanlama halkası kullanıcının iCloud anahtar-değer saklama alanında saklanır; kullanıcının iCloud parolası bilinmeden okunamaz ve üyesine ait eşzamanlama kimliğinin gizli anahtarı olmaksızın geçerli bir şekilde değiştirilemez.
Kullanıcının diğer aygıtları eşzamanlama halkasına nasıl eklenir?
Yeni aygıtlar iCloud’a giriş yaptıklarında iCloud Anahtar Zinciri eşzamanlama halkasına iki yoldan biriyle katılır: var olan bir iCloud Anahtar Zinciri aygıtı ile eşleyerek veya bu aygıt tarafından sponsorlanarak ya da iCloud Anahtar Zinciri kurtarmayı kullanarak.
Eşleme akışları sırasında, aday aygıt hem eşzamanlama halkası hem de eşzamanlama listeleri için (iki faktörlü kimlik doğrulama hesapları için) yeni eşzamanlama kimlikleri yaratır ve bunları sponsora sunar. Sponsor yeni üyenin açık anahtarını eşzamanlama halkasına ekler ve yeniden kendi eşzamanlama kimliği ve kullanıcının iCloud parolasından türetilen anahtarla imzalar. Yeni eşzamanlama halkası iCloud’a eklenir ve burada aynı şekilde halkanın yeni üyesi tarafından imzalanır. İki faktörlü kimlik doğrulama hesaplarında, sponsor aygıt da katılan aygıta kimlik anahtarları tarafından imzalanmış bir kupon sağlar, bu aday aygıta güvenilmesi gerektiğini gösterir. Ardından, kendi ayrı güvenilir eşzamanlama kimlikleri listesini adayı içerecek şekilde günceller.
Böylece imzalama halkasında artık iki üye vardır ve her üye, kendi eşinin açık anahtarına sahip olur. Üyeler, CloudKit veya iCloud anahtar-değer saklama aracılığıyla anahtar zinciri öğelerinin ayrı ayrı değiş tokuşuna başlar veya bunları CloudKit’te saklar (hangisi duruma en uygunsa). Her iki halka üyesi de aynı öğe için güncellemelere sahipse, biri veya diğeri seçilir ve bu nihai tutarlılıkla sonuçlanır. Eşzamanlanan her öğe şifrelenir ve böylece şifresi yalnızca kullanıcının güven halkası içindeki bir aygıt tarafından çözülebilir. Diğer aygıtlar veya Apple bu şifreyi çözemez.
Aygıtlar eşzamanlama halkasına katıldıkça bu “katılma işlemi” yinelenir. Örneğin, üçüncü bir aygıt katıldığında var olan aygıtlardan biriyle eşlenebilir. Yeni eşler eklendikçe her eş, yeni üyeyle eşzamanlanır. Bu, tüm üyelerde aynı anahtar zinciri öğelerinin olmasını sağlamak için tasarlanmıştır.
Yalnızca belirli öğeler eşzamanlanır
Bazı anahtar zinciri öğeleri, iMessage tuşları gibi aygıta özgüdür ve bu nedenle aygıtta kalmalıdır. Beklenmeyen veri aktarımını önlemek için eşzamanlanacak her öğe kSecAttrSynchronizable
özelliği ile açıkça işaretlenmelidir.
Apple; Safari kullanıcı verilerinin (kullanıcı adları, parolalar ve kredi kartı numaraları dahil olmak üzere) yanı sıra Wi-Fi parolaları, HomeKit şifreleme anahtarları ve uçtan uca iCloud şifrelemeyi destekleyen diğer anahtar zinciri öğeleri için de bu özelliği ayarlar.
Ayrıca üçüncü parti uygulamalar tarafından eklenen anahtar zinciri öğeleri saptanmış olarak eşzamanlanmaz. Geliştiricilerin anahtar zincirine öğe eklerken kSecAttrSynchronizable
özelliğini ayarlaması gerekir.