Şifrelenmiş yerel depolama

EncryptedLocalStore sınıfı (ELS), bir uygulamaya ilişkin kişisel veriler için küçük bir önbellek olarak kullanabileceğiniz, şifreli, yerel bir saklama mekanizması sağlar. ELS verileri uygulamalar arasında paylaşılamaz. ELS'nin amacı, oturum açmak için gerekli kimlik bilgileri ve diğer kişisel bilgiler gibi kolayca yeniden oluşturulabilen öğeleri saklamak için bir uygulama sağlamaktır. Aşağıdaki "Şifreli yerel saklama alanı sınırlamaları" ve "En iyi uygulamalar" içinde vurgulandığı üzere, ELS verisi kalıcı olarak kabul edilmemelidir.

Not: AIR, şifreli yerel deponun yanı sıra SQL veritabanlarında saklanan içerik için şifreleme de sağlar. Ayrıntılar için bkz. Şifrelemeyi SQL veritabanlarıyla kullanma .

Web hizmetleri için oturum açma bilgileri gibi güvence altına alınması gereken bilgileri önbelleğe almak için şifreli yerel depo kullanmak isteyebilirsiniz. ELS, diğer kullanıcılardan gizli tutulması gereken bilgileri depolamak için uygundur. Ancak, verileri aynı kullanıcı hesabında çalışan diğer işlemlerden korumaz. Bu yüzden, DRM veya şifreleme anahtarları gibi gizli uygulama verilerini korumak için uygun değildir.

Masaüstü platformlarında AIR, şifreli yerel depoyu her bir uygulama ve kullanıcıyla ilişkilendirmek için Windows'ta DPAPI'yı, Mac OS'de ve iOS'de KeyChain'i, Linux'ta ise KeyRing veya KWallet'ı kullanır. Şifreli yerel depo AES-CBC 128-bit şifreleme kullanır.

EncryptedLocalStorage sınıfı tarafından depolanan veriler Android'de şifrelenmez. Bunun yerine, veriler işletim sistemi tarafından sağlanan kullanıcı düzeyi güvenliğince korunur. Android işletim sistemi her uygulamaya ayrı bir kullanıcı kimliği atar. Uygulamalar yalnızca kendi dosyalarına ve ortak konumda oluşturulmuş dosyalara (kaldırılabilir depolama kartı gibi) erişebilir. "Root edilmiş" Android cihazlarında kök kullanıcı yetkileri ile çalışan uygulamaların, diğer uygulama dosyalarına giriş YAPABİLDİĞİNİ unutmayın. Bu nedenle şifreli yerel depo, root edilmiş bir cihazda root edilmemiş bir cihazda olduğu kadar yüksek bir veri koruma düzeyi sağlamaz.

Şifreli yerel depodaki bilgiler yalnızca uygulama güvenliği sanal alanındaki AIR uygulama içeriği tarafından kullanılabilir.

Bir AIR uygulamasını güncellerseniz, şu durumlarda güncellenmiş sürüm şifreli yerel depodaki herhangi bir veriye erişimi engeller:

  • Öğeler, true olarak ayarlanmış stronglyBound öğesiyle eklenmemişse

  • Varolan ve güncellenen sürümler AIR 1.5.3’ten önce yayınlanır ve güncelleme bir geçiş imzasıyla imzalanır.

Şifreli yerel depo sınırları

Şifreli yerel depodaki veriler, kullanıcının işletim sisteminin hesap kimlik bilgileri tarafından korunur. Diğer varlıklar o kullanıcı olarak oturum açmadıkları sürece depodaki veriye erişemez. Ancak veriler, kimliği doğrulanmış bir kullanıcı tarafından çalıştırılan diğer uygulamaların erişimine karşı güvenli değildir.

Bu saldırıların çalışması için kullanıcının kimlik doğrulamasından geçmiş olması gerektiğinden, kullanıcının özel verisi korunmaya devam eder (kullanıcı hesabının kendisinden ödün verilmiş olmadığı sürece). Ancak, uygulamanızın kullanıcılardan gizli tutmak isteyebileceği veriler, örneğin lisans için kullanılan anahtarlar veya dijital haklar yönetimi, güvenli değildir. Bu yüzden, ELS bu tip bilgileri depolamak için uygun bir konum değildir. Yalnızca şifre gibi özel kullanıcı verilerini depolamak için uygun bir yerdir.

ELS'deki veriler birkaç nedenden dolayı kaybolabilir. Örneğin, kullanıcı uygulamayı kaldırabilir ve şifreli dosyayı silebilir. Ayrıca, yayıncı kimliği bir güncelleme sonucu değiştirilebilir. Bu yüzden ELS, kalıcı bir veri deposu olarak değil özel bir önbellek gibi düşünülmelidir.

stronglyBound parametresi onaylanmamıştır ve true olarak ayarlanmamalıdır. Parametreyi true olarak ayarlamak veriler için ek bir koruma sağlamaz. Aynı zamanda, yayıncı kimliği aynı kalsa bile, uygulama her güncellendiğinde verilere olan erişim kaybedilir.

Saklanılan verilerin boyutu 10MB'ı geçerse şifreli yerel depo yavaş çalışabilir.

Bir AIR uygulamasını kaldırdığınızda, kaldırma uygulaması şifreli yerel depoda saklanan verileri silmez.

En iyi uygulamalar

ELS'yi kullanmanın en iyi şekillerine şunlar dahildir:

  • ELS'yi şifreler gibi (stronglyBound'u false değerine ayarlayarak) depolama duyarlı kullanıcı verilerini depolamak için kullanın.

  • ELS'yi DRM anahtarları veya lisans verme işaretleri gibi uygulama sırlarını saklamak için kullanmayın..

  • ELS verileri kaybolduysa, uygulamanızın ELS'de depolanmış verileri yeniden oluşturması için bir yol sağlayın. Örneğin, gerektiğinde kullanıcıdan hesap kimlik bilgilerini yeniden girmesini isteyerek bu işlemi gerçekleştirebilirsiniz.

  • stronglyBound parametresini kullanmayın.

  • stronglyBound parametresini true olarak ayarlarsanız, depolanmış öğelere güncelleme sırasında geçiş yaptırmayın. Bunun yerine verileri güncellemeden sonra yeniden oluşturun.

  • Yalnızca nispeten daha az miktarda veri depolayın. Daha fazla miktardaki veriler için şifreli bir AIR SQL veritabanı kullanın.

Şifrelenmiş yerel depoya veri ekleme

Yerel depoda veri saklamak için EncryptedLocalStore sınıfının setItem() statik yöntemini kullanın. Veriler, verileri bayt dizileri olarak saklayan ve dizeleri anahtar olarak kullanan karma bir tabloda saklanır.

Örneğin aşağıdaki kod bir dizeyi şifreli yerel depoda saklar:

var str:String = "Bob"; 
var bytes:ByteArray = new ByteArray(); 
bytes.writeUTFBytes(str); 
EncryptedLocalStore.setItem("firstName", bytes);

setItem() yönteminin üçüncü parametresi olan stronglyBound isteğe bağlıdır. Bu parametre true olarak ayarlandığında, şifreli yerel depo, depolanan öğeyi saklayan AIR uygulamasının dijital imza ve kısımlarına bağlar:

var str:String = "Bob"; 
var bytes:ByteArray = new ByteArray(); 
bytes.writeUTFBytes(str); 
EncryptedLocalStore.setItem("firstName", bytes, false); 

stronglyBound parametresi true olarak ayarlıyken depolanan bir öğe için, getItem() öğesine yapılan sonraki çağrılar yalnızca çağıran AIR uygulamasını depolayan uygulamayla aynıysa başarılı olur (uygulama dizininde bulunan dosyalardaki hiçbir veri değiştirilmemişse). Çağıran AIR uygulaması saklayan uygulamadan farklıysa, güçlü şekilde bağlı bir öğe için getItem() öğesini çağırdığınızda uygulama bir Hata istisnası atar. Uygulamanızı güncellerseniz, şifreli yerel depoya önceden yazılmış olan güçlü şekilde bağlı verileri okuyamaz. Mobil cihazlarda stronglyBound öğesinin true olarak ayarlanması yoksayılır; parametre her zaman false olarak değerlendirilir.

stronglyBound parametresi false değerine ayarlıysa (varsayılan olarak), uygulamanın veriyi okuması için yalnızca yayıncı kimliğinin aynı kalması gerekir. Uygulamanın bazı kısımları değişebilir (ve aynı yayıncı tarafından imzalanmaları gerekir) ancak veriyi depolayan uygulamada olduğu gibi aynı kısımlar olmaları gerekmez. Orijinaliyle aynı yayıncı kimliğine sahip olan güncellenmiş uygulamalar verilere erişmeye devam edebilir.

Not: Pratikte, stronglyBound öğesinin true olarak ayarlanması fazladan veri koruması sağlamaz. “Kötü niyetli” bir kullanıcı ELS'de depolanan öğelere erişebilmek için uygulamayı değiştirebilir. Ayrıca, stronglyBound öğesinin true veya false olarak ayarlanmasına bakılmaksızın veriler harici ve kullanıcı kaynaklı olmayan tehditlerden aynı şekilde korunur. Bu nedenlerle, stronglyBound öğesinin true olarak ayarlanması önerilmez.

Şifrelenmiş yerel depodaki veriye erişme

EncryptedLocalStore.getItem() yöntemini kullanarak, aşağıdaki örnekte olduğu gibi şifreli yerel depodan bir değer alabilirsiniz:

var storedValue:ByteArray = EncryptedLocalStore.getItem("firstName"); 
trace(storedValue.readUTFBytes(storedValue.length)); // "Bob" 

Şifrelenmiş yerel depodan veri kaldırma

EncryptedLocalStore.removeItem() yöntemini kullanarak, aşağıdaki örnekte olduğu gibi şifreli yerel depodan bir değer silebilirsiniz:

EncryptedLocalStore.removeItem("firstName"); 

EncryptedLocalStore.reset() yöntemini çağırarak, aşağıdaki örnekte olduğu gibi şifreli yerel depodan tüm verileri temizleyebilirsiniz:

EncryptedLocalStore.reset();