Jetpack Security ile Veri Şifreleme

En son güncellendiği tarih: 15 saat önce


Görsel Referansı


Daha önce uygulama içerisinde veri şifrelemeyi denemişsinizdir. Bir geliştirici olarak veriyi güvenli şekilde tutmayı ve erişmeyi isteyebilirsiniz. Fakat Android'de veriyi, ayrılmış bir alanda güvenli şekilde kullanmanıza pek imkan yoktur. İnternette veriyi nasıl şifreleyeceğize dair araştırma yaparsanız büyük ihtimalle yıllar önce yazılmış bir çok eski yazıyla karşılaşırsınız.


Jetpack Security (bundan sonra jetsec diyeceğiz.) şifreleme kütüphanesi; dosyaları ve SharedPreferences nesnelerini şifrelemeyi mümkün kılıyor. Bu kütüphane, veriyi şifrelerken güvenli ve iyi bilinen şifreleme ilkelerinden olan AndroidKeyStore'u kullanıyor. EncryptedFile ve EncryptedSharedPreferences kullanmak, hassas verileri, API key’lerini, OAuth token’ları ve diğer gizli verileri lokalde güvenli şekilde saklamanıza imkan tanır.


Öncelikle veriyi neden şifreli olarak tutmak istediğimize karar vermeliyiz. Eğer uygulamanız paylaşılan veri alanını kullanıyorsa şifrelenmelidir. Eğer uygulamanızda kullanıcının sağlık kayıtları, finansal verileri, işiyle ilgili veriler saklayıp işliyorsanız da şifreleme yapmanız gerekir. Ayrıca eğer mümkünse, bu verileri biometric erişelebilir yapmanızda da fayda var.


Jetsec’in alt yapısını oluşturan Tink, açıkkaynaklı, crossplatform bir güvenlik kütüphanesidir ve Google tarafından geliştirilmiştir. Jetsec veri yapısı Tink ile tam uyumludur.

Tink ile ilgili daha fazla bilgiye buradan ulaşabilirsiniz.


Key Üretmek


Verinizi şifreleme sürecine sokmadan önce, Jetsec’in uygulamanızı nasıl güvenli tutacağını anlayalım. Jetsec tüm alt verileri şifreleyen ve birtakım şifreleme operasyonlarından geçiren master key kullanır. Jetsec size default olarak MasterKeys class’ının içerisinde bir obje sağlar. MasterKeys class’ı AES256-GCM algoritmasıyla şifrelenen ve saklanan AndroidKeyStore verileri kullanır. Bu AndroidKeyStore verileri şifrelenmiş anahtarları saklayan bir konteynır olan TEE ve Stronbox içerir.


İlk olarak Jetsec’in AES25_GCM_SPEC özelliğini kullanacağız. AES256_GCM simetrik ve genel olarak güncel cihazlarda hızlı çalışır.


Daha fazla ayar içeren uygulamalarda, hassas verileri işlerken KeyGenParameterSpec kullanarak verinin hangi özelliklerde saklanacağını ve gösterileceğini belirleyebilirsiniz.


Önemli Özellikler:


  • userAuthenticationRequires() ve userAuthenticationValiditySeconds(); bu iki özellik zamana duyarlı (time-bound) olarak şifreleme ve şifre çözme özelliğini aktif eder.

  • unlockedDeviceRequired(); bu özellik cihazın tuş kilidi aktifse veya değilse şifreli veriye erişim izni verir. Android Pie ve üzerinde çalışır.

  • setIsStrongBoxBacked(); güçlü ve ayrılmış bir chip üzerinde şifrelemeyi çalıştırmak için kullanılır. Ekstra güvenlik sağlar. Android Pie ve üzerinde çalışır.


Not: Eğer uygulamanız arka planda şifreleme yapacaksa (bir background task’ta) userAuthenticationRequires(), userAuthenticationValiditySeconds() ve unlockedDeviceRequired() kullanmamalısınız.


Zaman Ayarlı(Time-Bound) Key’leri Çözmek


Eğer verileriniz aşağıdaki şifreleme ayarlarıyla şifrelendiyse BiometricPrompt kullanmalısınız.


  • userAuthenticationRequired is true

  • userAuthenticationValiditySeconds > 0


Kullanıcılar authenticate olduysa, bu key’ler görünür olacaktır. BiometricPrompt’ın bir örneğini Dialog’u açtığınız activity içerisinde onCreate() methodu içerisinde kullanmalısınız. Zaman ayarlı key’lere erişmek için örnek kod:


Dosyaları Şifrele


Jetsec EncryptedFile class’ı içerir. File class’ıyla benzer olarak EncryptedFile class’ı FileInputStream üzerinden okunur, oluşturulur ve değiştirilir.



SharedPreferences’ı Şifrelemek


Eğer uygulamanızda key-value şeklindeki veriyi şifrelemek istiyorsanız, ApiKey’ler gibi, Jetsec size bunun için EncyptedSharedPreferences class’ını sunuyor. SharedPreferences ile benzer şekilde kullanılır. Aynı şekilde hem key hem value şifrelenir. AES256-SIV-CMAC kullanılarak şifrelenir.



Diğer Kaynaklar


FileLocker Android’le ilgili güvenlik örneklerinin yapıldığı bir uygulamadır. Gihub üzerinden erişebilirsiniz. Jetsec kullanılarak yapılmış veri şifreleme örnekleri içerir.

https://github.com/android/security-samples/tree/master/FileLocker


Yazı Referansı: https://android-developers.googleblog.com/2020/02/data-encryption-on-android-with-jetpack.html


#encryptsharedpreferences #encryptfileandroid #androidencryption #jecpacksecurity #jetsec


Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
JetBrains Hakkında Detaylı Bilgi Alın

© 2020 by mobiler.dev

mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın