Swift Biometric Authentication

Aişe Nur Mor
İyi Programlama
Published in
5 min readNov 24, 2021

Biyometrik kimlik doğrulama; yüz, parmak izleri gibi biyolojik bilgilerinizi kullanarak bir sistemde kimlik doğrulaması yapmak için kullanılır. Mobil cihazlar kimlik doğrulaması için genellikle yüzünüzü veya parmak izinizi kullanır. Apple parmak izinizi TouchID olarak adlandırırken yüzünüzü ise FaceID olarak adlandırır.

Touch ID ve Face ID kullanıcılar tarafından genellikle sevilir çünkü bu kimlik doğrulama mekanizmaları, cihazlara minimum çabayla güvenli bir şekilde erişim sağlar.

Touch ID, Apple’ın 2013 yılında piyasaya sürdüğü iPhone 5s ile birlikte gelirken, Face ID teknolojisi ise 2017'de piyasaya sürülen iPhone X ile tanıtıldı ve iPhone X’ten sonraki her iPhone cihaz Face ID içermekte.

TouchId

Parmağınızın bir dokunuşuyla cihazınızın Home tuşundaki gömülü sensörler parmak izinizi okur. Parmak izi kimliği sensörü, SecureEnclave* yardımcı güvenlik işlemcisi tarafından çalıştırılır ve parmak izi verilerini sistemin başka hiçbir parçasına ifşa etmez.

Secure Enclave, Apple yongadaki sisteminde (SoC) tümleşik olan ayrılmış bir güvenli alt sistemdir. Secure Enclave, ek bir güvenlik katmanı sunmak amacıyla ana işlemciden ayrılmıştır ve uygulama işlemcisi çekirdeği saldırıya uğrasa bile hassas kullanıcı verilerinin güvende olmasını sağlayacak şekilde tasarlanmıştır.

Daha fazla bilgi için; https://support.apple.com/tr-tr/guide/security/sec59b0b31ff/web

iTunes Store, App Store ve iBooks Store’dan ve Apple Pay’den satın alma işlemlerini yetkilendirmek için ya da uygulamalarda oturum açmak için de Touch ID’yi kullanabilirsiniz.

FaceId

Face ID’de TrueDepth* kamera sistemi, sinir ağları ve Bionic çipler gibi bir dizi donanım faktörü vardır.

TrueDepth kamera, yüzünüzün derinlik haritasını oluşturmak için yüzünüze yansıttığı 30.000'in üzerinde görünmez noktayı analiz ederek en doğru yüz verilerini elde etmenin yanı sıra yüzünüzün kızılötesi görüntüsünü de alır. A11, A12 Bionic, A12X Bionic ve A13 Bionic çipte bulunan nöral sistemin (Secure Enclave’de muhafaza edilir) bir kısmı, derinlik haritasını ve kızılötesi görüntüyü matematiksel bir modele dönüştürüp bu modeli kayıtlı yüz verileriyle karşılaştırır.

Face ID, makyaj yapmak veya sakal uzatmak gibi görünümünüzdeki değişikliklere de uyum sağlar. Görünümünüzde sakal kesmek gibi daha önemli bir fark varsa, Face ID yüz verilerinizi güncellemeden önce parolanızı kullanarak kimliğinizi onaylayacaktır. Şapkalar, eşarplar, kontakt lensler ve çoğu güneş gözlüğü ile çalışmak üzere tasarlanmıştır, ancak yüz maskesi ile çalışmaz. iOS 14.5'te gelen bir yazılım güncellemesi, yüz maskesi taktığınızda, ancak bir Apple Watch kullanıyorsanız Face ID’nin çalışmasını sağlar.

Biometric Authentication Implementasyonu

Geliştiricilerin Touch ID/Face ID kimlik doğrulamasını dahil etmek için iki seçeneği vardır:

LocalAuthentication.framework, TouchID ya da FaceID aracılığıyla kullanıcının kimliğini doğrulamak için kullanılabilen üst düzey bir frameworktür. Güvenliği en üst düzeye çıkarmak için uygulamanız, yüz verileri ya da parmak iziniz gibi temel kimlik doğrulama verilerinin hiçbirine asla erişim sağlamaz. Sistemin geri kalanından izole edilmiş donanım tabanlı bir güvenlik işlemcisi olan Secure Enclave, bu verileri işletim sisteminin bile erişemeyeceği yerlerde yönetir. Framework daha sonra işlemi gerçekleştirmek için Secure Enclave ile koordine olur. Daha sonra, yalnızca doğrulamanın başarılı veya başarısız olduğunu gösteren bir boolean sonuç alırsınız.

Security.framework, keychain hizmetlerine erişmek için daha düşük seviyeli bir frameworktür. Uygulamanızın bazı gizli verileri biyometrik kimlik doğrulama ile koruması gerekiyorsa bu güvenli bir seçenektir, çünkü erişim denetimi sistem düzeyinde yönetilir ve kolayca atlanamaz.

Apple, mümkün olduğunca varsayılan olarak daha yüksek seviyeli API’lere geçmenizi önerir.

Biz bu yazıda LocalAuthentication framework üzerinden ilerleyeceğiz.

Nasıl ekleriz?

Öncelikle Local Authentication frameworkünü ekliyoruz.

İkinci olarak cihazın FaceID veya TouchID’yi desteklediğini doğrulamamız gerekiyor. Bunun için LAContext sınıfının canEvaluatePolicy() yöntemini kullanmamız gerek. Bu yöntem, güvenlik politikası türünü iletmeliyiz. Local Authentication frameworkü tarafından sağlanan iki tür güvenlik politikası vardır.

.deviceOwnerAuthenticationWithBiometrics
Bu ilke, biyometrik bir yöntem (Touch ID veya Face ID) kullanarak kimlik doğrulaması yapmak için kullanılır. Bu güvenlik politikası LAErrorBiometryNotAvailable, LAErrorBiometryNotEnrolled veya LAErrorBiometryLockout ile başarısız olur.

.deviceOwnerAuthentication
Bu güvenlik politikası ise, biyometrik veya cihaz parolası ile kimlik doğrulaması yapmak için kullanılır. Kullanılabilir, kayıtlıysa ve kilitlenmemişse, önce kullanıcılardan istenir. Aksi takdirde, cihaz parolası doldurma seçeneği gösterilecektir. Parola etkinleştirilmezse, ilke sonucu LAErrorPasscodeNotSet ile başarısız olur.

Üçüncü adım olarak, biyometrik taramanın nedenini belirtmeliyiz. TouchID için bu nedeni evaluatePolicy() methodunun localizedReason parametresiyle iletebiliriz, FaceID için de için Info.Plist dosyasına NSFaceIDUsageDescription (diğer adıyla Privacy — Face ID Usage Description) anahtarıyla eklememiz gerekmekte. Bu key için girdiğiniz değer uygulamanızın neden bu kimlik doğrulama mekanizmasına erişmesi gerektiğini açıkça belirtmelidir.

Örneğin evaluatePolicy() methoduna localizedReason ile gönderdiğimiz mesaj kullanıcıya bu şekilde gösterilmektedir.

Ardından evaluatePolicy() yöntemini çağırmamız gerekiyor, bu fonksiyon kullanıcının kimliğinin başarıyla doğrulanıp doğrulanamadığını gösteren bir boolean değer ve eğer başarısızsa ikinci parametrede bir hata döndürür.

Ek olarak; LAContext aracılığı ile aşağıda görüldüğü gibi kullanıcıya gösterilecek popuplarda düzenlemeler de yapabiliriz.

Simulatorde Nasıl Test Ederim?

Öncelikler simulatorümüzün Features menüsü altında simulatore uygun olarak FaceID ve TouchID ile ilgili bölümler bulunmakta. Buradan enrolled ile TouchID ya da FaceID’yi enable yapabiliriz. Ardından eşleşme ya da eşleşmeme durumlarını da Matching Face / Non-matching Face ve Matching Touch / Non-matching Touch seçeneklerinden test edebilirsiniz.

Genel hatlarıyla Swift’de biometric authentication implementasyonunu incelemiş olduk. Umarım faydalı olur, diğer yazılarda görüşmek dileğiyle 👋🏼

References

--

--