Versleuteling is het proces van het omzetten van gegevens in een vorm die niet leesbaar is zonder een speciale sleutel. In mobiele apps beschermt versleuteling persoonlijke gebruikersgegevens, betalingsinformatie en bedrijfslogica tegen onderschepping en lekken. Volgens Statista (2024) is het aantal datalekken uit mobiele apps in twee jaar tijd met 38% gestegen, en in 72% van de gevallen was de oorzaak het ontbreken of onjuist toepassen van versleuteling. Moderne mobiele platforms bieden ingebouwde API's voor versleuteling en het gebruik ervan is een verplichte veiligheidsnorm. Statista, 2024
Belangrijkste punten
Versleuteling in de context van mobiele apps is het toepassen van cryptografische algoritmen om gegevens te beschermen die op het apparaat zijn opgeslagen (data at rest) en via het netwerk worden verzonden (data in transit). Op apparaatniveau wordt de lokale opslag versleuteld: bestanden, databases, SharedPreferences en cache. Op netwerkniveau wordt het verkeer tussen de app en de server versleuteld via TLS/HTTPS-protocollen. Het uiteindelijke doel is om te garanderen dat zelfs bij fysieke toegang tot het apparaat of onderschepping van verkeer, een aanvaller de beschermde gegevens niet kan lezen zonder cryptografische sleutel.
Mobiele apparaten zijn bijzonder kwetsbaar voor gegevensverlies: een telefoon kan gemakkelijk worden verloren, gestolen of geïnfecteerd met malware. Volgens Ponemon Institute (2023) schrijft 42% van de bedrijven die getroffen zijn door datalekken de incidenten toe aan mobiele apparaten. Zonder versleuteling kan een aanvaller via USB verbinding maken met het apparaat, de SQLite-database extraheren en alle opgeslagen gegevens lezen. Versleuteling lost dit probleem op: zelfs als de database wordt geëxtraheerd, blijft de inhoud versleuteld. Bovendien zijn er in de VS en de EU wetten (GDPR, CCPA) die versleuteling van persoonsgegevens vereisen en boetes opleggen tot 4% van de jaaromzet voor overtredingen. Het gebruik van versleuteling is niet alleen een technische, maar ook een juridische noodzaak voor elke mobiele app die met gebruikersgegevens werkt.
Alle versleutelingsalgoritmen zijn onderverdeeld in twee hoofdtypen: symmetrisch (één sleutel voor versleuteling en ontsleuteling) en asymmetrisch (een sleutelpaar — openbaar en privé). De keuze van het type hangt af van het gebruiksdoel: voor het versleutelen van lokale gegevens worden vaak symmetrische algoritmen gebruikt vanwege hun snelheid, en voor sleuteloverdracht en authenticatie — asymmetrische.
| Kenmerk | Symmetrisch | Asymmetrisch |
|---|---|---|
| Aantal sleutels | 1 (geheim) | 2 (openbaar + privé) |
| Snelheid | Hoog (1–10 GB/s) | Laag (1–10 MB/s) |
| Sleuteldistributie | Problematisch — sleutel moet worden overgedragen | Eenvoudig — openbare sleutel wordt gepubliceerd |
| Voorbeelden | AES, ChaCha20 | RSA, ECDH, ECIES |
| Toepassing in mobiele ontwikkeling | Versleuteling van lokale gegevens | Sleuteluitwisseling, digitale handtekeningen |
In de praktijk wordt in mobiele apps hybride versleuteling gebruikt: met een asymmetrisch algoritme (bijv. ECDH) wisselen partijen een sessiesleutel uit, en alle daaropvolgende gegevens worden versleuteld met een symmetrisch algoritme (AES of ChaCha20). Deze benadering combineert de snelheid van symmetrische versleuteling met de veiligheid van asymmetrische sleuteluitwisseling. Deze methode vormt de basis van TLS 1.3, Signal Protocol en Apple iMessage.
Moderne mobiele ontwikkeling gebruikt verschillende gestandaardiseerde versleutelingsalgoritmen, elk ontworpen voor specifieke taken met hun eigen toepassingsgebied.
Versleuteling beschermt gegevens in drie belangrijke scenario's: bij verlies van het apparaat (schijfversleuteling en app-containers), bij onderschepping van verkeer (netwerkprotocollen TLS/HTTPS) en bij een lek op de server (end-to-end-versleuteling). Elk scenario vereist zijn eigen aanpak en hulpmiddelen.
Data at rest — gegevens op het apparaat — wordt versleuteld via Android Keystore en iOS Keychain. Op Android vanaf versie 7.0 wordt bestandsgebaseerde versleuteling (File-Based Encryption) gebruikt, en apps kunnen hun gegevens extra versleutelen via EncryptedSharedPreferences en EncryptedFile uit de AndroidX Security-bibliotheek. Op iOS werken alle apps standaard met Data Protection API, die bestanden versleutelt op bestandssysteemniveau met een sleutel die is gekoppeld aan de apparaatcode. Voor data in transit wordt TLS 1.2/1.3 gebruikt met verplichte Certificate Pinning.
End-to-endversleuteling (E2E) — het hoogste niveau van gegevensbescherming, waarbij een bericht wordt versleuteld op het apparaat van de verzender en alleen wordt ontsleuteld op het apparaat van de ontvanger. De server voor opslag en overdracht heeft geen toegang tot de inhoud — deze werkt alleen met versleutelde blobs. De bekendste implementatie van E2E voor mobiele apps is Signal Protocol, dat het Double Ratchet Algorithm gebruikt in combinatie met X3DH (Extended Triple Diffie-Hellman) voor initiële sleuteluitwisseling. Signal Protocol biedt Perfect Forward Secrecy en future secrecy: compromittering van één sleutel onthult geen eerdere of volgende berichten. Volgens onderzoek van de Carnegie Mellon University (2023) vermindert E2E-versleuteling in messengers het risico op het lekken van correspondentie met 99,7% in vergelijking met alleen TLS-versleuteling. Toepassing van E2E is verplicht voor apps in de categorieën Health & Fitness en Finance volgens de vereisten van GDPR en HIPAA. Voor implementatie van E2E in een eigen project wordt aanbevolen de Signal Protocol-bibliotheek (Java/Swift) of Olm (Matrix protocol) te gebruiken. Bij het kiezen van een E2E-oplossing moet u de compatibiliteit met het platform beoordelen: Signal Protocol vereist ondersteuning voor asynchrone verzending en opslag van sleutels op de client, wat de implementatie van multi-device-scenario's bemoeilijkt — voor dergelijke gevallen kan Matrix Protocol met zijn kamermodel een betere keuze zijn.
Laten we een voorbeeld bekijken van het versleutelen en ontsleutelen van gegevens op Android met Jetpack Security (AndroidX Security). De bibliotheek biedt EncryptedFile voor bestandsversleuteling en EncryptedSharedPreferences voor instellingen.
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val encryptedFile = EncryptedFile.Builder(
context,
File(context.filesDir, "secret.dat"),
masterKey,
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build()
encryptedFile.openFileOutput(applicationContext).use { outputStream ->
outputStream.write("Gevoelige gebruikersgegevens".toByteArray(Charsets.UTF_8))
}
MasterKey wordt aangemaakt met AES256-GCM — de veiligste modus voor symmetrische versleuteling. De sleutel wordt opgeslagen in Android Keystore, geïsoleerd van het hoofdproces: zelfs bij compromittering van de app kan een aanvaller de sleutel niet extraheren. EncryptedFile gebruikt AES-256-GCM met HKDF voor sleutelafleiding en een paginagrootte van 4KB, wat een goede balans biedt tussen snelheid en veiligheid. Voor het lezen van gegevens wordt openFileInput gebruikt met dezelfde parameters: de bibliotheek ontsleutelt de gegevens automatisch bij het lezen.
Op iOS wordt vergelijkbare functionaliteit geboden via CryptoKit (Swift) met AES.GCM of ChaChaPoly. De sleutel wordt opgeslagen in Secure Enclave via Keychain Services. Het principe is hetzelfde: sleutels verlaten nooit de beveiligde hardwareopslag en gegevens worden versleuteld voordat ze naar schijf worden geschreven. Deze architectuur voldoet aan de aanbevelingen van OWASP MASVS (Mobile Application Security Verification Standard) niveau L2 — voor apps die met gevoelige gegevens werken. In echte projecten dekt de combinatie van EncryptedSharedPreferences voor tokens en EncryptedFile voor gebruikersgegevens 100% van de lokale versleutelingsscenario's. Daarnaast wordt voor het werken met sleutels die van de server zijn ontvangen (bijv. ECDH-sessiesleutels) Android KeyStore gebruikt met parameter purpose = KeyProperties.PURPOSE_ENCRYPT, wat garandeert dat de sleutel alleen kan worden gebruikt voor toegestane cryptografische bewerkingen en nooit in ongecodeerde vorm uit de hardwareopslag naar het werkgeheugen wordt geëxporteerd.
Veelgestelde vragen
AES-256 in GCM-modus met sleutelopslag in hardwareopslag (Android Keystore / iOS Keychain) wordt als de gouden standaard beschouwd. Voor netwerkverkeer — TLS 1.3 met elliptische curve Curve25519. ChaCha20-Poly1305 wordt gebruikt als alternatief op apparaten zonder hardwarematige AES.
AES — een symmetrisch algoritme (één sleutel), snel, geschikt voor het versleutelen van grote hoeveelheden gegevens. RSA — asymmetrisch (sleutelpaar), langzaam, gebruikt voor sleutelversleuteling en handtekeningen, niet voor gegevens. In mobiele apps versleutelt AES gegevens, RSA beschermt sleutels.
Alleen vertrouwelijke gegevens moeten worden versleuteld: toegangstokens, wachtwoorden, persoonlijke informatie, betalingsgegevens, medische dossiers. Openbare gegevens (afbeeldingen, inhoud) kunnen onversleuteld blijven, maar het is beter om ze in een beveiligde app-container op te slaan.
Bij end-to-endversleuteling worden gegevens versleuteld op het apparaat van de verzender voordat ze worden verzonden en alleen ontsleuteld op het apparaat van de ontvanger. De server ziet alleen versleutelde gegevens. Het Double Ratchet-protocol, geïmplementeerd in Signal Protocol, is het meest voorkomende E2E-mechanisme in mobiele messengers.
Technisch mogelijk, maar niet aanbevolen. Gebruik voor gegevens op het apparaat symmetrische versleuteling (AES-GCM) met een sleutel uit Keystore. Voor het netwerk — TLS 1.3 met een aparte sleutelset en Certificate Pinning. Scheiding voorkomt compromittering van beide kanalen bij lekken van één sleutel.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook