
Moja krótka odpowiedź: Na nowoczesnych iPhone’ach i high-endowych urządzeniach z Androidem najczęściej wybieram AES-GCM. Na starszych, tanich lub mieszanych urządzeniach z Androidem często lepszym wyborem jest ChaCha20-Poly1305. Nie ze względu na „większe bezpieczeństwo”, lecz z powodu prędkości, obciążenia CPU, ciepła i baterii.
Jeśli miałbym sprowadzić temat do prostej zasady, to takiej:
Jeden punkt jest kluczowy: jeśli AES działa bez sprzętowego wsparcia, kosztuje to według artykułu nawet do 10 razy więcej cykli CPU na bajt. Na podstawowych urządzeniach z Androidem ChaCha20 może być około 3× szybszy. Widać to przy uploadach zdjęć, synchronizacji, wiadomościach i cache.
Na co zwracam uwagę:
Krótko mówiąc: jeśli tworzę aplikację dla wielu klas Androida, chcę równomiernej wydajności. Jeśli celuję w nowe urządzenia ze sprzętowym AES, AES-GCM jest często moim pierwszym wyborem.
| Aspekt | AES-GCM | ChaCha20-Poly1305 |
|---|---|---|
| Bezpieczeństwo przy poprawnym użyciu | Wysokie | Wysokie |
| Bliskość sprzętu | Mocna | Niska |
| Na nowych iPhone’ach / flagowcach | Często z przodu | Dobrze |
| Na starych / tanich urządzeniach Android | Często słabsza | Często z przodu |
| Obciążenie CPU bez sprzętowego AES | Raczej wysokie | Raczej niższe |
| Ciepło / bateria na słabych urządzeniach | Może bardziej rosnąć | Często bardziej równomierne |
| Główne ryzyko | Nonce powtórzony, dane przed weryfikacją | Nonce powtórzony, dane przed weryfikacją |
| Typowe zastosowania mobilne | dane lokalne, backend z naciskiem na AES | Wiadomości, uploady, mieszany park Androida |
Podsumowuję artykuł tak: Nie „Który algorytm jest lepszy?” jest kluczowym pytaniem, lecz „Na jakim urządzeniu działa moja aplikacja i gdzie są dane?”
Na końcu chodzi o trzy rzeczy: budowę, wykorzystanie sprzętu i błędy przy implementacji. W codziennym użytkowaniu aplikacji mobilnych liczy się przede wszystkim dostępny sprzęt, czas działania w oprogramowaniu i pytanie, co się stanie, gdy coś pójdzie nie tak przy implementacji.
AES-GCM to procedura AEAD oparta na AES. Na urządzeniach ze sprzętowym przyspieszeniem działa bardzo szybko. Brak tego wsparcia często znacznie obniża wydajność.
ChaCha20-Poly1305 to procedura AEAD oparta na ChaCha20. Jest zaprojektowana do działania w oprogramowaniu i dlatego często ma przewagę na starszych lub tańszych urządzeniach Android.
Obie metody mają ten sam newralgiczny punkt: Nonce nigdy nie może być użyty ponownie z tym samym kluczem. Jeśli tak się stanie, bezpieczeństwo obu metod zostaje złamane. W przypadku AES-GCM mogą nawet pojawić się fałszerstwa.
Równie ważne: Odszyfrowane dane mogą być przetwarzane dopiero po pomyślnej autoryzacji. Innymi słowy: najpierw sprawdź, potem dotknij. Inaczej to tak, jakby zamykać drzwi dopiero po wejściu do domu.
| Cechy | AES-GCM | ChaCha20-Poly1305 |
|---|---|---|
| Typ szyfru | Procedura AEAD oparta na AES | Procedura AEAD oparta na ChaCha20 |
| Uwierzytelnianie | GCM | Poly1305 |
| Zaleta praktyczna | Bardzo szybki ze sprzętowym przyspieszeniem | Korzystny na urządzeniach bez przyspieszenia AES |
| Typowe ryzyka implementacji | Powtórne użycie nonce, przetwarzanie przed uwierzytelnieniem | Powtórne użycie nonce, przetwarzanie przed uwierzytelnieniem |
Jak to wpływa na tempo i baterię, pokazuje następna sekcja.
AES-GCM vs. ChaCha20-Poly1305: Mobile Encryption Guide by Device Class
Na urządzeniach mobilnych przede wszystkim klasa urządzenia robi różnicę. AES-GCM mocno korzysta z przyspieszenia sprzętowego, podczas gdy ChaCha20-Poly1305 pozostaje szybki nawet, gdy wszystko działa w oprogramowaniu. Właśnie tu widać różnicę między high-end, średnią klasą a starszymi urządzeniami.
Dla aplikacji z zdjęciami, wiadomościami i aktualizacjami aukcji liczy się jedno: Jak dobrze działają synchronizacja i szyfrowanie na starszych smartfonach? Bo tam opóźnienia, duże obciążenie CPU i szybkie rozładowanie baterii są najszybciej odczuwalne.
Na aktualnych iPhone’ach i high-endowych urządzeniach Android AES-GCM jest zwykle szybszy. Powód jest prosty: sprzęt wykonuje operacje AES bezpośrednio, osiągając bardzo wysoką przepustowość. Jednocześnie obciążenie CPU, nagrzewanie i zużycie baterii są niskie. To sprawia, że wydajność jest bardziej przewidywalna na różnych urządzeniach Android.
Wiele starszych lub tanich urządzeń Android bez rozszerzeń kryptograficznych ARMv8 musi wykonywać AES całkowicie w oprogramowaniu. To kosztuje zauważalnie więcej czasu procesora: software’owy AES może zużywać do 10 razy więcej cykli CPU na bajt niż sprzętowo przyspieszony AES. Urządzenie szybciej się nagrzewa, a bateria szybciej się rozładowuje.
ChaCha20-Poly1305 jest zaprojektowany do działania w oprogramowaniu i często wyraźnie wygrywa w takich warunkach. Widać to od razu przy synchronizacji, przesyłaniu zdjęć i szyfrowanych danych lokalnych.
Tabela pokazuje, jak bardzo klasa urządzenia wpływa na szybkość i zużycie baterii.
| Platforma | Klasa urządzenia | Przyspieszenie AES | Wydajność | Obciążenie CPU | Nagrzewanie | Zużycie baterii |
|---|---|---|---|---|---|---|
| iOS | Nowoczesny iPhone (A14+) | Pełne (sprzęt) | AES-GCM szybszy* | Bardzo niskie | Minimalne | Znikome |
| Android | Flagowiec | Pełne (sprzęt) | AES-GCM szybszy* | Niskie | Minimalne | Niskie |
| Android | Średnia klasa (np. seria SD 6) | Częściowe / zmienne | ChaCha20 często szybszy* | Średnie | Umiarkowane | Umiarkowane |
| Android | Budżetowe / starsze urządzenia | Brak (oprogramowanie) | ChaCha20 ~3× szybszy* | Wysokie | Szybkie nagrzewanie | Wysokie (przy AES) |
Wszystkie dane zależą od benchmarków i różnią się w zależności od SoC i implementacji bibliotek.
Pojedynczy wynik szybkości z aktualnego urządzenia testowego ma w praktyce niewielką wartość. Lepiej testować celowo na starszych urządzeniach, które są nadal aktywnie używane.
Mierz przez 5–10 minut pod obciążeniem:
Ważne też: używaj na obu platformach tej samej biblioteki. W przeciwnym razie porównujesz nie algorytmy, lecz różnice w implementacji.
Jak bardzo to wpływa na lokalne dane, obrazy i wywołania API, pokazuje następna część.
Dla Gunfinder najważniejsze jest jedno: czy dane są przechowywane lokalnie czy przesyłane? Od tego zależy, gdzie jest ryzyko i która ochrona przynosi więcej korzyści.
Lokalnie przechowywane dane są często niedoceniane. A to właśnie tam leży część problemu. Zapisane wyniki wyszukiwania, zawartość koszyka oraz dane konta i profilu znajdują się bezpośrednio na urządzeniu. Jeśli backup nie jest chroniony lub urządzenie zostało naruszone, te dane mogą stać się dostępne.
W przypadku danych lokalnych najważniejsze jest urządzenie docelowe. Jeśli urządzenie ma akcelerację AES, AES-GCM jest mocnym wyborem. Brak tego wsparcia sprawia, że ChaCha20-Poly1305 często działa wydajniej. Klucz powinien być bezpiecznie przechowywany w Android Keystore lub w Apple Keychain lub Secure Enclave. I jest jeden punkt, którego nie można negocjować: każdy plik potrzebuje własnej 96-bitowej nonce. Powtórne użycie nonce łamie bezpieczeństwo i integralność.
To samo podstawowe zasady obowiązują przy transmisji danych. Tam jednak nacisk kładzie się na inne aspekty: dane użytkownika i logowanie.
TLS chroni ścieżkę transportu. To jednak nie oznacza automatycznie, że same dane użytkownika są chronione. Jeśli prywatne wiadomości między kupującymi a sprzedającymi lub dane ofert w aukcjach trafiają do logów serwera, bez dodatkowego szyfrowania na poziomie aplikacji są czytelne w postaci jawnej. Właśnie tutaj wchodzą w grę AES-GCM i ChaCha20-Poly1305. Uzupełniają one szyfrowanie transportu jako druga warstwa ochrony.
Kluczowy punkt to więc nie sam algorytm. Decydujące jest, czy dane znajdują się na urządzeniu, czy przesyłane są przez sieć.
W przypadku danych lokalnych najważniejsza jest klasa urządzenia. Przy danych API, przesyłaniu i wiadomościach liczy się przede wszystkim dobre zarządzanie kluczami i nonce.
Dla Gunfinder liczy się ostatecznie jedno: dobre zarządzanie kluczami i nonce. Która opcja lepiej sprawdza się na co dzień, pokazuje następna część.
Dla Gunfinder najważniejsze jest jedno: jakie urządzenie używa aplikacja i jakie dane są przetwarzane? To właśnie od tego w praktyce zależy wybór metody. Poniższa tabela podsumowuje to i przypisuje typowe workflow Gunfinder.
| Wymaganie aplikacji | Środowisko urządzenia | Priorytet | Rekomendowany algorytm |
|---|---|---|---|
| Zaszyfrowane szkice | iOS / flagowe Androidy | Bezpieczeństwo sprzętowe | AES-GCM |
| Buforowane listingi | Mieszany park urządzeń Android | Spójność wydajności | ChaCha20-Poly1305 |
| Dane konta i transakcji | Wszystkie platformy | Integralność danych | AES-GCM |
| Przesyłanie zdjęć | Starsze lub podstawowe urządzenia Android | Efektywność baterii | ChaCha20-Poly1305 |
| Wiadomości na rynku | Mieszany park urządzeń Android | Niska latencja | ChaCha20-Poly1305 |
| Aktualizacje aukcji | Ruch backendowy | Istniejąca standaryzacja AES | AES-GCM |
Dla wszystkich przypadków obowiązuje ta sama podstawowa struktura: bezpieczny magazyn kluczy przez Android Keystore lub Apple Keychain, unikalne nonces dla każdej operacji, TLS 1.3 dla każdej transmisji oraz regularna rotacja kluczy. Bez tych elementów nawet najlepszy algorytm pomaga tylko w połowie.
AES-GCM dobrze pasuje do nowoczesnych iPhone’ów i flagowych urządzeń z Androidem, jeśli dostępny jest sprzętowy AES i backend już na tym bazuje. Wtedy metoda pokazuje swoje zalety tam, gdzie urządzenia ją bezpośrednio dobrze wspierają.
Gdy w grę wchodzą także starsze lub tańsze urządzenia z Androidem, ChaCha20-Poly1305 często jest bardziej niezawodnym wyborem. Powód jest prosty: wydajność na takich urządzeniach zwykle jest bardziej stabilna niż przy programowym AES.
Oba algorytmy są bezpieczne, jeśli są poprawnie używane. Krótko mówiąc: AES-GCM dobrze pasuje do środowisk z dużym wsparciem sprzętowym, ChaCha20-Poly1305 raczej do mieszanych flot Androida.
Czy twoje urządzenie docelowe ma sprzętowe przyspieszenie AES, zależy od zamontowanego procesora. Wiele nowszych procesorów wspiera AES-NI. To znacznie zwiększa efektywność szyfrowania.
W przypadku urządzeń z Androidem i iOS najlepiej sprawdzić to w specyfikacji technicznej procesora. W smartfonach i tabletach opartych na ARM sprzętowe przyspieszenie operacji kryptograficznych jest często już wbudowane. System operacyjny zwykle korzysta z niego automatycznie.
Jeśli użyjesz nonce więcej niż raz, obniżasz bezpieczeństwo szyfrowania.
Wtedy atakujący mogą zobaczyć wzorce w zaszyfrowanych danych lub nawet wywnioskować użyty klucz.
To uderza w poufność twoich danych z pełną siłą. Dlatego nonce musi być przy każdej operacji szyfrowania nowa i unikalna.
Nie. TLS 1.3 chroni dane w trakcie transmisji. Nie zabezpiecza lokalnie przechowywanych danych aplikacji na urządzeniu.
Jeśli chcesz chronić dane kompleksowo, potrzebujesz dodatkowo szyfrowania lokalnego. Przy wrażliwych transakcjach może być też wskazany AES-256.
Dopiero połączenie bezpiecznej transmisji i szyfrowania lokalnego pomaga także wtedy, gdy pojawią się problemy techniczne lub ktoś nieuprawniony uzyska dostęp do urządzenia końcowego.