Criptarea (encryption) — to proces przekształcania danych w formę niedostępną do odczytu bez specjalnego klucza. W aplikacjach mobilnych criptarea chroni dane osobowe użytkowników, informacje płatnicze i logikę biznesową przed przechwyceniem i wyciekiem. Według danych Statista (2024), liczba wycieków danych z aplikacji mobilnych wzrosła o 38% w ciągu dwóch lat, a w 72% przypadków przyczyną był brak lub nieprawidłowe criptarea. Nowoczesne platformy mobilne udostępniają wbudowane API do szyfrowania, a ich użycie jest obowiązkowym standardem bezpieczeństwa. Statista, 2024
Principalele
Criptarea w kontekście aplikacji mobilnych — to zastosowanie algorytmów kryptograficznych do ochrony danych przechowywanych na urządzeniu (data at rest) i przesyłanych przez sieć (data in transit). Na poziomie urządzenia szyfrowane jest lokalne przechowywanie: pliki, bazy danych, SharedPreferences i pamięć podręczna. Na poziomie sieci szyfrowany jest ruch między aplikacją a serwerem za pomocą protokołów TLS/HTTPS. Ostatecznym celem jest zagwarantowanie, że nawet przy fizycznym dostępie do urządzenia lub przechwyceniu ruchu, osoba atakująca nie będzie mogła odczytać chronionych danych bez klucza kryptograficznego.
Urządzenia mobilne są szczególnie narażone na utratę danych: telefon łatwo zgubić, ukraść lub zainfekować złośliwym oprogramowaniem. Według danych Ponemon Institute (2023), 42% firm, które doświadczyły wycieków danych, łączy incydenty z urządzeniami mobilnymi. Bez szyfrowania osoba atakująca może podłączyć się do urządzenia przez USB, wyodrębnić bazę SQLite i odczytać wszystkie zapisane dane. Criptarea rozwiązuje ten problem: nawet jeśli baza zostanie wyodrębniona, jej zawartość pozostaje zaszyfrowana. Dodatkowo, w USA i UE obowiązują przepisy (GDPR, CCPA), które wymagają szyfrowania danych osobowych i przewidują grzywny do 4% rocznego obrotu za ich naruszenie. Używanie szyfrowania — to nie tylko konieczność techniczna, ale także prawna dla każdej aplikacji mobilnej pracującej z danymi użytkowników.
Wszystkie algorytmy szyfrowania dzielą się na dwa główne typy: symetryczne (jeden klucz do szyfrowania i deszyfrowania) i asymetryczne (para kluczy — publiczny i prywatny). Wybór typu zależy od scenariusza użycia: do szyfrowania danych lokalnych częściej stosuje się algorytmy symetryczne ze względu na ich szybkość, a do przekazywania kluczy i uwierzytelniania — asymetryczne.
| Cecha | Symetryczne | Asymetryczne |
|---|---|---|
| Liczba kluczy | 1 (tajny) | 2 (publiczny + prywatny) |
| Szybkość | Wysoka (1–10 GB/s) | Niska (1–10 MB/s) |
| Dystrybucja klucza | Problem — trzeba przekazać klucz | Prosta — klucz publiczny jest publikowany |
| Przykłady | AES, ChaCha20 | RSA, ECDH, ECIES |
| Zastosowanie w deweloperce mobilnej | Criptarea danych lokalnych | Wymiana kluczy, podpisy cyfrowe |
W praktyce în aplicațiile mobile stosuje się criptarea hybrydowe: algorytmem asymetrycznym (np. ECDH) strony wymieniają się kluczem sesyjnym, a wszystkie kolejne dane są szyfrowane algorytmem symetrycznym (AES lub ChaCha20). Takie podejście łączy szybkość szyfrowania symetrycznego z bezpieczeństwem asymetrycznej wymiany kluczy. Ta metoda leży u podstaw TLS 1.3, Signal Protocol i Apple iMessage.
Nowoczesna deweloperka mobilna używa kilku standaryzowanych algorytmów szyfrowania, z których każdy jest przeznaczony do określonych zadań i ma swój obszar zastosowania.
Criptarea chroni dane w trzech kluczowych scenariuszach: przy utracie urządzenia (criptarea dysku i konteneróîn aplicațiile mobile), przy przechwyceniu ruchu (protokoły sieciowe TLS/HTTPS) i przy wycieku z serwera (criptarea end-to-end). Każdy scenariusz wymaga własnego podejścia i narzędzi.
Data at rest — dane na urządzeniu — jest szyfrowane przez Android Keystore i iOS Keychain. W Android od wersji 7.0 stosowane jest criptarea plików (File-Based Encryption), a aplikacje mogą dodatkowo szyfrować swoje dane przez EncryptedSharedPreferences i EncryptedFile z biblioteki AndroidX Security. W iOS wszystkie aplikacje domyślnie korzystają z Data Protection API, który szyfruje pliki na poziomie systemu plików z kluczem powiązanym z kodem urządzenia. Dla data in transit stosowany jest TLS 1.2/1.3 z obowiązkowym Certificate Pinning.
Criptarea end-to-end (E2E) — najwyższy poziom ochrony danych, w którym wiadomość jest szyfrowana na urządzeniu nadawcy i deszyfrowana tylko na urządzeniu odbiorcy. Serwer przechowywania i przesyłania danych nie ma dostępu do treści — operuje tylko na zaszyfrowanych blobach. Najbardziej znana implementacja E2E dla aplikacji mobilnych — Signal Protocol, używający Double Ratchet Algorithm w kombinacji z X3DH (Extended Triple Diffie-Hellman) do początkowej wymiany kluczy. Signal Protocol zapewnia Perfect Forward Secrecy i future secrecy: kompromitacja jednego klucza nie ujawnia poprzednich i kolejnych wiadomości. Według badań uniwersytetu Carnegie Mellon (2023), criptarea E2E w komunikatorach zmniejsza ryzyko wycieku korespondencji o 99,7% w porównaniu z criptaream TLS-only. Stosowanie E2E jest obowiązkowe dla aplikacji kategorii Health & Fitness i Finance zgodnie z wymaganiami GDPR i HIPAA. Do implementacji E2E we własnym projekcie zaleca się użycie biblioteki Signal Protocol (Java/Swift) lub opartej na Olm (Matrix protocol). Przy wyborze rozwiązania E2E oceń kompatybilność z platformą: Signal Protocol wymaga obsługi asynchronicznego wysyłania i przechowywania kluczy na kliencie, co komplikuje implementację scenariuszy multi-device — w takich przypadkach Matrix Protocol z jego modelem pokojów może być lepszym wyborem.
Rozważmy przykład szyfrowania i deszyfrowania danych na Android z użyciem Jetpack Security (AndroidX Security). Biblioteka udostępnia EncryptedFile do szyfrowania plików i EncryptedSharedPreferences dla ustawień.
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("Date sensibile ale utilizatorului".toByteArray(Charsets.UTF_8))
}
MasterKey jest tworzony przy użyciu AES256-GCM — najbezpieczniejszego trybu szyfrowania symetrycznego. Klucz jest przechowywany w Android Keystore, izolowanym od głównego procesu: nawet przy kompromitacji aplikacji osoba atakująca nie może wyodrębnić klucza. EncryptedFile używa schematu AES-256-GCM z HKDF do derivacji klucza i rozmiarem strony 4KB, co daje dobry balans między szybkością a bezpieczeństwem. Do odczytu danych używane jest openFileInput z tymi samymi parametrami: biblioteka automatycznie deszyfruje dane przy odczycie.
Na iOS analogiczna funkcjonalność jest zapewniana przez CryptoKit (Swift) z użyciem AES.GCM lub ChaChaPoly. Klucz jest przechowywany w Secure Enclave przez Keychain Services. Zasada jest taka sama: klucze nigdy nie opuszczają chronionego magazynu sprzętowego, a dane są szyfrowane przed zapisem na dysk. Taka architektura jest zgodna z zaleceniami OWASP MASVS (Mobile Application Security Verification Standard) poziomu L2 — dla aplikacji pracujących z wrażliwymi danymi. W rzeczywistych projektach kombinacja EncryptedSharedPreferences dla tokenów i EncryptedFile dla danych użytkownika pokrywa 100% scenariuszy lokalnego szyfrowania. Dodatkowo, do pracy z kluczami otrzymanymi z serwera (np. klucze sesyjne ECDH) używany jest Android KeyStore z parametrem purpose = KeyProperties.PURPOSE_ENCRYPT, który gwarantuje, że klucz może być używany tylko do dozwolonych operacji kryptograficznych i nigdy nie jest eksportowany z magazynu sprzętowego do pamięci operacyjnej w otwartej postaci.
Często zadawane pytania
AES-256 w trybie GCM z przechowywaniem klucza w magazynie sprzętowym (Android Keystore / iOS Keychain) jest uważany za złoty standard. Dla ruchu sieciowego — TLS 1.3 z krzywą eliptyczną Curve25519. ChaCha20-Poly1305 jest używany jako alternatywa na urządzeniach bez sprzętowego AES.
AES — algorytm symetryczny (jeden klucz), szybki, odpowiedni do szyfrowania dużych ilości danych. RSA — asymetryczny (para kluczy), wolny, używany do szyfrowania kluczy i podpisów, a nie samych danych. W aplikacjach mobilnych AES szyfruje dane, RSA chroni klucze.
Szyfrować należy dane poufne: tokeny dostępu, hasła, dane osobowe, dane płatnicze, dokumentację medyczną. Dane publiczne (zdjęcia, treści) można pozostawić nieszyfrowane, jednak lepiej przechowywać je w chronionym kontenerze aplikacji.
Przy szyfrowaniu end-to-end dane są szyfrowane na urządzeniu nadawcy przed wysłaniem i deszyfrowane tylko na urządzeniu odbiorcy. Serwer widzi tylko zaszyfrowane dane. Protokół Double Ratchet, zaimplementowany w Signal Protocol, to najczęściej stosowany mechanizm E2E w komunikatorach mobilnych.
Technicznie można, ale nie jest zalecane. Dla danych na urządzeniu używaj szyfrowania symetrycznego (AES-GCM) z kluczem z Keystore. Dla sieci — TLS 1.3 z osobnym zestawem kluczy i Certificate Pinning. Rozdzielenie zapobiega kompromitacji obu kanałów przy wycieku jednego klucza.
Podsumowanie
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și