Table of Contents
iOS-järjestelmän tietojen salauksen ymmärtäminen
iOS toteuttaa salauksen useissa kerroksissa suojatakseen arkaluonteisia tietoja. Laitetasolla Secure Enclave hallinnoi salausavaimia ja salaustoimintoja. Käyttöjärjestelmän tasolla [Data Protection[] käyttää tiedostotason salausta, joka sitoo salauksen avaimet laitteeseen. Sovelluskohtaisia tietoja varten kehittäjät voivat käyttää CryptoKitin, CommonCrypton ja Security-järjestelmän kaltaisia kehyksiä yksittäisten tietueiden, tiedostojen tai verkkokuormien salaamiseen.
Salaus muuntaa salainen teksti salaustekstiksi käyttäen algoritmia ja avainta. Ilman oikeaa avainta tiedot ovat lukukelvottomia. Apple. []iOS Tietosuoja API[] automaattisesti salaa tiedostoja levossa, mutta kehittäjät tarvitsevat nimenomaisen salauksen tietoja tallennetaan suojattuun tiedostojärjestelmään.
Avaintieto: salaa arkaluonteiset tiedot aina kun ne sijaitsevat laitteessa[, vaikka iOS-salaus olisi oletusarvoisesti käytössä. Tämä takaa suojan fyysiseltä laitteen pääsyltä, rikostekniseltä uutto, tai haittaohjelmia käynnissä samassa hiekkalaatikossa.
iOS-salauspuitteet ja API-rajapinta
Apple tarjoaa useita salauskirjastoja. Oikean valinnat riippuvat käyttöönottokohteesta ja tarvittavasta valvonnan tasosta.
CryptoKit ... Moderni Swift API
Esitetty iOS 13, CryptoKit tarjoaa Swift-native käyttöliittymän symmetrinen ja epäsymmetrinen salaus, häshing, ja avain sopimus. Se käyttää []AES-GCM[] todennettuun salaukseen, joka suojaa sekä luottamuksellisuutta ja eheyttä. Alla on tyypillinen salaus- ja salauskuvio:
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)
}
Tallenna [ aina avainketjuun, ei UserDefaults tai tavallinen tiedosto. Käytä kanssa sitoa avain laitteeseen ja käyttäjän läsnäolo.
Yhteinen salaus C-perusjoustavuus
Vanhempia iOS-versioita tukevien tai mukautettuja lohkosalauksen tiloja (esim. CBC HMAC:llä) vaativien sovellusten CommonCrypto tarjoaa matalan tason C-toimintoja. Se tukee AES:ää, DES:ää, 3DES:ää ja erilaisia hashing-algoritmeja. Esimerkki AES-CBC:n salauksesta:
#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 vaatii manuaalista alustausvektorien (IV) ja tunnistautumistunnisteiden hallintaa. AES-CBC-paria, jossa on erillinen HMAC, tai vaihtaa CryptoKitin kautta AES-GCM-järjestelmään, jos mahdollista.
Turvallisuuskehys ja avainketju
Turvajärjestelmä tarjoaa avainketjupalveluja avaimien, varmenteiden ja salasanojen turvalliseen tallentamiseen. Käytä [ -järjestelmää tallentaaksesi avaimia, joilla on tarkat pääsyrajoitukset (esim. vaativat käyttäjän läsnäoloa biometriikan avulla). Secure Enclave voi luoda ja tallentaa EEC-toimintoihin yksityisiä avaimia, jolloin avain ei koskaan poistu laitteistosta.
Toteutetaan salaus eri tietotyypeille
Kaikki tiedot eivät tarvitse samaa salausstrategiaa. Määrittele lähestymistapa siihen, miten ja missä tietoja käytetään.
Käyttäjän oletusten ja ydintietojen salaaminen
Käyttäjänsuojaukset ja ydintietovarastot ovat yksinkertaisia SQLite-tiedostoja, elleivät ne ole salattuja. Core Datan osalta ota käyttöön [NSFileProtectionType[ -attribuutti varastotiedostossa. Hienomman raeuden, salaa yksittäisten ominaisuuksien tai kokonaisten kohteiden salaamiseksi ennen tallentamista:
- Käytä ydindataa muunnettavissa[ -attribuutteja mukautetun arvon muuntajan kanssa, joka salaa/puraa lukemisen/kirjoittamisen.
- Serialisoi koko hallittu objekti JSONina, salaa se ja tallenna salausteksti binääriseen ominaisuuteen.
- Käyttäjänsuojauksia varten älä koskaan säilytä raaka-aineita, salaa jokainen arvo ja tallenna salattua tietoa.
Esimerkki salattujen tietojen tallentamisesta UserDefaults-tiedostoihin:
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()
Tiedostojen salaaminen tiedostosuojauksella
iOS tarjoaa tiedostotason suojausluokkia: , ja [. Aseta nämä ominaisuudet tiedostojen luonnissa tai siirtämisessä:
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("data.bin")
try FileManager.default.setAttributes([.protectionKey: FileProtectionType.complete], ofItemAtPath: fileURL.path)
Yhdistä tiedostosuoja ja nimenomainen salaus, jos tiedot on suojattava myös silloin, kun laite on avattu. Esimerkiksi salaa tiedosto avainketjussa tallennetulla avaimella ja käytettävissä vasta tunnistautumisen jälkeen.
Verkkotietojen salaaminen (liikennekerrosten turvallisuus)
App Transport Security (ATS) panee HTTPS-järjestelmän oletusarvoisesti täytäntöön. Käytä TCP-yhteyksiä [ TLS:llä tai toteuta SSL-pinning-toimintoa estämään ihmisen keskivälin hyökkäykset. Salaa hyötykuorma sovellustasolla lisäpuolustuksen-syvällisyyttä varten: vaikka TLS olisi vaarantunut, tiedot pysyvät suojattuina.
Keskeiset johtamisen parhaat käytännöt
Salaus on vain yhtä vahva kuin avainhallinta. Noudata näitä ohjeita säilyttääksesi turvallisuuden:
- Luo avaimet salausvarmalla satunnaislukugeneraattorilla[ .
- Korjaa avaimet ainoastaan avaimenperään, jossa on asianmukaiset esteettömyysominaisuudet: ].
- ]Käytä biometristä tai salasanan todentamista ennen avaimen hakemista pakottaa käyttäjän varmentamaan.
- Kirjoita avaimet aikataulussa tai tietoturvatapahtuman jälkeen[ .
- Älä käytä hardcode-avaimia[] lähdekoodissa tai asetustiedostoissa. Käyttäjän salasanojen drive-avaimet käyttäen tarvittaessa hidaslukuista näppäintä (PBKDF2 tai scrypt)
- Saada Secure Enclave[ varten epäsymmetrinen avainsukupolven ... yksityisavaimia ei voida viedä maasta, mikä estää ulospääsyn.
Sovellusten, jotka käsittelevät erittäin arkaluonteisia tietoja, on harkittava []-laitteiston suojausmoduulin (HMS)[] käyttöä verkkopalvelujen kautta, vaikka se tuokin mukanaan latenssin ja edellyttää internetyhteyksiä.
Avainkierto ja uudelleen salaus
Kun avain on vaarantunut tai tietyn ajanjakson (esim. joka 90 päivä) jälkeen, käännä avainta. Tähän kuuluu kaikkien tietojen salauksen purkaminen vanhalla avaimella, uuden avaimen luominen ja uudelleen salaaminen.
- Avaimen tunniste (esim. UUID) on säilytettävä jokaisen salatun tietueen rinnalla.
- Pidä tunnisteiden kartoitus avainketjun todellisiin avaimiin (salattu levossa).
- Lisää uusi merkintä vuorottelun aikana salaamatta heti uudelleen kaikkia tietoja. Salaa uudelleen laiskasti, kun olet saanut yhteyden.
Vaatimustenmukaisuutta ja sääntelyä koskevat näkökohdat
Monet asetukset mandaatti salaus arkaluonteisia tietoja. GDPR vaatii asianmukaisia teknisiä toimenpiteitä, ja salaus on tunnustettu salaustekniikka. [HIPA[ antaa valtuudet salata ePHI levossa ja kauttakulku. []PCI DSS] vaatii salauksen kortinhaltijan tietoja. iOS:ssa Apple. Apple.n tietosuoja-ohjeisto yhdistettynä sovellus-soittimen salaukseen täyttää useimmat vaatimustenmukaisuusvaatimukset. Dokumentoi salauksen toteutusta, avain elinkaaren toimintaperiaatteet ja kirjauspolut sääntelyviranomaisten uudelleentarkasteluun.
Ks. Applen viralliset asiakirjat uusimpien suositusten osalta: CryptoKit Developer Guide[, Keychain Services, ja ].Käyttäjän yksityisyyden suoja[[]. Teollisuuden ohje WASP Mobile Security Testing Guide ja NIST SP 800-175B .
Testaus ja validointi
Tarkista salauksen käyttöönoton jälkeen, että se toimii oikein:
- Kirjoita yksikön testit, jotka salaavat ja purkavat tunnettuja tekstitöitä ja vahvistavat lähdöt.
- Testireunan tapaukset: tyhjä data, erittäin suuret hyötykuormat ja korruptoituneet salakirjoitukset.
- Suorita turvallisuustestaus käyttäen jailbroken-laitetta hyökkäysskenaarioiden simuloimiseksi. Varmista, että avaimet ovat edelleen saavuttamatta ilman tunnistamista.
- Käytä staattisia analyysityökaluja varmistaa mitään kovakoodattuja avaimia tai heikkoja algoritmeja.
- Tarkista lokit ... älä koskaan kirjaudu salaustiedoston arkaluonteisia tietoja tai salausavaimia.
Päätelmät
Tietojen salauksen toteuttaminen on monikerroksinen prosessi. Yhdistämällä iOS-tiedoston suojaus, sovellus-kerrossalaus CryptoKitin tai CommonCrypton kanssa sekä tiukka avainhallinta Keychainin ja Secure Enclaven kautta kehittäjät voivat vähentää merkittävästi datan altistumisriskiä. GDPR:n ja HIPAA:n kaltaisten säädösten noudattaminen edellyttää dokumentoituja, auditoitavaa salauskäytäntöä. Säännöllinen testaus ja avainkierto takaavat pitkän aikavälin turvallisuuden. Sijoittaminen vankkaan salausarkkitehtuuriin ei ainoastaan suojaa käyttäjätietoja vaan myös luo luottamusta ja vastaa sääntely-odotuksiin.