Шифровање (encryption) је процес претварања података у облик који је недоступан за читање без специјалног кључа. У мобилним апликацијама, шифровање штити личне податке корисника, информације о плаћању и пословну логику од пресретања и цурења. Према подацима Statista (2024), број цурења података из мобилних апликација порастао је за 38% у две године, а у 72% случајева узрок је био недостатак или неправилно шифровање. Савремене мобилне платформе пружају уграђене API-је за шифровање, а њихово коришћење је обавезни стандард безбедности. Statista, 2024
Главно
Шифровање у контексту мобилних апликација — је примена криптографских алгоритама за заштиту података који се чувају на уређају (data at rest) и који се преносе путем мреже (data in transit). На нивоу уређаја, локално складиште је шифровано: датотеке, базе података, SharedPreferences и кеш. На мрежном нивоу, саобраћај између апликације и сервера је шифрован путем TLS/HTTPS протокола. Крајњи циљ — гарантовати да чак и са физичким приступом уређају или пресретањем саобраћаја, нападач не може да прочита заштићене податке без криптографског кључа.
Мобилни уређаји су посебно рањиви на губитак података: телефон се лако може изгубити, украсти или заразити злоупотребљивим софтвером. Према подацима Ponemon Institute (2023), 42% компанија које су претрпеле цурење података повезују инциденте са мобилним уређајима. Без шифровања, нападач се може повезати на уређај путем USB-а, извући базу SQLite и прочитати све сачуване податке. Шифровање решава овај проблем: чак и ако је база извучена, њен садржај остаје шифрован. Додатно, у САД и ЕУ на снази су закони (GDPR, CCPA) који захтевају шифровање личних података и предвиђају казне до 4% годишњег промета за њихово кршење. Коришћење шифровања — није само техничка, већ и правна потреба за сваку мобилну апликацију која ради са подацима корисника.
Сви алгоритми шифровања деле се на два основна типа: симетрични (један кључ за шифровање и дешифровање) и асиметрични (пар кључева — јавни и приватни). Избор типа зависи од сценарија коришћења: за шифровање локалних података чешће се примењују симетрични алгоритми због њихове брзине, а за пренос кључева и аутентификацију — асиметрични.
| Карактеристика | Симетрично | Асиметрично |
|---|---|---|
| Број кључева | 1 (тајни) | 2 (јавни + приватни) |
| Брзина | Висока (1–10 GB/s) | Ниска (1–10 MB/s) |
| Дистрибуција кључа | Проблем — треба пренети кључ | Једноставно — јавни кључ се објављује |
| Примери | AES, ChaCha20 | RSA, ECDH, ECIES |
| Примена у мобилном развоју | Шифровање локалних података | Размена кључева, дигитални потписи |
У пракси у мобилним апликацијама користи се хибридно шифровање: асиметричним алгоритмом (нпр. ECDH) стране размењују сесијски кључ, а сви накнадни подаци се шифрују симетричним алгоритмом (AES или ChaCha20). Овај приступ комбинује брзину симетричног шифровања са сигурношћу асиметричне размене кључева. Ова метода је у основи TLS 1.3, Signal Protocol и Apple iMessage.
Савремени мобилни развој користи неколико стандардизованих алгоритама шифровања, од којих је сваки намењен одређеним задацима и има своју област примене.
Шифровање штити податке у три кључна сценарија: при губитку уређаја (шифровање диска и контејнера апликације), при пресретању саобраћаја (мрежни протоколи TLS/HTTPS) и при цурењу са сервера (шифровање од краја до краја). Сваки сценариј захтева свој приступ и алате.
Data at rest — подаци на уређају — шифрују се путем Android Keystore и iOS Keychain. На Android-у од верзије 7.0 користи се шифровање датотека (File-Based Encryption), а апликације могу додатно да шифрују своје податке путем EncryptedSharedPreferences и EncryptedFile из библиотеке AndroidX Security. На iOS-у све апликације подразумевано раде са Data Protection API, који шифрује датотеке на нивоу фајл система кључем везаним за код уређаја. За data in transit користи се TLS 1.2/1.3 са обавезним Certificate Pinning.
Шифровање од краја до краја (E2E) — највиши ниво заштите података, при чему се порука шифрује на уређају пошиљаоца и дешифрује само на уређају примаоца. Сервер за складиштење и пренос података нема приступ садржају — он оперише само са шифрованим blob-овима. Најпознатија имплементација E2E за мобилне апликације — Signal Protocol, који користи Double Ratchet Algorithm у комбинацији са X3DH (Extended Triple Diffie-Hellman) за почетну размену кључева. Signal Protocol обезбеђује Perfect Forward Secrecy и future secrecy: компромитација једног кључа не открива претходне и накнадне поруке. Према истраживању универзитета Carnegie Mellon (2023), E2E шифровање у месинџерима смањује ризик од цурења преписке за 99,7% у поређењу са TLS-only шифровањем. Примена E2E је обавезна за апликације категорија Health & Fitness и Finance према захтевима GDPR и HIPAA. За имплементацију E2E у сопственом пројекту препоручује се коришћење библиотеке Signal Protocol (Java/Swift) или засноване на Olm (Matrix protocol). При избору E2E решења оцените компатибилност са платформом: Signal Protocol захтева подршку за асинхроно слање и чување кључева на клијенту, што компликује имплементацију multi-device сценарија — у таквим случајевима Matrix Protocol са својим моделом соба може бити бољи избор.
Размотримо пример шифровања и дешифровања података на Android-у коришћењем Jetpack Security (AndroidX Security). Библиотека пружа EncryptedFile за шифровање датотека и EncryptedSharedPreferences за подешавања.
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("Осетљиви подаци корисника".toByteArray(Charsets.UTF_8))
}
MasterKey се креира коришћењем AES256-GCM — најсигурнијег режима симетричног шифровања. Кључ се чува у Android Keystore, изолованом од главног процеса: чак и при компромитацији апликације, нападач не може да извуче кључ. EncryptedFile користи шему AES-256-GCM са HKDF за деривацију кључа и величину странице од 4KB, што даје добар баланс између брзине и сигурности. За читање података користи се openFileInput са истим параметрима: библиотека аутоматски дешифрује податке при читању.
На iOS-у аналогна функционалност се обезбеђује путем CryptoKit (Swift) коришћењем AES.GCM или ChaChaPoly. Кључ се чува у Secure Enclave путем Keychain Services. Принцип је исти: кључеви никада не напуштају заштићено хардверско складиште, а подаци се шифрују пре записа на диск. Таква архитектура је у складу са препорукама OWASP MASVS (Mobile Application Security Verification Standard) нивоа L2 — за апликације које раде са осетљивим подацима. У реалним пројектима комбинација EncryptedSharedPreferences за токене и EncryptedFile за корисничке податке покрива 100% сценарија локалног шифровања. Додатно, за рад са кључевима добијеним са сервера (нпр. сесијски кључеви ECDH) користи се Android KeyStore са параметром purpose = KeyProperties.PURPOSE_ENCRYPT, који гарантује да се кључ може користити само за дозвољене криптографске операције и никада се не извози из хардверског складишта у оперативну меморију у отвореном облику.
Често постављана питања
AES-256 у GCM режиму са чувањем кључа у хардверском складишту (Android Keystore / iOS Keychain) сматра се златним стандардом. За мрежни саобраћај — TLS 1.3 са елиптичном кривом Curve25519. ChaCha20-Poly1305 се користи као алтернатива на уређајима без хардверског AES-а.
AES — симетрични алгоритам (један кључ), брз, погодан за шифровање великих количина података. RSA — асиметрични (пар кључева), спор, користи се за шифровање кључева и потписа, а не самих података. У мобилним апликацијама AES шифрује податке, RSA штити кључеве.
Поверљиве податке треба шифровати: токене приступа, лозинке, личне податке, платежне податке, медицинске записе. Јавни подаци (слике, садржај) могу остати нешифровани, али је боље чувати их у заштићеном контејнеру апликације.
Код шифровања од краја до краја подаци се шифрују на уређају пошиљаоца пре слања и дешифрују само на уређају примаоца. Сервер види само шифроване податке. Протокол Double Ratchet, имплементиран у Signal Protocol, најраспрострањенији је E2E механизам у мобилним месинџерима.
Технички може, али се не препоручује. За податке на уређају користите симетрично шифровање (AES-GCM) са кључем из Keystore-а. За мрежу — TLS 1.3 са посебним сетом кључева и Certificate Pinning. Раздвајање спречава компромитацију оба канала при цурењу једног кључа.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође