Veriyi iOSta Şifreleme Anlamak

iOS, hassas verileri korumak için birden çok katmanda şifreleme uygular. Donanım seviyesinde, Güvenli Enklav, şifreleme anahtarlarını ve kriptografik işlemleri yönetir. işletim sisteminde, 03:0)Data Protection)Data Protection), cihazın geçiş anahtarlarını şifreleyen dosya düzeyinde şifreleme kullanır.In app-specific data, developers can use frameworks like CryptoKit, CommonCrypto and the Security framework to encrypt bireysel kayıtları, dosyaları veya ağ yükleri.

Şifreleme, bir algoritma ve anahtar kullanarak doğru bir şekilde doğru bir şekilde doğrulanmış bir şekilde doğrulanmış veri olarak, Apple'sETHFLT:0)iOS Data Protection API) otomatik olarak şifreler halindeki dosyaları şifreler halinde depolar, ancak geliştiriciler korumalı dosya sistemi dışında depolayarak - Core Data, UserDefaults veya özel önbelleklerde olduğu gibi.

Anahtar çeki: 03.D.C.C.C.C.C.C.C.C.C.C.:0. Şifreleme, cihazda ne zaman bulunduğunda hassas verileri şifreler.[D: 1 ), iOS şifreleme varsayılan olarak etkinleştirilirse bile. Bu, fiziksel cihaz erişimine karşı koruma sağlar, adli ekstraksiyonda çalışan kötü niyetli uygulamalar.

iOS Şifreleme Çerçeveleri ve API'ler

Apple, birkaç kriptografik kütüphane sunar. Doğru olanı seçmek, gerekli olan dağıtım hedefine ve kontrol seviyesine bağlıdır.

CryptoKit – Modern Swift API

iOS 13, CryptoKit, hem gizlilik hem de dürüstlük için Swift-natif bir arayüz sunuyor: hashing, ve anahtar anlaşma.It usesFLT:0}AES-GCM, hem gizlilik hem de dürüstlük. Aşağıda koruyan tipik bir şifreleme ve de şifreleme modelidir:

import CryptoKit

func encryptSensitiveData(_ plaintext: String, using key: SymmetricKey) throws -> Data {
 let inputData = Data(plaintext.utf8)
 let sealedBox = try AES.GCM.seal(inputData, using: key)
 return sealedBox.combined
}

func decryptSensitiveData(_ encryptedData: Data, using key: SymmetricKey) throws -> String {
 let sealedBox = try AES.GCM.SealedBox(combined: encryptedData)
 let decryptedData = try AES.GCM.open(sealedBox, using: key)
 return String(decoding: decryptedData, as: UTF8.self)
}

Her zaman, Snapchat'te bulunan, KullanıcıDefault'larda veya düz bir dosyada değil.UseENFLT:2) ile cihaz ve kullanıcı varlığına anahtar bağlamak için.

CommonCrypto – C-Based Flexability

Eski iOS versiyonlarını destekleyen veya özel blok şifrelerini gerektiren uygulamalar için (örneğin, HMAC ile CBC), CommonCrypto düşük seviyeli C işlevleri sağlar. AES, DES, 3DES ve çeşitli hashing algoritmaları destekler. Örnek of AES-CBC şifreleme:

#include <CommonCrypto/CommonCryptor.h>

- (NSData *)aes256Encrypt:(NSData *)plaintext withKey:(NSData *)key iv:(NSData *)iv {
 size_t outLength;
 NSMutableData *ciphertext = [NSMutableData dataWithLength:plaintext.length + kCCBlockSizeAES128];
 CCCryptorStatus status = CCCrypt(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding,
 key.bytes, key.length, iv.bytes,
 plaintext.bytes, plaintext.length,
 ciphertext.mutableBytes, ciphertext.length,
 &outLength);
 if (status == kCCSuccess) {
 ciphertext.length = outLength;
 return ciphertext;
 }
 return nil;
}

CommonCrypto, ilkleme vektörlerinin (IVs) ve kimlik doğrulama etiketlerinin manuel yönetimi gerektirir. Gerçekleştirilmiş şifreleme için, çift AES-CBC ayrı bir HMAC ile veya mümkün olduğunda AES-GCM'ye geçiş.

Güvenlik Çerçeve ve Güvenlik

Güvenlik çerçevesi, anahtarların, sertifikaların ve şifrelerin güvenli depolaması için disko hizmetleri sağlar.UseENFLT:5), katı erişim kontrolleriyle anahtarları depolamak için (örneğin, kullanıcı varlığını biyometrikler aracılığıyla gerektirir). Güvenli Enklavuzu ECC operasyonları için özel anahtarlar üretebilir ve depolayabilir, anahtarın asla donanıma bırakamaz.

Farklı Veri Türleri için Şifrelemeyi Uygulamayı

Tüm veriler aynı şifreleme stratejisine ihtiyaç duymaz. Veriler nasıl ve nerede kullanılır.

Kullanıcı Temsilleri ve Core Data Şifreleme

KullanıcıDefaults ve Core Data mağazaları şifrelenmeden açık SQLite dosyalarıdır.For Core Data, enable theETHFLT:0)NSFile KorumakRe[D: 1) Dükkan dosyasında özelliktir.For finer granularity, şifre bireysel özellikleri veya tüm nesneleri tasarruf etmeden önce şifreleyin:

  • Core DataFLENT:0) okunabilir[[Dönemli)[Dönemli bir değer dönüştürücü ile şifreler / kodlar / yazma / yazma hakkında şifreler içeren özel bir değer dönüştürücü.
  • Tüm yönetilen nesneyi JSON olarak sıralayın, onu şifreleyin ve ikili bir özellikte ciphertext'ı saklayın.
  • KullanıcıDefaults için, asla ham hassas dizeleri saklama; her değeri şifreleyin ve şifreli verileri saklayın.

KullanıcıDefaults'ta şifreli verileri depolama örneği:

let key = SymmetricKey(size: .bits256)
let data = "user_ssn".data(using: .utf8)!
let sealedBox = try AES.GCM.seal(data, using: key)
UserDefaults.standard.set(sealedBox.combined, forKey: "encrypted_ssn")
UserDefaults.standard.synchronize()

Dosya Korumalı Dosyalar

iOS, dosya düzeyinde koruma sınıfları sunar: 03.03.2012, ve [[Döneticileri oluşturma veya hareket dosyaları oluşturmada ayarla:)

let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("data.bin")
try FileManager.default.setAttributes([.protectionKey: FileProtectionType.complete], ofItemAtPath: fileURL.path)

Örneğin, dosyayı yalnızca doğrulamadan sonra depolanan anahtarı ile şifreleyin.For example, the file protection with opencrypt if the data must stay even when the device is opened. For example, encrypt the file with a key storage storage safe in the parameter and accessible only after authentication.

Ağ Data (Transport Katman Security) şifreleme

App Transport Security (ATS) HTTPS'yi varsayılan olarak uygular. Özel TCP bağlantıları için, TLS ile kullanımDANFLT:11'i kullanın veya insan-orta saldırılarını önlemek için SSL pinning uygulayın.

Key Management Best Practices

Şifreleme yalnızca anahtar yönetim kadar güçlüdür. Bu yönergeleri güvenlik korumak için takip edin:

  • [FONT:0) Bir kriptografik olarak güvenli bir rastgele sayı jeneratörü ([Dönetici: 1) kullanarak genel anahtarlar (Dönetici:0) veya [[DenformT:0)
  • [[Düzücü:0) Mağaza anahtarları yalnızca videoda [DüzgT:1] uygun erişilebilirlik özellikleri ile aynıdır: [[ENFLT:0) Cihazın anahtarına yedeklemeyi ve bağlar.
  • [FONT=0) Biyometrik veya kod doğrulama [Döneticileri yeniden başlatmadan önce anahtarı geri almadan önce [Ücretsiz: 15.000T: 16) kullanıcı doğrulamasını sağlar.
  • [FONT:0) Bir programda veya güvenlik olayından sonra anahtarlar – Yeni anahtarlarla şifreli verileri tekrarlayın ve güvenli bir şekilde eski anahtarları sil.
  • [[Dönetici:0) Kaynak kodu veya yapılandırma dosyalarında zor kod anahtarları yoktur. Kullanıcı parolalarından gelen anahtarlar yavaş anahtar çıkarma işlevi (PBKDF2 veya şifre) gerektiğinde.
  • [FONT=0] Güvenli Enklav[[Dönetici:0) simetrik anahtar nesil için (özel anahtarlar ihraç edilemez, eski filtrelemeyi engelleyebilir.

Son derece hassas verileri kullanarak, bir [[Dönetici:0)hardware güvenlik modülü (HSM)) ağ hizmetleri aracılığıyla, ancak bu geç erişim ve internet bağlantı gerektirir.

Anahtar Rotasyon ve Re-encryption

Anahtar bir uzlaşmaya veya tanımlanmış bir süre sonra (örneğin, her 90 gün), anahtarı döndürür. Bu, tüm verileri eski anahtarla şifrelemeyi, yeni bir anahtarla ve yeniden şifrelemeyi oluşturmayı içerir. büyük veri setleri için, bir sürüm anahtar planı uygulayın:

  1. Bir anahtar tanımlayıcı (örneğin, UUUID) her şifreli kayıt ile birlikte.
  2. Diskteki gerçek anahtarlara bir dizi tanımlayıcı tutun (geride şifrelendi).
  3. rotasyon sırasında, hemen tüm verileri şifreleye almadan yeni bir giriş ekleyin.Re-encrypt lazily erişime devam edin.

Uyum ve Düzenlemeler

Hassas veriler için birçok düzenleme yetkisi şifreleme.ETHFLT:0)GDPR uygun teknik önlemler gerektirir ve şifreleme, Apple'ın Data Protection yönergelerini takip ederek, uygulama-katılım şifreleme gereksinimlerine karşı bir şekilde yapılır.[Döneticileri kopyalayın. Dokümanlar, şifreleme ve denetim noktaları.PCI DSS).In iOS'ta Apple'ın Data Protection yönergelerini takip edin.In iOS'ta, Apple'ın Data Protection yönergelerini takip edin.In reliable password.)

Son tavsiyelerde Apple belgesine noter:0)CryptoKit Geliştirici Kılavuzu), [[Dönetici:2|Keychain Services) ve ) Kullanıcı Gizlilik[D 5 )[Dönetici için, bakınız:0)

Test ve Geçerlilik

şifrelemeyi uygulamadan sonra, doğru şekilde çalışır:

  • Şifrelenen ve şifrelenen basit metinleri tanımlayan birim testleri yazın ve çıktıları iddia edin.
  • Test kenar vakaları: boş veriler, çok büyük maaş yükleri ve ciphertexts.
  • Saldırı senaryolarını simüle etmek için bir hapishane cihazı kullanarak güvenlik testleri yapın - anahtarların kimlik doğrulama olmadan erişilemez kalmasını sağlayın.
  • Sert kodlanmış anahtarlar veya zayıf algoritmaları sağlamak için statik analiz araçları kullanın.
  • İnceleme logları - asla doğru metin hassas veri veya şifreleme anahtarlarını açmaz.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Hassas iOS veri depolama için veri şifrelemesi uygulama işlemi çok katmanlı bir süreçtir. iOS dosyasını korumayı birleştirerek, KriptoKit veya CommonCrypto ile uygulama-katlı şifrelemeyi ve yalnızca menü ve Secure Enclave aracılığıyla sıkı bir şekilde yönetin, geliştiriciler GDPR ve HIPAA gibi düzenlemelerle uyum sağlamaları gerekir. Düzenli test ve anahtar rotasyonlama uygulamaları uzun vadeli bir güvenlik sağlar.